goo/internal/boardstate.go

61 lines
1.3 KiB
Go

package goo
import . "git.danitheskunk.com/squishy/blooblib"
type CellState uint8
const (
Empty = CellState(0)
Black = CellState(1)
White = CellState(2)
)
type BoardState struct {
tilemap *Tilemap
}
var tilesStones []*Image
func NewBoardState() *BoardState {
if tilesStones == nil {
tilesStones = LoadImage("assets/stones.png").MakeTileset(Vec2i{X: 16, Y: 16})
}
return &BoardState{tilemap: NewTilemap(Vec2i{X: 19, Y: 19}, tilesStones)}
}
func (bs *BoardState) Get(pos Vec2i) CellState {
if pos.X < 0 || pos.Y < 0 || pos.X >= 19 || pos.Y >= 19 {
panic("boardstate out of bounds")
}
return CellState(bs.tilemap.Get(pos))
}
func (bs *BoardState) Set(pos Vec2i, val CellState) {
if pos.X < 0 || pos.Y < 0 || pos.X >= 19 || pos.Y >= 19 {
panic("boardstate out of bounds")
}
bs.tilemap.Set(pos, int(val))
}
func (bs *BoardState) Clear() {
bs.tilemap.Clear(int(Empty))
}
func (bs *BoardState) Draw(target *Image) {
target.DrawTilemap(bs.tilemap, Vec2i{X: 10 * 16, Y: 1 * 16})
}
func (bs *BoardState) DrawHover(target *Image, pos Vec2i, player CellState) {
if bs.Get(pos) == Empty {
switch player {
case Black:
target.Draw(tilesStones[tileStoneBlackHalf], Vec2i{X: (10 + pos.X) * 16, Y: (1 + pos.Y) * 16})
break
case White:
target.Draw(tilesStones[tileStoneWhiteHalf], Vec2i{X: (10 + pos.X) * 16, Y: (1 + pos.Y) * 16})
break
}
}
}