protected virtual void TryActivateWeapon(ActivateTime time)
 {
     if (Data.TryActivate(time, _unit, _weaponState))
     {
         CurrentClip = Mathf.Max(CurrentClip - Data.AmmoPerUse, 0);
         OnCurrentClipUpdated?.Invoke(CurrentClip);
     }
 }
Beispiel #2
0
 public override void Use(ActivateTime time)
 {
     base.Use(time);
     if (TotalAmmo == 0 && CurrentClip == 0)
     {
         TotalAmmo   = Data.DefaultStartAmount;
         CurrentClip = Data.ClipSize;
     }
 }
 public virtual bool TryActivate(ActivateTime time, Unit unit, ActiveWeaponState state)
 {
     if ((time & _weaponActivateTime) == 0)
     {
         return(false);
     }
     // do weapon thing
     return(PerformAction(unit, state));
 }
 public virtual void Use(ActivateTime time)
 {
     // if we're out of ammo, give up
     if (TotalAmmo == 0 && CurrentClip == 0)
     {
         return;
     }
     // wait until reloading is finished
     if (_isReloading)
     {
         return;
     }
     // try to use the weapon
     TryActivateWeapon(time);
     // if we've finished the clip
     if (CurrentClip == 0 && !_isReloading)
     {
         Reload();
     }
 }
    private void ProcessActivateTime(ActivateTime time)
    {
        switch (time)
        {
        // hook into update loop for processing
        case ActivateTime.OnHeld:
            if (!_weaponState.IsHolding)
            {
                MonoBehaviourMaster.Instance.OnFixedUpdate += ProcessHeldFire;
                _weaponState.IsHolding = true;
            }
            break;

        // unhook into update loop for processing
        case ActivateTime.OnRelease:
            if (_weaponState.IsHolding)
            {
                MonoBehaviourMaster.Instance.OnFixedUpdate -= ProcessHeldFire;
                _weaponState.IsHolding = false;
            }
            break;
        }
    }
 public void UseWeapon(ActivateTime activateTime, Unit unit)
 {
     EquippedWeapon.Use(activateTime);
 }
 protected override void TryActivateWeapon(ActivateTime time)
 {
     base.TryActivateWeapon(time);
     ProcessActivateTime(time);
 }