diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2023-08-07 14:22:09 +0200 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-01-27 16:43:53 +0100 |
| commit | 07619a1e44afbc70b3364296ad80d5f6fca1603c (patch) | |
| tree | d87db727898b115178ee6c696299b59ac6f0cc22 /go/ui/mapView.go | |
| parent | 557b6431c5b983dff51f00c6faea751df2154d08 (diff) | |
| download | muhqs-game-07619a1e44afbc70b3364296ad80d5f6fca1603c.tar.gz muhqs-game-07619a1e44afbc70b3364296ad80d5f6fca1603c.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) { |
