// Advances ent up to dist towards the target cell. Returns the distance // traveled. func (e *Entity) DoAdvance(dist float32, x, y int) float32 { if dist <= 0 { e.sprite.sp.Command("stop") return 0 } e.sprite.sp.Command("move") source := mathgl.Vec2{float32(e.X), float32(e.Y)} target := mathgl.Vec2{float32(x), float32(y)} var seg mathgl.Vec2 seg.Assign(&target) seg.Subtract(&source) e.TurnToFace(x, y) var traveled float32 if seg.Length() > dist { seg.Scale(dist / seg.Length()) traveled = dist } else { traveled = seg.Length() } seg.Add(&source) e.X = float64(seg.X) e.Y = float64(seg.Y) return dist - traveled }