public void DestroyAll() { for (int i = Enemies.Count; i > 0; i--) { EnemyInstance enemy = Enemies[i - 1]; enemy.Destroy(); Enemies.Remove(enemy); } }
void ApplyProjectileEffects(float waveTime) { for (int i = 0; i < Enemies.Count; i++) { EnemyInstance enemy = Enemies[i]; if (!enemy.IsActive) { continue; } float damage = 0.0F; float slowdown = 0.0F; for (int j = enemy.ActiveEffects.Count; j > 0; j--) { EffectInstance effect = enemy.ActiveEffects[j - 1]; float impact = effect.AdvanceAndReportImpact(waveTime); switch (effect.Effect.EffectType) { case ProjectileEffectType.Damage: damage += impact; break; case ProjectileEffectType.Slow: slowdown += impact; break; } if (effect.Completed) { effect.Destroy(); enemy.ActiveEffects.Remove(effect); effect = null; } } if (null != DamageCallback) { DamageCallback.Invoke(enemy, damage); } else { if (enemy.HealthRemaining <= damage) { // Enemy is dead enemy.HealthRemaining = 0.0F; enemy.Destroy(); CoinEarnedToReport += enemy.Desc.Coins; } else { enemy.HealthRemaining -= damage; } } enemy.SpeedSlowdown = slowdown; } }