aboutsummaryrefslogtreecommitdiff
path: root/go/ui/mapView.go
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2023-08-03 20:23:01 +0200
committerFlorian Fischer <florian.fischer@muhq.space>2025-01-27 16:43:53 +0100
commit2d487b385ffa772e0213c37c0ed0794b045db27e (patch)
tree51599bc92957e79112e2333aa69b306b75b4cf93 /go/ui/mapView.go
parent5caa446e8d95bb55c66cd79b5fb10e6f7cf61aec (diff)
downloadmuhqs-game-2d487b385ffa772e0213c37c0ed0794b045db27e.tar.gz
muhqs-game-2d487b385ffa772e0213c37c0ed0794b045db27e.zip
ui: add simple hamburger style pile hint
Diffstat (limited to 'go/ui/mapView.go')
-rw-r--r--go/ui/mapView.go59
1 files changed, 59 insertions, 0 deletions
diff --git a/go/ui/mapView.go b/go/ui/mapView.go
index 59e8f3a7..6a69ad5e 100644
--- a/go/ui/mapView.go
+++ b/go/ui/mapView.go
@@ -2,6 +2,7 @@ package ui
import (
"fmt"
+ "image"
"image/color"
"log"
"math"
@@ -9,10 +10,25 @@ import (
"unicode"
"github.com/hajimehoshi/ebiten/v2"
+ "github.com/hajimehoshi/ebiten/v2/vector"
"muhq.space/muhqs-game/go/assets"
"muhq.space/muhqs-game/go/game"
)
+var (
+ // No idea why image.DrawTrianglesOptions needs this it is copied from
+ // the ebiten vector example.
+ whiteImage = ebiten.NewImage(3, 3)
+
+ // whiteSubImage is an internal sub image of whiteImage.
+ // Use whiteSubImage at DrawTriangles instead of whiteImage in order to avoid bleeding edges.
+ whiteSubImage = whiteImage.SubImage(image.Rect(1, 1, 2, 2)).(*ebiten.Image)
+)
+
+func init() {
+ whiteImage.Fill(color.White)
+}
+
const (
PERMANENT_WIDTH int = 40
PERMANENT_HEIGHT int = 40
@@ -183,12 +199,55 @@ func (vw *MapView) drawPermanentsLayer(screen *ebiten.Image) {
}
vw.permanentsLayer.DrawImage(permanentSymbol, op)
+
+ // Draw a pile hint
+ if len(p.Pile()) > 0 {
+ drawPileHint(permanentSymbol)
+ }
}
}
screen.DrawImage(vw.permanentsLayer, &ebiten.DrawImageOptions{})
}
+const (
+ PILE_HINT_STARTX = 20
+ PILE_HINT_LENGTH = 15
+ PILE_HINT_STARTY = 25
+ PILE_HINT_WIDTH = 2
+ PILE_HINT_SEP = 2
+)
+
+func drawPileHint(screen *ebiten.Image) {
+ var path vector.Path
+ var i float32
+ for i = 1.0; i < 4; i++ {
+ y := PILE_HINT_STARTY + i*(PILE_HINT_WIDTH+PILE_HINT_SEP)
+ path.MoveTo(PILE_HINT_STARTX, y)
+ path.LineTo(PILE_HINT_STARTX+PILE_HINT_LENGTH, y)
+ path.Close()
+ }
+
+ var vs []ebiten.Vertex
+ var is []uint16
+ {
+ op := &vector.StrokeOptions{Width: PILE_HINT_WIDTH}
+ vs, is = path.AppendVerticesAndIndicesForStroke(nil, nil, op)
+ }
+
+ for i := range vs {
+ vs[i].SrcX = 1
+ vs[i].SrcY = 1
+ vs[i].ColorR = 0
+ vs[i].ColorG = 0
+ vs[i].ColorB = 0
+ vs[i].ColorA = 1
+ }
+
+ op := &ebiten.DrawTrianglesOptions{AntiAlias: true}
+ screen.DrawTriangles(vs, is, whiteSubImage, op)
+}
+
func (vw *MapView) Draw(screen *ebiten.Image) {
vw.drawMapLayer(screen)
vw.drawPermanentsLayer(screen)