protected virtual void TryActivateWeapon(ActivateTime time) { if (Data.TryActivate(time, _unit, _weaponState)) { CurrentClip = Mathf.Max(CurrentClip - Data.AmmoPerUse, 0); OnCurrentClipUpdated?.Invoke(CurrentClip); } }
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); }