package screens import ( "lab.zaar.be/thefish/alchemyst-go/engine/ecs" "lab.zaar.be/thefish/alchemyst-go/engine/ecs/systems" "lab.zaar.be/thefish/alchemyst-go/engine/gamestate" "lab.zaar.be/thefish/alchemyst-go/engine/mob/movement" "lab.zaar.be/thefish/alchemyst-go/engine/types" "lab.zaar.be/thefish/alchemyst-go/ui/mainwindow" ) type GameScreen struct { mw *mainwindow.MainWindow state *gamestate.GameState vp *mainwindow.ViewPort controller *ecs.Controller scm *types.ScreenManager } func NewGameScreen(mw *mainwindow.MainWindow, state *gamestate.GameState, viewPort *mainwindow.ViewPort, controller *ecs.Controller, scm *types.ScreenManager) *GameScreen { ts := &GameScreen{mw: mw, state: state, vp: viewPort, controller: controller, scm: scm} renderMobs := systems.MobRenderSystem{EntityController: ts.controller} ts.controller.AddSystem(renderMobs, 1) return ts } func (ts *GameScreen) UseEcs() bool { return true } func (ts *GameScreen) Enter() { ts.mw.GetLayer("overlay").ClearArea(0, ts.mw.H-3, 30, 3) ts.mw.GetLayer("overlay").WithColor("#77777777"). Print(1, ts.mw.H-2, "Press [color=white]?[/color] for help") } func (ts *GameScreen) Exit() { ts.mw.GetLayer("overlay").ClearArea(0, ts.mw.H-3, 30, 3) //remove what we dont need } func (ts *GameScreen) HandleInput(input string) { //ts.state.Do(func(){ switch input { case "Up", "k", "KP_8": movement.Walk(ts.state.Player, ts.state, 0, -1) break case "Down", "j", "KP_2": movement.Walk(ts.state.Player, ts.state, 0, 1) break case "Left", "h", "KP_4": movement.Walk(ts.state.Player, ts.state, -1, 0) break case "Right", "l", "KP_6": movement.Walk(ts.state.Player, ts.state, 1, 0) break case "y", "KP_7": movement.Walk(ts.state.Player, ts.state, -1, -1) break case "u", "KP_9": movement.Walk(ts.state.Player, ts.state, 1, -1) break case "b", "KP_1": movement.Walk(ts.state.Player, ts.state, -1, 1) break case "n", "KP_3": movement.Walk(ts.state.Player, ts.state, 1, 1) break case "Shift+/": ts.scm.SetScreenByName("help") break case "Shift+z": ts.scm.SetScreenByName("devmenu") break case "i": ts.scm.SetScreenByName("inventory") break default: ts.mw.GetLayer("base").ClearArea(0, 3, 40, 1) ts.mw.GetLayer("base").Print(1, 3, "Key: "+input) ts.mw.GetLayer("base").Print(1, 6, "█") } //}) } func (ts *GameScreen) Render() { ts.vp.Render(ts.state) }