aboutsummaryrefslogtreecommitdiff
path: root/go/client/keybindings.go
diff options
context:
space:
mode:
Diffstat (limited to 'go/client/keybindings.go')
-rw-r--r--go/client/keybindings.go73
1 files changed, 73 insertions, 0 deletions
diff --git a/go/client/keybindings.go b/go/client/keybindings.go
new file mode 100644
index 00000000..a6b32cf9
--- /dev/null
+++ b/go/client/keybindings.go
@@ -0,0 +1,73 @@
+package main
+
+import (
+ "log"
+
+ "github.com/hajimehoshi/ebiten/v2"
+ "github.com/hajimehoshi/ebiten/v2/inpututil"
+)
+
+type (
+ keyAction func(*Game) bool
+ keyBindings map[interface{}]keyAction
+)
+
+func (g *Game) handleKeyBindings(bindings keyBindings) {
+ for _k, a := range bindings {
+ var remove bool
+ switch k := _k.(type) {
+ case ebiten.MouseButton:
+ if inpututil.IsMouseButtonJustPressed(k) {
+ remove = a(g)
+ }
+ case ebiten.Key:
+ if inpututil.IsKeyJustPressed(k) {
+ remove = a(g)
+ }
+ }
+
+ if remove {
+ delete(bindings, _k)
+ }
+ }
+}
+
+func selection(g *Game) bool {
+ x, y := ebiten.CursorPosition()
+ obj := g.findObjectAt(x, y)
+
+ if g.prompt != nil {
+ if err := g.prompt.Add(obj); err != nil {
+ log.Println("Not added", obj, "to active prompt:", err)
+ g.handleSelection(obj, x, y)
+ } else {
+ g.updateHighlight()
+ }
+ } else {
+ g.handleSelection(obj, x, y)
+ }
+
+ return false
+}
+
+func pass(g *Game) bool {
+ g.passButton.Click(0, 0)
+ return false
+}
+
+func reset(g *Game) bool {
+ g.removeChoice()
+ g.selectedObject = nil
+ g.ResetHover()
+ g.clearHighlights()
+ g.hideStore()
+ g.RemoveWidget(g.discardPileView)
+ if g.prompt != nil {
+ if g.prompt.Action().Targets().NoSelections() {
+ g.removePrompt()
+ } else {
+ g.prompt.ClearSelections()
+ }
+ }
+ return false
+}