2024-03-23 09:10:26 +01:00
|
|
|
package src
|
|
|
|
|
|
|
|
import . "git.danitheskunk.com/squishy/blooblib"
|
|
|
|
|
|
|
|
type GobanRenderer struct {
|
|
|
|
tilemap *Tilemap
|
|
|
|
boardState *BoardState
|
|
|
|
}
|
|
|
|
|
|
|
|
const (
|
|
|
|
tileBoardTopLeft = 0
|
|
|
|
tileBoardTopRight = 2
|
|
|
|
tileBoardBottomLeft = 8
|
|
|
|
tileBoardBottomRight = 10
|
|
|
|
tileBoardTop = 1
|
|
|
|
tileBoardBottom = 9
|
|
|
|
tileBoardLeft = 4
|
|
|
|
tileBoardRight = 6
|
|
|
|
tileBoard = 5
|
|
|
|
tileBoardStar = 3
|
|
|
|
tileBg = 12
|
|
|
|
tileBottomOfBoard1 = 7
|
|
|
|
tileBottomOfBoard2 = 11
|
|
|
|
tileRightOfBoard = 13
|
|
|
|
tileBottomLeftOfBoard = 14
|
|
|
|
tileTopRightOfBoard = 15
|
2024-03-23 13:54:00 +01:00
|
|
|
tileStoneBlack = 1
|
|
|
|
tileStoneWhite = 2
|
|
|
|
tileStoneBlackHalf = 3
|
|
|
|
tileStoneWhiteHalf = 4
|
2024-03-23 09:10:26 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
var tilesGoban []*Image
|
|
|
|
|
|
|
|
func NewGobanRenderer(boardState *BoardState) *GobanRenderer {
|
|
|
|
if tilesGoban == nil {
|
|
|
|
tilesGoban = LoadImage("assets/goban.png").MakeTileset(Vec2i{X: 16, Y: 16})
|
|
|
|
}
|
|
|
|
|
|
|
|
tilemap := NewTilemap(Vec2i{X: 40, Y: 23}, tilesGoban)
|
|
|
|
tilemap.Clear(tileBg)
|
|
|
|
|
|
|
|
for y := 0; y < 19; y += 1 {
|
|
|
|
for x := 0; x < 19; x += 1 {
|
|
|
|
tilemap.Set(Vec2i{X: 10 + x, Y: 1 + y}, tileBoard)
|
|
|
|
}
|
|
|
|
tilemap.Set(Vec2i{X: 10, Y: 1 + y}, tileBoardLeft)
|
|
|
|
tilemap.Set(Vec2i{X: 28, Y: 1 + y}, tileBoardRight)
|
|
|
|
}
|
|
|
|
|
|
|
|
for x := 0; x < 19; x += 1 {
|
|
|
|
tilemap.Set(Vec2i{X: 10 + x, Y: 1}, tileBoardTop)
|
|
|
|
tilemap.Set(Vec2i{X: 10 + x, Y: 19}, tileBoardBottom)
|
|
|
|
|
|
|
|
tilemap.Set(Vec2i{X: 10 + x, Y: 20}, tileBottomOfBoard1)
|
|
|
|
tilemap.Set(Vec2i{X: 10 + x, Y: 21}, tileBottomOfBoard2)
|
|
|
|
}
|
|
|
|
|
|
|
|
for y := 0; y < 21; y += 1 {
|
|
|
|
tilemap.Set(Vec2i{X: 29, Y: 1 + y}, tileRightOfBoard)
|
|
|
|
}
|
|
|
|
tilemap.Set(Vec2i{X: 10, Y: 21}, tileBottomLeftOfBoard)
|
|
|
|
tilemap.Set(Vec2i{X: 29, Y: 1}, tileTopRightOfBoard)
|
|
|
|
|
|
|
|
tilemap.Set(Vec2i{X: 10, Y: 1}, tileBoardTopLeft)
|
|
|
|
tilemap.Set(Vec2i{X: 28, Y: 1}, tileBoardTopRight)
|
|
|
|
tilemap.Set(Vec2i{X: 10, Y: 19}, tileBoardBottomLeft)
|
|
|
|
tilemap.Set(Vec2i{X: 28, Y: 19}, tileBoardBottomRight)
|
|
|
|
|
|
|
|
tilemap.Set(Vec2i{X: 13, Y: 4}, tileBoardStar)
|
|
|
|
tilemap.Set(Vec2i{X: 25, Y: 4}, tileBoardStar)
|
|
|
|
tilemap.Set(Vec2i{X: 13, Y: 16}, tileBoardStar)
|
|
|
|
tilemap.Set(Vec2i{X: 25, Y: 16}, tileBoardStar)
|
|
|
|
tilemap.Set(Vec2i{X: 13, Y: 10}, tileBoardStar)
|
|
|
|
tilemap.Set(Vec2i{X: 13, Y: 16}, tileBoardStar)
|
|
|
|
tilemap.Set(Vec2i{X: 25, Y: 10}, tileBoardStar)
|
|
|
|
tilemap.Set(Vec2i{X: 25, Y: 16}, tileBoardStar)
|
|
|
|
tilemap.Set(Vec2i{X: 19, Y: 4}, tileBoardStar)
|
|
|
|
tilemap.Set(Vec2i{X: 19, Y: 10}, tileBoardStar)
|
|
|
|
tilemap.Set(Vec2i{X: 19, Y: 16}, tileBoardStar)
|
|
|
|
|
|
|
|
return &GobanRenderer{tilemap: tilemap, boardState: boardState}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (gr *GobanRenderer) Render(target *Image) {
|
|
|
|
target.DrawTilemap(gr.tilemap, Vec2i{})
|
|
|
|
gr.boardState.Draw(target)
|
|
|
|
}
|