66 lines
1.7 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 event Action<AbstractProjectile> OnProjectileSpawned;
public DangersModel()
{
AliveShips = new List<EnemyShip>();
Projectiles = new List<AbstractProjectile>();
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();
}
}