|
@@ -1,85 +1,92 @@
|
|
|
package main
|
|
|
|
|
|
import (
|
|
|
+ "bytes"
|
|
|
"fmt"
|
|
|
"path"
|
|
|
+ "strings"
|
|
|
+
|
|
|
+ door "git.red-green.com/RedGreen/doorgo"
|
|
|
+)
|
|
|
+
|
|
|
+var (
|
|
|
+ d door.Door
|
|
|
)
|
|
|
|
|
|
func main() {
|
|
|
- // The UserDB would be run on the server
|
|
|
- // But since most/100% of this is examples, we'll setup one up
|
|
|
- db := &UserDB{}
|
|
|
- err := db.Open(path.Join("test_data", "test_users.db3"))
|
|
|
+ d.Init("CyberRealms")
|
|
|
+ defer d.Close()
|
|
|
+ d.WriteS(door.Clrscr)
|
|
|
+ w, err := LoadWorld(path.Join("data", "world"))
|
|
|
if err != nil {
|
|
|
fmt.Println("Err:", err)
|
|
|
- return
|
|
|
- }
|
|
|
- defer db.Close()
|
|
|
-
|
|
|
- // Example query
|
|
|
- dummy, err := db.FindUser("Test Dummy")
|
|
|
- if err != nil {
|
|
|
- // Of course, we'd ask the user for their name and a password then use those
|
|
|
- // But for our Test Dummy let's just make a dumb and simple setup
|
|
|
- err = db.CreateUser("Test Dummy", "12345")
|
|
|
+ w = NewWorld("Overworld", NewVec2(100))
|
|
|
+ err := w.Save(path.Join("data", "world"))
|
|
|
if err != nil {
|
|
|
- fmt.Println("Err:", err)
|
|
|
- return
|
|
|
- }
|
|
|
- dummy, err = db.FindUser("Test Dummy")
|
|
|
- if err != nil {
|
|
|
- fmt.Println("Err:", err)
|
|
|
+ d.WriteS(door.ColorTextS("BRI RED ON BLA") + "Err: " + err.Error() + door.Reset + door.CRNL)
|
|
|
+ d.WaitKey(door.Inactivity)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
- //fmt.Printf("%#v\r\n", dummy)
|
|
|
- // Example verification process
|
|
|
- // I'd also want to verify they aren't trying to login in 2+ places at once
|
|
|
- err = dummy.VerifyPassword("12345")
|
|
|
- if err != nil {
|
|
|
- fmt.Println("Wrong password?")
|
|
|
- } else {
|
|
|
- fmt.Printf("Yay, %s has logged in\r\n", dummy.Name)
|
|
|
- }
|
|
|
- fmt.Printf("%s is at %s\r\n", dummy.Name, dummy.Loc.String())
|
|
|
-
|
|
|
- ti, err := ParseTileIndex(path.Join("test_data", "world1", "tiles.txt"))
|
|
|
- if err != nil {
|
|
|
- fmt.Println("Err:", err)
|
|
|
+ editor := NewEditor(w, NewVec2(int64(door.Width-2), int64(door.Height-2)), NewVec2())
|
|
|
+ if editor == nil {
|
|
|
+ d.WriteS(door.ColorTextS("BRI RED ON BLA") + "Err: Failed initializing editor" + door.Reset + door.CRNL)
|
|
|
+ d.WaitKey(door.Inactivity)
|
|
|
return
|
|
|
}
|
|
|
- fmt.Printf("Loaded %d tiles from 'world1'\r\n", len(ti.Tiles)-1)
|
|
|
- for i, t := range ti.Tiles {
|
|
|
- if i == 0 {
|
|
|
- continue
|
|
|
- }
|
|
|
- fmt.Printf("Id=%d Symbol='%s' Color='%s'\r\n", i, t.Symbol, t.Color)
|
|
|
+ p := door.Panel{
|
|
|
+ X: 1,
|
|
|
+ Y: 1,
|
|
|
+ Width: door.Width - 2,
|
|
|
+ Style: door.SINGLE,
|
|
|
+ BorderColor: door.ColorText("WHI ON BLA"),
|
|
|
}
|
|
|
- w, err := LoadWorld(path.Join("test_data", "world1"))
|
|
|
- if err != nil {
|
|
|
- fmt.Println("Err:", err)
|
|
|
- return
|
|
|
+ for range make([]byte, door.Height-2) {
|
|
|
+ p.Lines = append(p.Lines, &door.Line{
|
|
|
+ Text: bytes.NewBufferString(strings.Repeat(" ", door.Width-2)),
|
|
|
+ })
|
|
|
}
|
|
|
- fmt.Println("Loaded", w.Name, "a", w.Width, "x", w.Height)
|
|
|
- /*err = w.Save(path.Join("test_data", "world2"))
|
|
|
- if err != nil {
|
|
|
- fmt.Println("Err:", err)
|
|
|
- return
|
|
|
- }*/
|
|
|
- c := &Camera{Size: NewVec2(20)}
|
|
|
- fmt.Println(c.debugView(NewVec2(10), w))
|
|
|
- w2, err := LoadWorld(path.Join("test_data", "world3"))
|
|
|
- if err != nil {
|
|
|
- w2 = NewWorld("Test World 3", NewVec2(20))
|
|
|
- w2.AddTile(".", "BRI GRE ON BLA")
|
|
|
- w2.AddTile("^", "BRI WHI ON BLA")
|
|
|
- w2.AddTile("^", "WHI ON BLA")
|
|
|
- w2.Set(1, 1, 1)
|
|
|
- err = w2.Save(path.Join("test_data", "world3"))
|
|
|
+ tile_menu := editor.TileMenu()
|
|
|
+EDITOR_LOOP:
|
|
|
+ for {
|
|
|
+ d.Write(p.Output())
|
|
|
+ d.WriteS(editor.Camera.View(editor.Pos, NewVec2(1, 2), editor.World) + door.GotoS(door.Width/2, door.Height/2))
|
|
|
+ r, ext, err := d.WaitKey(door.Inactivity)
|
|
|
if err != nil {
|
|
|
- fmt.Println("Err:", err)
|
|
|
+ d.WriteS(door.ColorTextS("BRI RED ON BLA") + "Err: " + err.Error() + door.Reset + door.CRNL)
|
|
|
+ d.WaitKey(door.Inactivity)
|
|
|
return
|
|
|
}
|
|
|
+ if ext != door.NOP {
|
|
|
+ switch ext {
|
|
|
+ case door.UP_ARROW:
|
|
|
+ editor.Pos.Translate(0, -1)
|
|
|
+ case door.DOWN_ARROW:
|
|
|
+ editor.Pos.Translate(0, 1)
|
|
|
+ case door.LEFT_ARROW:
|
|
|
+ editor.Pos.Translate(-1, 0)
|
|
|
+ case door.RIGHT_ARROW:
|
|
|
+ editor.Pos.Translate(1, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if r != 0 {
|
|
|
+ switch r {
|
|
|
+ case 't':
|
|
|
+ fmt.Println("Show the tile menu, and jump to handling options for it")
|
|
|
+ d.Write(tile_menu.Output())
|
|
|
+ d.WaitKey(door.Inactivity)
|
|
|
+ case '5', '\r', '\n':
|
|
|
+ fmt.Println("Allow selecting a tile index number to place a tile at current position")
|
|
|
+ editor.World.Set(uint64(editor.Pos.X), uint64(editor.Pos.Y-1), 1)
|
|
|
+ case 'q':
|
|
|
+ break EDITOR_LOOP
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ err = editor.World.Save(path.Join("data", "world"))
|
|
|
+ if err != nil {
|
|
|
+ d.WriteS(door.ColorTextS("BRI RED ON BLA") + "Err: " + err.Error() + door.Reset + door.CRNL)
|
|
|
+ d.WaitKey(door.Inactivity)
|
|
|
+ return
|
|
|
}
|
|
|
- fmt.Println(c.debugView(NewVec2(10), w2))
|
|
|
}
|