protected virtual IEnumerator WaitForReload()
    {
        yield return(new WaitForSeconds(SelectedEquipmentObject.Template.reloadDuration));

        ResetEquipmentVolume();
        SelectedEquipmentObject.SetReload(false);
    }
    public virtual void Shoot()
    {
        if (SelectedEquipmentObject.Volume == 0)
        {
            Reload();
        }
        if (!SelectedEquipmentObject.Triggerable)
        {
            return;
        }
        reloadTimer = SelectedEquipmentObject.Template.reloadDuration;

        Equipment equipment = SelectedEquipmentObject.Template;

        SelectedEquipmentObject.ResetTimer();
        switch (equipment.type)
        {
        case EquipmentType.Weapon:
            ShootWithWeapon(equipment as Weapon);
            break;

        case EquipmentType.Laser:
            ShootWithLaser(equipment as Laser);
            break;

        default:
            break;
        }
    }
 public virtual void Reload()
 {
     if (SelectedEquipmentObject.Reloading || SelectedEquipmentObject.VolumeInfinite)
     {
         return;
     }
     SelectedEquipmentObject.SetReload(true);
     UIManager.Instance.SetReload();
     StartCoroutine(WaitForReload());
 }
 protected virtual void Update()
 {
     if (!initialized)
     {
         return;
     }
     if (!SelectedEquipmentObject.Triggerable)
     {
         SelectedEquipmentObject.UpdateTimer(-Time.deltaTime);
     }
     reloadTimer -= Time.deltaTime;
     if (reloadTimer < 0)
     {
         ResetEquipmentVolume();
     }
 }
 public virtual void ResetEquipmentVolume()
 {
     reloadTimer = SelectedEquipmentObject.Template.reloadDuration;
     SelectedEquipmentObject.ResetVolume();
     OnVolumeChangedEvent?.Invoke(SelectedEquipmentObject.Volume, SelectedEquipmentObject.Template.volume);
 }
 public virtual void ImpactEquipmentVolume(float value)
 {
     SelectedEquipmentObject.UpdateVolume(value);
     OnVolumeChangedEvent?.Invoke(SelectedEquipmentObject.Volume, SelectedEquipmentObject.Template.volume);
 }