2021-09-12 00:25:10 +01:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2021-12-16 20:57:35 +00:00
|
|
|
"tea.melonie54.xyz/sean/go-susapp/src/enum"
|
2021-09-12 00:25:10 +01:00
|
|
|
"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]
|
|
|
|
}
|
|
|
|
}
|
2021-12-16 20:19:40 +00:00
|
|
|
} 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())
|
2021-12-16 20:19:40 +00:00
|
|
|
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
|
|
|
}
|
2021-12-16 20:19:40 +00: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++
|
|
|
|
}
|
|
|
|
}
|