38 lines
744 B
Go
38 lines
744 B
Go
package main
|
|
|
|
import (
|
|
"github.com/pnx/go-raytracer/math"
|
|
"github.com/pnx/go-raytracer/world"
|
|
)
|
|
|
|
type Player struct {
|
|
math.Transform
|
|
MoveSpd float64
|
|
RotSpd float64
|
|
}
|
|
|
|
func (p *Player) Move(delta float64, level *world.Level) {
|
|
deltaVec := p.ForwardVector().Scale(delta)
|
|
newPos := p.Position.Get().AddVec(deltaVec)
|
|
|
|
// make sure we don't move past walls.
|
|
if !level.Wall(int(newPos.X)/world.TileSize, int(newPos.Y)/world.TileSize) {
|
|
p.Position.Set(newPos)
|
|
}
|
|
}
|
|
|
|
func (p *Player) MoveForward(level *world.Level) {
|
|
p.Move(p.MoveSpd, level)
|
|
}
|
|
|
|
func (p *Player) MoveBackward(level *world.Level) {
|
|
p.Move(-p.MoveSpd, level)
|
|
}
|
|
|
|
func (p *Player) RotateLeft() {
|
|
p.Rotate(-p.RotSpd)
|
|
}
|
|
|
|
func (p *Player) RotateRight() {
|
|
p.Rotate(p.RotSpd)
|
|
}
|