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) }