diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2023-08-07 14:22:09 +0200 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-08-20 15:57:08 +0200 |
| commit | 7763f0520541e55021076da332430cdc998fcf8f (patch) | |
| tree | 19f488e403ddd5a253e71223794c458fc50d2146 /go/ui/mapView.go | |
| parent | 1e6bffa4ab5d6ebc99ba06db8fa17464a8ed55e6 (diff) | |
| download | muhqs-game-7763f0520541e55021076da332430cdc998fcf8f.tar.gz muhqs-game-7763f0520541e55021076da332430cdc998fcf8f.zip | |
ui: allow multiple highlights of thesame game piece
Diffstat (limited to 'go/ui/mapView.go')
| -rw-r--r-- | go/ui/mapView.go | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/go/ui/mapView.go b/go/ui/mapView.go index 6a69ad5e..97dc19a2 100644 --- a/go/ui/mapView.go +++ b/go/ui/mapView.go @@ -42,15 +42,15 @@ type MapView struct { gameState *game.State mapLayer *ebiten.Image permanentsLayer *ebiten.Image - tileHighlights map[game.Position]color.Color - permanentsHighlights map[game.Permanent]color.Color + tileHighlights map[game.Position][]color.Color + permanentsHighlights map[game.Permanent][]color.Color } func NewMapView(g *game.State) *MapView { vw := &MapView{ gameState: g, - tileHighlights: make(map[game.Position]color.Color), - permanentsHighlights: make(map[game.Permanent]color.Color), + tileHighlights: make(map[game.Position][]color.Color), + permanentsHighlights: make(map[game.Permanent][]color.Color), } vw.hoverPermInfo.init(vw) return vw @@ -147,8 +147,10 @@ func (vw *MapView) drawMapLayer(screen *ebiten.Image) { op.GeoM.Translate(x_px, y_px) - if color, found := vw.tileHighlights[pos]; found { - op.ColorScale.ScaleWithColor(color) + if colors, found := vw.tileHighlights[pos]; found { + for _, color := range colors { + op.ColorScale.ScaleWithColor(color) + } } vw.mapLayer.DrawImage(tileImg, op) @@ -194,8 +196,10 @@ func (vw *MapView) drawPermanentsLayer(screen *ebiten.Image) { op.GeoM.Translate(float64(x_px), float64(y_px)) op.ColorScale.ScaleWithColor(p.Controller().Color) - if color, found := vw.permanentsHighlights[p]; found { - op.ColorScale.ScaleWithColor(color) + if colors, found := vw.permanentsHighlights[p]; found { + for _, color := range colors { + op.ColorScale.ScaleWithColor(color) + } } vw.permanentsLayer.DrawImage(permanentSymbol, op) @@ -304,16 +308,20 @@ func (vw *MapView) FindObjectAt(screenX, screenY int) interface{} { } func (vw *MapView) HighlightPositions(pos []game.Position, col color.Color) { - highlights := make(map[game.Position]color.Color) + highlights := make(map[game.Position][]color.Color) for _, p := range pos { - highlights[p] = col + highlights[p] = []color.Color{col} } vw.tileHighlights = highlights vw.ForceRedraw() } -func (vw *MapView) AddHighlightPosition(pos game.Position, color color.Color) { - vw.tileHighlights[pos] = color +func (vw *MapView) AddHighlightPosition(pos game.Position, col color.Color) { + if colors, found := vw.tileHighlights[pos]; found { + vw.tileHighlights[pos] = append(colors, col) + } else { + vw.tileHighlights[pos] = []color.Color{col} + } vw.ForceRedraw() } @@ -338,17 +346,21 @@ func (vw *MapView) ClearTileHighlights() { } func (vw *MapView) HighlightPermanents(permanents []game.Permanent, col color.Color) { - highlights := make(map[game.Permanent]color.Color) + highlights := make(map[game.Permanent][]color.Color) for _, p := range permanents { - highlights[p] = col + highlights[p] = []color.Color{col} } vw.permanentsHighlights = highlights vw.ForceRedraw() } -func (vw *MapView) AddHighlightPermanent(p game.Permanent, color color.Color) { +func (vw *MapView) AddHighlightPermanent(p game.Permanent, col color.Color) { + if colors, found := vw.permanentsHighlights[p]; found { + vw.permanentsHighlights[p] = append(colors, col) + } else { + vw.permanentsHighlights[p] = []color.Color{col} + } vw.ForceRedraw() - vw.permanentsHighlights[p] = color } func (vw *MapView) HighlightPermanent(p game.Permanent, color color.Color) { |
