package ui import ( "github.com/hajimehoshi/ebiten/v2" "muhq.space/muhqs-game/go/game" ) type Choice struct { X, Y int Width, choiceHeight int choices []string onClick func(*Choice, int, int) buttons []Button } func choiceButtonOnClickDummy(b *SimpleButton) {} func NewChoice(x, y int, width, choiceHeight int, choices []string, onClick func(*Choice, int, int), ) *Choice { c := &Choice{x, y, width, choiceHeight, choices, onClick, []Button{}} for i, choice := range c.choices { b := NewSimpleButton(c.X, c.Y+i*c.choiceHeight, c.Width, c.choiceHeight, choiceButtonOnClickDummy, choice) c.buttons = append(c.buttons, b) } return c } func (c *Choice) Draw(screen *ebiten.Image) { for _, b := range c.buttons { b.Draw(screen) } } func (c *Choice) GetChoosen(x, y int) int { return (y - c.Y) / c.choiceHeight } func (c *Choice) Click(x, y int) { c.onClick(c, x, y) } func (c *Choice) Contains(x, y int) bool { height := len(c.choices) * c.choiceHeight return x >= c.X && x <= c.X+c.Width && y >= c.Y && y <= c.Y+height } func (c *Choice) FindObjectAt(x, y int) interface{} { if c.Contains(x, y) { return c } return nil } func NewActionChoice(x, y int, actions []game.ActionPrototype, onClick func(*Choice, int, int)) *Choice { // TODO: use dynamic with width and height width := 200 choiceHeight := 40 labels := make([]string, 0, len(actions)) for _, action := range actions { labels = append(labels, action.String()) } return NewChoice(x, y, width, choiceHeight, labels, onClick) }