package main import ( "codehub.onpointcoding.net/sean/go-susapp/enum" "github.com/gotk3/gotk3/gdk" "github.com/gotk3/gotk3/gtk" ) type KeyInputHandler struct { state *State } func NewKeyInputHandler(state *State) *KeyInputHandler { return &KeyInputHandler{state} } func (input *KeyInputHandler) keyPressEvent(win *gtk.ApplicationWindow, ev *gdk.Event) { keyEvent := gdk.EventKeyNewFromEvent(ev) k := gdk.KeyvalToUpper(keyEvent.KeyVal()) if input.state.Screen == enum.SCREEN_TITLE && input.state.IsTypingReady { if k >= gdk.KEY_A && k <= gdk.KEY_Z { input.state.TypedGameID = input.state.TypedGameID + string(gdk.KeyvalToUnicode(k)) } else if k == gdk.KEY_BackSpace { if len(input.state.TypedGameID) > 0 { input.state.TypedGameID = input.state.TypedGameID[:len(input.state.TypedGameID)-1] } } } else if input.state.Screen == enum.SCREEN_LOBBY || input.state.Screen == enum.SCREEN_INGAME { if k == gdk.KEY_W { input.state.HoldingUp = true } if k == gdk.KEY_A { input.state.HoldingLeft = true } if k == gdk.KEY_S { input.state.HoldingDown = true } if k == gdk.KEY_D { input.state.HoldingRight = true } input.updateMovementDirections() } } func (input *KeyInputHandler) keyReleaseEvent(win *gtk.ApplicationWindow, ev *gdk.Event) { keyEvent := gdk.EventKeyNewFromEvent(ev) k := gdk.KeyvalToUpper(keyEvent.KeyVal()) if k == gdk.KEY_W { input.state.HoldingUp = false } if k == gdk.KEY_A { input.state.HoldingLeft = false } if k == gdk.KEY_S { input.state.HoldingDown = false } if k == gdk.KEY_D { input.state.HoldingRight = false } input.updateMovementDirections() } func (input *KeyInputHandler) updateMovementDirections() { input.state.MovementX = 0 input.state.MovementY = 0 if input.state.HoldingUp { input.state.MovementY-- } if input.state.HoldingLeft { input.state.MovementX-- } if input.state.HoldingDown { input.state.MovementY++ } if input.state.HoldingRight { input.state.MovementX++ } }