76 lines
1.9 KiB
C#

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