77 lines
1.5 KiB
Go
77 lines
1.5 KiB
Go
|
package bearing
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"strings"
|
||
|
|
||
|
"github.com/mdiluz/rove/pkg/vector"
|
||
|
)
|
||
|
|
||
|
// Direction describes a compass direction
|
||
|
type Direction int
|
||
|
|
||
|
const (
|
||
|
North Direction = iota
|
||
|
NorthEast
|
||
|
East
|
||
|
SouthEast
|
||
|
South
|
||
|
SouthWest
|
||
|
West
|
||
|
NorthWest
|
||
|
)
|
||
|
|
||
|
// DirectionString simply describes the strings associated with a direction
|
||
|
type DirectionString struct {
|
||
|
Long string
|
||
|
Short string
|
||
|
}
|
||
|
|
||
|
// DirectionStrings is the set of strings for each direction
|
||
|
var DirectionStrings = []DirectionString{
|
||
|
{"North", "N"},
|
||
|
{"NorthEast", "NE"},
|
||
|
{"East", "E"},
|
||
|
{"SouthEast", "SE"},
|
||
|
{"South", "S"},
|
||
|
{"SouthWest", "SW"},
|
||
|
{"West", "W"},
|
||
|
{"NorthWest", "NW"},
|
||
|
}
|
||
|
|
||
|
// String converts a Direction to a String
|
||
|
func (d Direction) String() string {
|
||
|
return DirectionStrings[d].Long
|
||
|
}
|
||
|
|
||
|
// ShortString converts a Direction to a short string version
|
||
|
func (d Direction) ShortString() string {
|
||
|
return DirectionStrings[d].Short
|
||
|
}
|
||
|
|
||
|
// DirectionFromString gets the Direction from a string
|
||
|
func DirectionFromString(s string) (Direction, error) {
|
||
|
for i, d := range DirectionStrings {
|
||
|
if strings.ToLower(d.Long) == strings.ToLower(s) || strings.ToLower(d.Short) == strings.ToLower(s) {
|
||
|
return Direction(i), nil
|
||
|
}
|
||
|
}
|
||
|
return -1, fmt.Errorf("Unknown direction: %s", s)
|
||
|
}
|
||
|
|
||
|
var DirectionVectors = []vector.Vector{
|
||
|
{X: 0, Y: 1}, // N
|
||
|
{X: 1, Y: 1}, // NE
|
||
|
{X: 1, Y: 0}, // E
|
||
|
{X: 1, Y: -1}, // SE
|
||
|
{X: 0, Y: -1}, // S
|
||
|
{X: -1, Y: 1}, // SW
|
||
|
{X: -1, Y: 0}, // W
|
||
|
{X: -1, Y: 1}, // NW
|
||
|
}
|
||
|
|
||
|
// Vector converts a Direction to a Vector
|
||
|
func (d Direction) Vector() vector.Vector {
|
||
|
return DirectionVectors[d]
|
||
|
}
|