using System; using System.Collections.Generic; public class DangersModel : IDisposable { public List AliveShips; public List Projectiles; public event Action OnUpdate; public event Action OnProjectileSpawned; public DangersModel() { AliveShips = new List(); Projectiles = new List(); EnemyShip.ShipReleased += ShipReleased; EnemyShip.ShipSpawned += ShipSpawned; AbstractProjectile.OnSpawned += ProjectileSpawned; } public void ShipSpawned(EnemyShip enemyShip) { if (enemyShip == null) return; if (AliveShips.Contains(enemyShip)) return; AliveShips.Add(enemyShip); OnUpdate?.Invoke(this); } public void ShipReleased(EnemyShip enemyShip) { if (AliveShips.Contains(enemyShip)) { var weapon = enemyShip.Shooter.weapon; AliveShips.Remove(enemyShip); } OnUpdate?.Invoke(this); } public void ProjectileSpawned(AbstractProjectile projectile) { Projectiles.Add(projectile); OnUpdate?.Invoke(this); OnProjectileSpawned?.Invoke(projectile); } public void ProjectileReleased(AbstractProjectile projectile) { if (Projectiles.Contains(projectile)) Projectiles.Remove(projectile); OnUpdate?.Invoke(this); } public void Dispose() { EnemyShip.ShipReleased -= ShipReleased; EnemyShip.ShipSpawned -= ShipSpawned; AbstractProjectile.OnSpawned -= ProjectileSpawned; AliveShips.Clear(); Projectiles.Clear(); } }