diff --git a/game.go b/game.go index 2b2bf83..7d2525e 100644 --- a/game.go +++ b/game.go @@ -193,7 +193,14 @@ func (g *game) nudgeProjectiles() (rprojectiles []Projectile) { } } - if v.Distance(p.Position, p.MoveTo) < 5 || hit_player { + // Are we going to intersect the destination zone in this tick? + r_dest := v.Rect2d{ + A: v.Point2d{X: p.MoveTo.X - 3, Y: p.MoveTo.Y - 3}, + B: v.Point2d{X: p.MoveTo.X + 3, Y: p.MoveTo.Y + 3}} + + travel := newPos.Sub(p.Position) + arrived, _, _ := v.RectIntersection(r_dest, p.Position, travel) + if arrived || hit_player { delete(g.projectiles, p) // Spawn a splosion @@ -219,10 +226,11 @@ func (g *game) nudgeProjectiles() (rprojectiles []Projectile) { } } } + } else { + p.Position.X = newPos.X + p.Position.Y = newPos.Y + rprojectiles = append(rprojectiles, *p) } - p.Position.X = newPos.X - p.Position.Y = newPos.Y - rprojectiles = append(rprojectiles, *p) } return }