65 lines
1.1 KiB
Go
65 lines
1.1 KiB
Go
package soko
|
|
|
|
import "opslag.de/schobers/geom"
|
|
|
|
type Direction int
|
|
|
|
const (
|
|
DirectionUp Direction = iota
|
|
DirectionRight
|
|
DirectionDown
|
|
DirectionLeft
|
|
)
|
|
|
|
var Directions = [4]Direction{DirectionUp, DirectionRight, DirectionDown, DirectionLeft}
|
|
|
|
func (d Direction) Invert() Direction {
|
|
switch d {
|
|
case DirectionUp:
|
|
return DirectionDown
|
|
case DirectionRight:
|
|
return DirectionLeft
|
|
case DirectionDown:
|
|
return DirectionUp
|
|
case DirectionLeft:
|
|
return DirectionRight
|
|
}
|
|
panic("invalid direction")
|
|
}
|
|
|
|
func (d Direction) String() string {
|
|
switch d {
|
|
case DirectionUp:
|
|
return "up"
|
|
case DirectionRight:
|
|
return "right"
|
|
case DirectionDown:
|
|
return "down"
|
|
case DirectionLeft:
|
|
return "left"
|
|
}
|
|
return "invalid"
|
|
}
|
|
|
|
func (d Direction) ToPoint() geom.Point {
|
|
switch d {
|
|
case DirectionUp:
|
|
return geom.Pt(0, -1)
|
|
case DirectionRight:
|
|
return geom.Pt(1, 0)
|
|
case DirectionDown:
|
|
return geom.Pt(0, 1)
|
|
case DirectionLeft:
|
|
return geom.Pt(-1, 0)
|
|
}
|
|
return geom.Point{}
|
|
}
|
|
|
|
func Neighbours(p geom.Point) []geom.Point {
|
|
neighbours := make([]geom.Point, 4)
|
|
for i, dir := range Directions {
|
|
neighbours[i] = p.Add(dir.ToPoint())
|
|
}
|
|
return neighbours
|
|
}
|