public void AddShockwave(float xPos, float yPos, int size, Player owner) { var shockwave = new Shockwave(xPos, yPos, size, owner); Shockwaves.Add(shockwave); }
public void HandleShockwave(Shockwave shockwave, float frameDeltaTime) { foreach (var asteroid in _asteroidsInCell) { if (asteroid.HP <= 0) { continue; //This asteroid was destroyed already, stop checking } float tx2 = asteroid.PositionX + asteroid.VelocityX * frameDeltaTime; float ty2 = asteroid.PositionY + asteroid.VelocityY * frameDeltaTime; float rx = tx2 - shockwave.PositionX; float ry = ty2 - shockwave.PositionY; if ((float)Math.Sqrt(rx * rx + ry * ry) < (shockwave.Radius)) //Shockwave hits it { asteroid.HP -= shockwave.Size * 100; if (asteroid.HP <= 0 && shockwave.OwnerName != null) { //Give money to player who destroyed it int value; switch (asteroid.AsteroidType) { case AsteroidType.GENERIC: value = 15; break; case AsteroidType.CLUMPY: value = 10; break; case AsteroidType.MAGNETIC: value = 50; break; case AsteroidType.REPULSER: value = 30; break; case AsteroidType.GRAVITIC: value = 40; break; case AsteroidType.DENSE: value = 30; break; case AsteroidType.ZIPPY: value = 15; break; case AsteroidType.EXPLOSIVE: value = 40; break; case AsteroidType.BLACK: value = 30; break; case AsteroidType.GOLD: value = 200; break; default: value = 50; break; } if (PlayerIsOwedMoney != null) { PlayerIsOwedMoney(shockwave.OwnerName, value * asteroid.Size); } } } } }