openquell/components/velocity.go

68 lines
1.1 KiB
Go

package components
import (
. "openquell/config"
)
// movement in relation to position
type Velocity struct {
Data Position
Direction int
PointingAt int
}
func (velocity *Velocity) Set(new *Velocity) {
velocity.Direction = new.Direction
velocity.Data.Set(&new.Data)
}
func (velocity *Velocity) ResetDirectionAndStop() {
velocity.Data.X = 0
velocity.Data.Y = 0
velocity.Direction = velocity.PointingAt
}
func (velocity *Velocity) Change(direction int) {
switch direction {
case East:
velocity.Data.X = 1
velocity.Data.Y = 0
case West:
velocity.Data.X = -1
velocity.Data.Y = 0
case South:
velocity.Data.X = 0
velocity.Data.Y = 1
case North:
velocity.Data.X = 0
velocity.Data.Y = -1
case Stop:
velocity.Data.X = 0
velocity.Data.Y = 0
}
velocity.Direction = direction
}
func (velocity *Velocity) Moving() bool {
return velocity.Data.X != 0 || velocity.Data.Y != 0
}
func (velocity *Velocity) InvertDirection() int {
switch velocity.Direction {
case East:
return West
case West:
return East
case South:
return North
case North:
return South
case All:
return Stop
}
// should not happen
return All
}