60 lines
1.3 KiB
C#
60 lines
1.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
|
|
public class WeaponModel : IDisposable
|
|
{
|
|
public Weapon CurrentWeapon;
|
|
public List<Weapon> Weapons;
|
|
|
|
public event Action<WeaponModel> OnUpdate;
|
|
public event Action<Weapon> 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<Weapon> 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;
|
|
}
|
|
}
|