split splosions and projectiles into separate files
This commit is contained in:
@@ -163,9 +163,10 @@ func (g *game) run() {
|
||||
}
|
||||
sort.Sort(RobotSorter{Robots: payload.Robots})
|
||||
|
||||
payload.Projectiles = append(payload.Projectiles,
|
||||
g.nudgeProjectiles()...,
|
||||
)
|
||||
g.nudgeProjectiles()
|
||||
for p := range g.projectiles {
|
||||
payload.Projectiles = append(payload.Projectiles, *p)
|
||||
}
|
||||
|
||||
for s := range g.splosions {
|
||||
s.Tick()
|
||||
@@ -234,57 +235,7 @@ func (g *game) run() {
|
||||
func (g *game) nudgeProjectiles() (rprojectiles []Projectile) {
|
||||
rprojectiles = make([]Projectile, 0)
|
||||
for p := range g.projectiles {
|
||||
newPos := move(p.Position, p.MoveTo, float32(p.Speed), delta)
|
||||
|
||||
hit_player := false
|
||||
for player := range g.players {
|
||||
if player.Robot.Id == p.Id {
|
||||
continue
|
||||
}
|
||||
dist := v.Distance(player.Robot.Position, p.Position)
|
||||
if dist < 5.0 {
|
||||
hit_player = true
|
||||
}
|
||||
}
|
||||
|
||||
// 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
|
||||
splo := &Splosion{
|
||||
Id: p.Id,
|
||||
Position: p.Position,
|
||||
Radius: p.Radius,
|
||||
MaxDamage: 10,
|
||||
MinDamage: 5,
|
||||
Lifespan: 8,
|
||||
}
|
||||
g.splosions[splo] = true
|
||||
|
||||
for player := range g.players {
|
||||
dist := v.Distance(player.Robot.Position, p.Position)
|
||||
if dist < float32(p.Radius) {
|
||||
|
||||
// TODO map damage Max to Min based on distance from explosion
|
||||
if player.Robot.Health > 0 {
|
||||
player.Robot.Health -= p.Damage
|
||||
if player.Robot.Health <= 0 {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
p.Position.X = newPos.X
|
||||
p.Position.Y = newPos.Y
|
||||
rprojectiles = append(rprojectiles, *p)
|
||||
}
|
||||
p.Tick(g)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user