26ed99fda6
Build and deploy / Build (push) Has been cancelled
Build and deploy / Update Contributors (push) Has been cancelled
Build and deploy / Deploy (push) Has been cancelled
90 lines
1.8 KiB
Go
90 lines
1.8 KiB
Go
package cube
|
|
|
|
// Direction represents a direction towards one of the horizontal axes
|
|
type Direction int
|
|
|
|
const (
|
|
// North represents the north direction, towards the negative Z.
|
|
North Direction = iota
|
|
// South represents the south direction, towards the positive Z.
|
|
South
|
|
// West represents the west direction, towards the negative X.
|
|
West
|
|
// East represents the east direction, towards the positive X.
|
|
East
|
|
)
|
|
|
|
// Face converts the direction to a Face and returns it.
|
|
func (d Direction) Face() Face {
|
|
return Face(d + 2)
|
|
}
|
|
|
|
// Opposite returns Direction opposite to the current one.
|
|
func (d Direction) Opposite() Direction {
|
|
switch d {
|
|
case North:
|
|
return South
|
|
case South:
|
|
return North
|
|
case West:
|
|
return East
|
|
case East:
|
|
return West
|
|
}
|
|
panic("invalid direction")
|
|
}
|
|
|
|
// RotateRight rotates the direction 90 degrees to the right horizontally
|
|
// (clockwise) and returns the new direction.
|
|
func (d Direction) RotateRight() Direction {
|
|
switch d {
|
|
case North:
|
|
return East
|
|
case East:
|
|
return South
|
|
case South:
|
|
return West
|
|
case West:
|
|
return North
|
|
}
|
|
panic("invalid direction")
|
|
}
|
|
|
|
// RotateLeft rotates the direction 90 degrees to the left horizontally
|
|
// (counter-clockwise) and returns the new direction.
|
|
func (d Direction) RotateLeft() Direction {
|
|
switch d {
|
|
case North:
|
|
return West
|
|
case East:
|
|
return North
|
|
case South:
|
|
return East
|
|
case West:
|
|
return South
|
|
}
|
|
panic("invalid direction")
|
|
}
|
|
|
|
// String returns the Direction as a string.
|
|
func (d Direction) String() string {
|
|
switch d {
|
|
case North:
|
|
return "north"
|
|
case East:
|
|
return "east"
|
|
case South:
|
|
return "south"
|
|
case West:
|
|
return "west"
|
|
}
|
|
panic("invalid direction")
|
|
}
|
|
|
|
var directions = [...]Direction{North, East, South, West}
|
|
|
|
// Directions returns a list of all directions, going from North to West.
|
|
func Directions() []Direction {
|
|
return directions[:]
|
|
}
|