diff options
Diffstat (limited to 'go/ui/mapView.go')
| -rw-r--r-- | go/ui/mapView.go | 59 |
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) |
