diff options
Diffstat (limited to 'go/client/keybindings.go')
| -rw-r--r-- | go/client/keybindings.go | 73 |
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 +} |
