go-susapp/keyhandler.go

79 lines
1.9 KiB
Go
Raw Normal View History

2021-09-12 00:25:10 +01:00
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 {
2021-09-12 00:25:10 +01:00
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
2021-09-12 00:25:10 +01:00
}
input.updateMovementDirections()
2021-09-12 00:25:10 +01:00
}
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++
}
}