krampus19/soko/level.go
Sander Schobers 93be82bdbd Moved level state to soko package.
Renamed entity type character and egg to player and target respectively.
2020-01-15 21:25:32 +01:00

48 lines
817 B
Go

package soko
import (
"opslag.de/schobers/geom"
)
type Level struct {
Width int
Height int
Tiles []TileType
Entities []EntityType
}
func (l Level) IdxToPos(i int) geom.Point { return geom.Pt(i%l.Width, i/l.Width) }
func (l Level) PosToIdx(p geom.Point) int {
if p.X < 0 || p.Y < 0 || p.X >= l.Width || p.Y >= l.Height {
return -1
}
return p.Y*l.Width + p.X
}
func (l Level) State() State {
s := NewState()
for i, t := range l.Tiles {
pos := l.IdxToPos(i)
switch t {
case TileTypeBasic:
s.BasicTiles.Add(pos)
case TileTypeMagma:
s.MagmaTiles.Add(pos)
}
}
for i, e := range l.Entities {
pos := l.IdxToPos(i)
switch e {
case EntityTypeBrick:
s.AddBrick(pos)
case EntityTypePlayer:
s.SetPlayer(pos)
case EntityTypeTarget:
s.SetTarget(pos)
}
}
return s
}