using System; using System.Collections.Generic; public class WeaponModel : IDisposable { public Weapon CurrentWeapon; public List Weapons; public event Action OnUpdate; public event Action OnWeaponChanged; public event Action OnNoAmmo; public int TotalAmmo { get { int sum = 0; foreach (var weapon in Weapons) sum += weapon.Ammo; return sum; } } public WeaponModel(Weapon currentWeapon, List weapons) { CurrentWeapon = currentWeapon; Weapons = weapons; foreach (var weapon in Weapons) { weapon.OnShoot += ShootHandler; weapon.AmmoChanged += Weapon_AmmoChanged; } } private void Weapon_AmmoChanged(int obj) { OnUpdate?.Invoke(this); } public void ShootHandler(AbstractProjectile obj) { OnUpdate?.Invoke(this); if (TotalAmmo == 0) OnNoAmmo?.Invoke(); } public void WeaponChangeHandler(Weapon weapon) { CurrentWeapon = weapon; OnUpdate?.Invoke(this); OnWeaponChanged?.Invoke(weapon); } public void Dispose() { foreach (var weapon in Weapons) if(weapon!= null) weapon.OnShoot -= ShootHandler; } }