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 }