aboutsummaryrefslogtreecommitdiff
path: root/go/ui/cardGrid.go
diff options
context:
space:
mode:
Diffstat (limited to 'go/ui/cardGrid.go')
-rw-r--r--go/ui/cardGrid.go36
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) {