diff options
Diffstat (limited to 'go/ui/cardGrid.go')
| -rw-r--r-- | go/ui/cardGrid.go | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/go/ui/cardGrid.go b/go/ui/cardGrid.go index 1b86fe35..4cab2da7 100644 --- a/go/ui/cardGrid.go +++ b/go/ui/cardGrid.go @@ -1,14 +1,13 @@ package ui import ( + "image/color" "log" "math" "github.com/hajimehoshi/ebiten/v2" "muhq.space/muhqs-game/go/assets" "muhq.space/muhqs-game/go/game" - - "golang.org/x/exp/slices" ) type CardGrid struct { @@ -18,7 +17,7 @@ type CardGrid struct { scale float64 cardWidth, cardHeight float64 xOffset, yOffset int - highlights []*game.Card + highlights map[*game.Card]color.Color grid *ebiten.Image gridCards int } @@ -28,6 +27,7 @@ func NewCardGrid(x, y, width, height int, scale float64, cards game.PileOfCards) WidgetBase: NewWidgetBase(x, y, width, height), cards: cards, scale: scale, + highlights: make(map[*game.Card]color.Color), } w.renderImpl = func() *ebiten.Image { return w.render() } return w @@ -97,8 +97,8 @@ func (w *CardGrid) render() *ebiten.Image { op.GeoM.Scale(w.scale, w.scale) op.GeoM.Translate(xOffset, yOffset) - if slices.Contains(w.highlights, card) { - op.ColorM.Scale(1, 0, 0, 0.5) + if c, found := w.highlights[card]; found { + op.ColorM.ScaleWithColor(c) } w.grid.DrawImage(cardImg, op) @@ -151,23 +151,33 @@ func (w *CardGrid) FindObjectAt(_x, _y int) interface{} { return w.cards.Cards()[i] } -func (w *CardGrid) setHighlights(cards []*game.Card) { - w.highlights = cards - // Reset the grid card count to force grid to be redrawn containing the highlights +func (w *CardGrid) forceRedrawGrid() { + // Reset the grid card count to force grid to be redrawn containing highlight changes w.gridCards = 0 w.ForceRedraw() } -func (w *CardGrid) HighlightCard(card *game.Card) { - w.setHighlights([]*game.Card{card}) +func (w *CardGrid) setHighlights(cards []*game.Card, col color.Color) { + highlights := make(map[*game.Card]color.Color) + for _, c := range cards { + highlights[c] = col + } + + w.highlights = highlights + w.forceRedrawGrid() +} + +func (w *CardGrid) HighlightCard(card *game.Card, color color.Color) { + w.setHighlights([]*game.Card{card}, color) } -func (w *CardGrid) AddHighlightCard(card *game.Card) { - w.setHighlights(append(w.highlights, card)) +func (w *CardGrid) AddHighlightCard(card *game.Card, color color.Color) { + w.highlights[card] = color + w.forceRedrawGrid() } func (w *CardGrid) ClearHighlights() { - w.setHighlights([]*game.Card{}) + w.setHighlights([]*game.Card{}, nil) } func (w *CardGrid) Scroll(x, y int) { |
