func MakeWallPanel(room *roomDef, viewer *RoomViewer) *WallPanel { var wp WallPanel wp.room = room wp.viewer = viewer wp.VerticalTable = gui.MakeVerticalTable() wp.selected_walls = make(map[int]bool) tex_table := gui.MakeVerticalTable() fnames := GetAllWallTextureNames() for i := range fnames { name := fnames[i] tex_table.AddChild(gui.MakeButton("standard", name, 300, 1, 1, 1, 1, func(t int64) { wt := MakeWallTexture(name) if wt == nil { return } wp.wall_texture = wt wp.wall_texture.temporary = true wp.room.WallTextures = append(wp.room.WallTextures, wp.wall_texture) wp.drag_anchor.X = 0 wp.drag_anchor.Y = 0 })) } wp.VerticalTable.AddChild(gui.MakeScrollFrame(tex_table, 300, 700)) return &wp }
func makeFurniturePanel(room *roomDef, viewer *RoomViewer) *FurniturePanel { var fp FurniturePanel fp.Room = room fp.RoomViewer = viewer fp.key_map = base.GetDefaultKeyMap() if room.Name == "" { room.Name = "name" } fp.name = gui.MakeTextEditLine("standard", room.Name, 300, 1, 1, 1, 1) if room.Floor.Path == "" { room.Floor.Path = base.Path(datadir) } fp.floor_path = gui.MakeFileWidget(room.Floor.Path.String(), imagePathFilter) if room.Wall.Path == "" { room.Wall.Path = base.Path(datadir) } fp.wall_path = gui.MakeFileWidget(room.Wall.Path.String(), imagePathFilter) fp.room_size = gui.MakeComboTextBox(algorithm.Map(tags.RoomSizes, []string{}, func(a interface{}) interface{} { return a.(RoomSize).String() }).([]string), 300) for i := range tags.RoomSizes { if tags.RoomSizes[i].String() == room.Size.String() { fp.room_size.SetSelectedIndex(i) break } } fp.VerticalTable = gui.MakeVerticalTable() fp.VerticalTable.Params().Spacing = 3 fp.VerticalTable.Params().Background.R = 0.3 fp.VerticalTable.Params().Background.B = 1 fp.VerticalTable.AddChild(fp.name) fp.VerticalTable.AddChild(fp.floor_path) fp.VerticalTable.AddChild(fp.wall_path) fp.VerticalTable.AddChild(fp.room_size) furn_table := gui.MakeVerticalTable() fnames := GetAllFurnitureNames() for i := range fnames { name := fnames[i] furn_table.AddChild(gui.MakeButton("standard", name, 300, 1, 1, 1, 1, func(t int64) { f := MakeFurniture(name) if f == nil { return } fp.furniture = f fp.furniture.temporary = true fp.Room.Furniture = append(fp.Room.Furniture, fp.furniture) dx, dy := fp.furniture.Dims() fp.drag_anchor.x = float32(dx) / 2 fp.drag_anchor.y = float32(dy) / 2 })) } fp.VerticalTable.AddChild(gui.MakeScrollFrame(furn_table, 300, 600)) return &fp }
func makeHouseDataTab(house *HouseDef, viewer *HouseViewer) *houseDataTab { var hdt houseDataTab hdt.VerticalTable = gui.MakeVerticalTable() hdt.house = house hdt.viewer = viewer hdt.name = gui.MakeTextEditLine("standard", "name", 300, 1, 1, 1, 1) num_floors_options := []string{"1 Floor", "2 Floors", "3 Floors", "4 Floors"} hdt.num_floors = gui.MakeComboTextBox(num_floors_options, 300) if hdt.house.Icon.Path == "" { hdt.house.Icon.Path = base.Path(filepath.Join(datadir, "houses", "icons")) } hdt.icon = gui.MakeFileWidget(string(hdt.house.Icon.Path), imagePathFilter) hdt.VerticalTable.AddChild(hdt.name) hdt.VerticalTable.AddChild(hdt.num_floors) hdt.VerticalTable.AddChild(hdt.icon) names := GetAllRoomNames() room_buttons := gui.MakeVerticalTable() for _, name := range names { n := name room_buttons.AddChild(gui.MakeButton("standard", name, 300, 1, 1, 1, 1, func(int64) { if hdt.temp_room != nil { return } hdt.temp_room = &Room{Defname: n} base.GetObject("rooms", hdt.temp_room) hdt.temp_room.temporary = true hdt.temp_room.invalid = true hdt.house.Floors[0].Rooms = append(hdt.house.Floors[0].Rooms, hdt.temp_room) hdt.drag_anchor.x = float32(hdt.temp_room.Size.Dx / 2) hdt.drag_anchor.y = float32(hdt.temp_room.Size.Dy / 2) })) } scroller := gui.MakeScrollFrame(room_buttons, 300, 700) hdt.VerticalTable.AddChild(scroller) return &hdt }
func MakeSaveWidget(on_save func(string)) *SaveWidget { var sw SaveWidget sw.VerticalTable = gui.MakeVerticalTable() sw.on_save = on_save sw.AddChild(gui.MakeTextLine("standard", "Enter Filename", 300, 1, 1, 1, 1)) sw.filename = gui.MakeTextEditLine("standard", "filename", 300, 1, 1, 1, 1) sw.AddChild(sw.filename) sw.AddChild(gui.MakeButton("standard", "Save!", 300, 1, 1, 1, 1, func(int64) { sw.on_save(sw.filename.GetText()) })) return &sw }
func makeHouseDoorTab(house *HouseDef, viewer *HouseViewer) *houseDoorTab { var hdt houseDoorTab hdt.VerticalTable = gui.MakeVerticalTable() hdt.house = house hdt.viewer = viewer names := GetAllDoorNames() door_buttons := gui.MakeVerticalTable() for _, name := range names { n := name door_buttons.AddChild(gui.MakeButton("standard", name, 300, 1, 1, 1, 1, func(int64) { if len(hdt.house.Floors[0].Rooms) < 2 || hdt.temp_door != nil { return } hdt.temp_door = MakeDoor(n) hdt.temp_door.temporary = true hdt.temp_door.invalid = true hdt.temp_room = hdt.house.Floors[0].Rooms[0] })) } scroller := gui.MakeScrollFrame(door_buttons, 300, 700) hdt.VerticalTable.AddChild(scroller) return &hdt }
func makeHouseRelicsTab(house *HouseDef, viewer *HouseViewer) *houseRelicsTab { var hdt houseRelicsTab hdt.VerticalTable = gui.MakeVerticalTable() hdt.house = house hdt.viewer = viewer hdt.VerticalTable.AddChild(gui.MakeTextLine("standard", "Spawns", 300, 1, 1, 1, 1)) hdt.spawn_name = gui.MakeTextEditLine("standard", "", 300, 1, 1, 1, 1) hdt.VerticalTable.AddChild(hdt.spawn_name) hdt.make_spawn = gui.MakeButton("standard", "New Spawn Point", 300, 1, 1, 1, 1, func(int64) { hdt.newSpawn() }) hdt.VerticalTable.AddChild(hdt.make_spawn) return &hdt }
func main() { sys = system.Make(gos.GetSystemInterface()) sys.Startup() wdx := 1000 wdy := 500 render.Init() var ui *gui.Gui render.Queue(func() { sys.CreateWindow(50, 150, wdx, wdy) sys.EnableVSync(true) err := gl.Init() if err != nil { f, err2 := os.Create(filepath.Join(datadir, "gl_log.txt")) if err2 != nil { fmt.Printf("Unable to write log to a file:%v\n%v\v", err, err2) } else { fmt.Fprintf(f, "%v\n", err) f.Close() } } ui, _ = gui.Make(gin.In(), gui.Dims{wdx, wdy}, filepath.Join(datadir, "fonts", "luxisr.ttf")) font, err := loadFont() if err != nil { panic(err.Error()) } dict = gui.MakeDictionary(font, 15) }) render.Purge() anchor := gui.MakeAnchorBox(gui.Dims{wdx, wdy}) ui.AddChild(anchor) var event_handler handler gin.In().RegisterEventListener(&event_handler) actions_list := gui.MakeVerticalTable() keyname_list := gui.MakeVerticalTable() both_lists := gui.MakeHorizontalTable() both_lists.AddChild(actions_list) both_lists.AddChild(keyname_list) anchor.AddChild(both_lists, gui.Anchor{1, 0.5, 1, 0.5}) var actions []string for action := range action_map { actions = append(actions, action) } sort.Strings(actions) for _, action := range actions { actions_list.AddChild(gui.MakeTextLine("standard", action, 150, 1, 1, 1, 1)) keyname_list.AddChild(gui.MakeTextLine("standard", commands[action].Cmd, 100, 1, 1, 1, 1)) } current_anim := gui.MakeTextLine("standard", "", 300, 1, 1, 1, 1) current_state := gui.MakeTextLine("standard", "", 300, 1, 1, 1, 1) frame_data := gui.MakeVerticalTable() frame_data.AddChild(current_anim) frame_data.AddChild(current_state) anchor.AddChild(frame_data, gui.Anchor{0, 1, 0, 1}) speed := 100 speed_text := gui.MakeTextLine("standard", "Speed: 100%", 150, 1, 1, 1, 1) anchor.AddChild(speed_text, gui.Anchor{0, 0, 0, 0}) var box1, box2 boxdata box1.name = "box1" box1.sb = makeSpriteBox(nil) anchor.AddChild(box1.sb, gui.Anchor{0.5, 0.5, 0.25, 0.5}) box1.load(GetStoreVal("box1")) box := box1 box2.name = "box2" box2.sb = makeSpriteBox(nil) anchor.AddChild(box2.sb, gui.Anchor{0.5, 0.5, 0.45, 0.5}) box2.load(GetStoreVal("box2")) box2.sb.top = true box_other := box2 box2.sb.r, box2.sb.g, box2.sb.b = 0.2, 0.1, 0.4 box1.sb.r, box1.sb.g, box1.sb.b = 0.4, 0.2, 0.8 error_msg = gui.MakeTextLine("standard", "", wdx, 1, 0.5, 0.5, 1) anchor.AddChild(error_msg, gui.Anchor{0, 0, 0, 0.1}) var chooser gui.Widget // curdir := GetStoreVal("curdir") // if curdir == "" { // curdir = "." // } else { // _,err := os.Stat(filepath.Join(datadir, curdir)) // if err == nil { // go func() { // anim, err := sprite.LoadSprite(filepath.Join(datadir, curdir)) // loaded <- loadResult{ anim, err } // } () // } else { // curdir = "." // } // } // var profile_output *os.File then := time.Now() sys.Think() for key_map["quit"].FramePressCount() == 0 { event_handler.box1 = &box event_handler.box2 = &box_other now := time.Now() dt := (now.Nanosecond() - then.Nanosecond()) / 1000000 then = now render.Queue(func() { sys.Think() if box1.sb.s != nil { box1.sb.s.Think(int64(float64(dt) * float64(speed) / 100)) } if box2.sb.s != nil { box2.sb.s.Think(int64(float64(dt) * float64(speed) / 100)) } gl.ClearColor(1, 0, 0, 1) gl.Clear(gl.COLOR_BUFFER_BIT) ui.Draw() sys.SwapBuffers() }) render.Purge() select { case load := <-loaded: if load.err != nil { error_msg.SetText(load.err.Error()) current_anim.SetText("") } else { box.sb.s = load.anim error_msg.SetText("") } default: } // if box.sb.s != nil { // box.sb.s.Think() // current_anim.SetText(fmt.Sprintf("%d: %s", box.sb.s.Facing(), box.sb.s.Anim())) // current_state.SetText(box.sb.s.AnimState()) // } if box.sb.s != nil { if key_map["reset"].FramePressCount() > 0 { box.load(box.dir) box_other.load(box_other.dir) } } // if key_map["profile"].FramePressCount() > 0 { // if profile_output == nil { // var err error // profile_output, err = os.Create(filepath.Join(datadir, "cpu.prof")) // if err == nil { // err = pprof.StartCPUProfile(profile_output) // if err != nil { // fmt.Printf("Unable to start CPU profile: %v\n", err) // profile_output.Close() // profile_output = nil // } // fmt.Printf("profout: %v\n", profile_output) // } else { // fmt.Printf("Unable to open CPU profile: %v\n", err) // } // } else { // pprof.StopCPUProfile() // profile_output.Close() // profile_output = nil // } // } if key_map["load"].FramePressCount() > 0 && chooser == nil { anch := gui.MakeAnchorBox(gui.Dims{wdx, wdy}) file_chooser := gui.MakeFileChooser(filepath.Join(datadir, box.dir), func(path string, err error) { if err == nil && len(path) > 0 { curpath, _ := filepath.Split(path) box.load(curpath) } ui.RemoveChild(chooser) chooser = nil }, func(path string, is_dir bool) bool { return true }) anch.AddChild(file_chooser, gui.Anchor{0.5, 0.5, 0.5, 0.5}) chooser = anch ui.AddChild(chooser) } delta := key_map["speed up"].FramePressAmt() - key_map["slow down"].FramePressAmt() if delta != 0 { speed += int(delta) if speed < 1 { speed = 1 } if speed > 100 { speed = 100 } speed_text.SetText(fmt.Sprintf("Speed: %d%%", speed)) } if key_map["select1"].FramePressCount() > 0 { box2.sb.r, box2.sb.g, box2.sb.b = 0.2, 0.1, 0.4 box1.sb.r, box1.sb.g, box1.sb.b = 0.4, 0.2, 0.8 box = box1 box_other = box2 } if key_map["select2"].FramePressCount() > 0 { box2.sb.r, box2.sb.g, box2.sb.b = 0.4, 0.2, 0.8 box1.sb.r, box1.sb.g, box1.sb.b = 0.2, 0.1, 0.4 box = box2 box_other = box1 } } }