diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponBase.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponBase.cs index dcefe39..55b64a7 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponBase.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponBase.cs @@ -4,6 +4,7 @@ using SepCore.Definition; using SepCore.Entity; using GameFramework; using SepCore.CustomUtility; +using SepCore.Timer; using UnityEngine; using UnityGameFramework.Runtime; @@ -41,7 +42,8 @@ namespace SepCore.Entity.Weapon protected EntityBase _target; - protected float _currAttackTimer; + protected bool _canAttack; + protected TimerHandle _attackTimerHandle; protected float _sqrRange; @@ -306,6 +308,26 @@ namespace SepCore.Entity.Weapon _attackStatCallback = null; AttackStat = new StatProperty(); } + + protected void StartAttackCooldown(float cooldown) + { + _canAttack = false; + _attackTimerHandle = GameEntry.Timer.ScheduleOnce(cooldown, () => _canAttack = true, this); + } + + protected void ResetAttackCooldown(float cooldown) + { + GameEntry.Timer.Cancel(_attackTimerHandle); + _canAttack = false; + _attackTimerHandle = GameEntry.Timer.ScheduleOnce(cooldown, () => _canAttack = true, this); + } + + protected void CancelAttackCooldown() + { + GameEntry.Timer.Cancel(_attackTimerHandle); + _attackTimerHandle = TimerHandle.Invalid; + _canAttack = false; + } } public abstract class WeaponStateBase diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponHandgun/WeaponHandgun.AttackState.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponHandgun/WeaponHandgun.AttackState.cs index c7d1c41..9661163 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponHandgun/WeaponHandgun.AttackState.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponHandgun/WeaponHandgun.AttackState.cs @@ -10,7 +10,7 @@ namespace SepCore.Entity.Weapon public override void OnEnter() { - _weapon._currAttackTimer = 0f; + _weapon.ResetAttackCooldown(_weapon._weaponData.Cooldown); _weapon.Attack(); } diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponHandgun/WeaponHandgun.CheckInRangeState.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponHandgun/WeaponHandgun.CheckInRangeState.cs index 8338025..02add76 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponHandgun/WeaponHandgun.CheckInRangeState.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponHandgun/WeaponHandgun.CheckInRangeState.cs @@ -10,7 +10,7 @@ namespace SepCore.Entity.Weapon public override void OnEnter() { - if (_weapon._currAttackTimer >= _weapon._weaponData.Cooldown) + if (_weapon._canAttack) { _weapon.TransitionTo(WeaponStateType.Attack); } @@ -20,7 +20,6 @@ namespace SepCore.Entity.Weapon { _weapon.Check(); _weapon.RotateToTarget(elapseSeconds); - _weapon._currAttackTimer += elapseSeconds; if (_weapon._target == null || !_weapon._target.Available) { @@ -34,7 +33,7 @@ namespace SepCore.Entity.Weapon return; } - if (_weapon._currAttackTimer >= _weapon._weaponData.Cooldown) + if (_weapon._canAttack) { _weapon.TransitionTo(WeaponStateType.Attack); } diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponHandgun/WeaponHandgun.CheckOutRangeState.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponHandgun/WeaponHandgun.CheckOutRangeState.cs index d7ee45a..f910f66 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponHandgun/WeaponHandgun.CheckOutRangeState.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponHandgun/WeaponHandgun.CheckOutRangeState.cs @@ -13,7 +13,6 @@ namespace SepCore.Entity.Weapon { _weapon.Check(); _weapon.RotateToTarget(elapseSeconds); - _weapon._currAttackTimer += elapseSeconds; if (_weapon._target == null || !_weapon._target.Available) { diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponHandgun/WeaponHandgun.IdleState.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponHandgun/WeaponHandgun.IdleState.cs index 4a97efb..eb80b15 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponHandgun/WeaponHandgun.IdleState.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponHandgun/WeaponHandgun.IdleState.cs @@ -13,7 +13,6 @@ namespace SepCore.Entity.Weapon { _weapon.Check(); _weapon.RotateToOrigin(elapseSeconds); - _weapon._currAttackTimer += elapseSeconds; if (_weapon._target != null && _weapon._target.Available) { diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponHandgun/WeaponHandgun.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponHandgun/WeaponHandgun.cs index f2d8672..5d09a7e 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponHandgun/WeaponHandgun.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponHandgun/WeaponHandgun.cs @@ -129,7 +129,7 @@ namespace SepCore.Entity.Weapon if (_weaponData == null) return false; WeaponData = _weaponData; - _currAttackTimer = 0f; + StartAttackCooldown(_weaponData.Cooldown); _sqrRange = _weaponData.AttackRange * _weaponData.AttackRange; _cachedRotation = CachedTransform.rotation; _attackEffect = new HandgunHitMarkerAttackEffect(_hitMarkerSize, _hitMarkerYOffset, _hitMarkerDuration, @@ -151,6 +151,7 @@ namespace SepCore.Entity.Weapon protected override void OnWeaponHide(object userData) { + CancelAttackCooldown(); _attackEffect = null; } diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponKnife/WeaponKnife.AttackState.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponKnife/WeaponKnife.AttackState.cs index 18faeb1..a6aa1ca 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponKnife/WeaponKnife.AttackState.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponKnife/WeaponKnife.AttackState.cs @@ -11,7 +11,7 @@ namespace SepCore.Entity.Weapon public override void OnEnter() { - _weapon._currAttackTimer = 0f; + _weapon.ResetAttackCooldown(_weapon._weaponData.Cooldown); _weapon.Attack(); } diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponKnife/WeaponKnife.CheckInRangeState.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponKnife/WeaponKnife.CheckInRangeState.cs index 5b67e66..6ae2244 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponKnife/WeaponKnife.CheckInRangeState.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponKnife/WeaponKnife.CheckInRangeState.cs @@ -11,7 +11,7 @@ namespace SepCore.Entity.Weapon public override void OnEnter() { - if (_weapon._currAttackTimer >= _weapon._weaponData.Cooldown) + if (_weapon._canAttack) { _weapon.TransitionTo(WeaponStateType.Attack); } @@ -21,7 +21,6 @@ namespace SepCore.Entity.Weapon { _weapon.Check(); _weapon.RotateToTarget(elapseSeconds); - _weapon._currAttackTimer += elapseSeconds; if (_weapon._target == null || !_weapon._target.Available) { @@ -35,7 +34,7 @@ namespace SepCore.Entity.Weapon return; } - if (_weapon._currAttackTimer >= _weapon._weaponData.Cooldown) + if (_weapon._canAttack) { _weapon.TransitionTo(WeaponStateType.Attack); } diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponKnife/WeaponKnife.CheckOutRangeState.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponKnife/WeaponKnife.CheckOutRangeState.cs index 9abe6ac..6020c2f 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponKnife/WeaponKnife.CheckOutRangeState.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponKnife/WeaponKnife.CheckOutRangeState.cs @@ -17,7 +17,6 @@ namespace SepCore.Entity.Weapon { _weapon.Check(); _weapon.RotateToTarget(elapseSeconds); - _weapon._currAttackTimer += elapseSeconds; if (_weapon._target == null || !_weapon._target.Available) { diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponKnife/WeaponKnife.IdleState.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponKnife/WeaponKnife.IdleState.cs index 87f3f68..18922d5 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponKnife/WeaponKnife.IdleState.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponKnife/WeaponKnife.IdleState.cs @@ -17,7 +17,6 @@ namespace SepCore.Entity.Weapon { _weapon.Check(); _weapon.RotateToOrigin(elapseSeconds); - _weapon._currAttackTimer += elapseSeconds; if (_weapon._target != null && _weapon._target.Available) { diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponKnife/WeaponKnife.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponKnife/WeaponKnife.cs index 7330f07..d2fcced 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponKnife/WeaponKnife.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponKnife/WeaponKnife.cs @@ -150,7 +150,7 @@ namespace SepCore.Entity.Weapon if (_weaponData == null) return false; WeaponData = _weaponData; - _currAttackTimer = 0f; + StartAttackCooldown(_weaponData.Cooldown); _sqrRange = _weaponData.AttackRange * _weaponData.AttackRange; _cachedRotation = CachedTransform.rotation; @@ -183,6 +183,7 @@ namespace SepCore.Entity.Weapon protected override void OnWeaponHide(object userData) { StopAttackTween(true); + CancelAttackCooldown(); _attackEffect = null; } diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLance/WeaponLance.AttackState.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLance/WeaponLance.AttackState.cs index 6e9109f..60478f7 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLance/WeaponLance.AttackState.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLance/WeaponLance.AttackState.cs @@ -11,7 +11,7 @@ namespace SepCore.Entity.Weapon public override void OnEnter() { - _weapon._currAttackTimer = 0f; + _weapon.ResetAttackCooldown(_weapon._weaponData.Cooldown); _weapon.Attack(); } diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLance/WeaponLance.CheckInRangeState.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLance/WeaponLance.CheckInRangeState.cs index 5c1e473..5233ef7 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLance/WeaponLance.CheckInRangeState.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLance/WeaponLance.CheckInRangeState.cs @@ -11,7 +11,7 @@ namespace SepCore.Entity.Weapon public override void OnEnter() { - if (_weapon._currAttackTimer >= _weapon._weaponData.Cooldown) + if (_weapon._canAttack) { _weapon.TransitionTo(WeaponStateType.Attack); } @@ -21,7 +21,6 @@ namespace SepCore.Entity.Weapon { _weapon.Check(); _weapon.RotateToTarget(elapseSeconds); - _weapon._currAttackTimer += elapseSeconds; if (_weapon._target == null || !_weapon._target.Available) { @@ -35,7 +34,7 @@ namespace SepCore.Entity.Weapon return; } - if (_weapon._currAttackTimer >= _weapon._weaponData.Cooldown) + if (_weapon._canAttack) { _weapon.TransitionTo(WeaponStateType.Attack); } diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLance/WeaponLance.CheckOutRangeState.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLance/WeaponLance.CheckOutRangeState.cs index 38042b6..ba241d1 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLance/WeaponLance.CheckOutRangeState.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLance/WeaponLance.CheckOutRangeState.cs @@ -17,7 +17,6 @@ namespace SepCore.Entity.Weapon { _weapon.Check(); _weapon.RotateToTarget(elapseSeconds); - _weapon._currAttackTimer += elapseSeconds; if (_weapon._target == null || !_weapon._target.Available) { diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLance/WeaponLance.IdleState.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLance/WeaponLance.IdleState.cs index 8ce0d05..9639e9a 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLance/WeaponLance.IdleState.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLance/WeaponLance.IdleState.cs @@ -17,7 +17,6 @@ namespace SepCore.Entity.Weapon { _weapon.Check(); _weapon.RotateToOrigin(elapseSeconds); - _weapon._currAttackTimer += elapseSeconds; if (_weapon._target != null && _weapon._target.Available) { diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLance/WeaponLance.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLance/WeaponLance.cs index 029230a..56c56c0 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLance/WeaponLance.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLance/WeaponLance.cs @@ -244,7 +244,7 @@ namespace SepCore.Entity.Weapon if (_weaponData == null) return false; WeaponData = _weaponData; - _currAttackTimer = 0f; + StartAttackCooldown(_weaponData.Cooldown); _sqrRange = _weaponData.AttackRange * _weaponData.AttackRange; _cachedRotation = CachedTransform.rotation; @@ -308,6 +308,7 @@ namespace SepCore.Entity.Weapon protected override void OnWeaponHide(object userData) { StopAttackTween(true); + CancelAttackCooldown(); _attackEffect = null; } diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLightning/WeaponLightning.AttackState.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLightning/WeaponLightning.AttackState.cs index 12b8dcc..06def38 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLightning/WeaponLightning.AttackState.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLightning/WeaponLightning.AttackState.cs @@ -11,7 +11,7 @@ namespace SepCore.Entity.Weapon public override void OnEnter() { - _weapon._currAttackTimer = 0f; + _weapon.ResetAttackCooldown(_weapon._weaponData.Cooldown); _weapon.Attack(); } diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLightning/WeaponLightning.CheckInRangeState.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLightning/WeaponLightning.CheckInRangeState.cs index 89cbd98..3f568bd 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLightning/WeaponLightning.CheckInRangeState.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLightning/WeaponLightning.CheckInRangeState.cs @@ -11,7 +11,7 @@ namespace SepCore.Entity.Weapon public override void OnEnter() { - if (_weapon._currAttackTimer >= _weapon._weaponData.Cooldown) + if (_weapon._canAttack) { _weapon.TransitionTo(WeaponStateType.Attack); } @@ -21,7 +21,6 @@ namespace SepCore.Entity.Weapon { _weapon.Check(); _weapon.RotateToTarget(elapseSeconds); - _weapon._currAttackTimer += elapseSeconds; if (_weapon._target == null || !_weapon._target.Available) { @@ -35,7 +34,7 @@ namespace SepCore.Entity.Weapon return; } - if (_weapon._currAttackTimer >= _weapon._weaponData.Cooldown) + if (_weapon._canAttack) { _weapon.TransitionTo(WeaponStateType.Attack); } diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLightning/WeaponLightning.CheckOutRangeState.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLightning/WeaponLightning.CheckOutRangeState.cs index f3e02a5..cf7999f 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLightning/WeaponLightning.CheckOutRangeState.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLightning/WeaponLightning.CheckOutRangeState.cs @@ -17,7 +17,6 @@ namespace SepCore.Entity.Weapon { _weapon.Check(); _weapon.RotateToTarget(elapseSeconds); - _weapon._currAttackTimer += elapseSeconds; if (_weapon._target == null || !_weapon._target.Available) { diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLightning/WeaponLightning.IdleState.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLightning/WeaponLightning.IdleState.cs index ce58e0e..bb645e6 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLightning/WeaponLightning.IdleState.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLightning/WeaponLightning.IdleState.cs @@ -17,7 +17,6 @@ namespace SepCore.Entity.Weapon { _weapon.Check(); _weapon.RotateToOrigin(elapseSeconds); - _weapon._currAttackTimer += elapseSeconds; if (_weapon._target != null && _weapon._target.Available) { diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLightning/WeaponLightning.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLightning/WeaponLightning.cs index 5445d06..9012421 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLightning/WeaponLightning.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponLightning/WeaponLightning.cs @@ -171,7 +171,7 @@ namespace SepCore.Entity.Weapon if (_weaponData == null) return false; WeaponData = _weaponData; - _currAttackTimer = 0f; + StartAttackCooldown(_weaponData.Cooldown); _sqrRange = _weaponData.AttackRange * _weaponData.AttackRange; _cachedRotation = CachedTransform.rotation; @@ -209,6 +209,7 @@ namespace SepCore.Entity.Weapon protected override void OnWeaponHide(object userData) { StopAttackTween(true); + CancelAttackCooldown(); _attackEffect = null; } diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponSlash/WeaponSlash.AttackState.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponSlash/WeaponSlash.AttackState.cs index 06289aa..541198b 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponSlash/WeaponSlash.AttackState.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponSlash/WeaponSlash.AttackState.cs @@ -10,7 +10,7 @@ namespace SepCore.Entity.Weapon public override void OnEnter() { - _weapon._currAttackTimer = 0f; + _weapon.ResetAttackCooldown(_weapon._weaponData.Cooldown); _weapon.Attack(); } diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponSlash/WeaponSlash.CheckInRangeState.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponSlash/WeaponSlash.CheckInRangeState.cs index 43864fe..16a147f 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponSlash/WeaponSlash.CheckInRangeState.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponSlash/WeaponSlash.CheckInRangeState.cs @@ -10,7 +10,7 @@ namespace SepCore.Entity.Weapon public override void OnEnter() { - if (_weapon._currAttackTimer >= _weapon._weaponData.Cooldown) + if (_weapon._canAttack) { _weapon.TransitionTo(WeaponStateType.Attack); } @@ -20,7 +20,6 @@ namespace SepCore.Entity.Weapon { _weapon.Check(); _weapon.RotateToTarget(elapseSeconds); - _weapon._currAttackTimer += elapseSeconds; if (_weapon._target == null || !_weapon._target.Available) { @@ -34,7 +33,7 @@ namespace SepCore.Entity.Weapon return; } - if (_weapon._currAttackTimer >= _weapon._weaponData.Cooldown) + if (_weapon._canAttack) { _weapon.TransitionTo(WeaponStateType.Attack); } diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponSlash/WeaponSlash.CheckOutRangeState.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponSlash/WeaponSlash.CheckOutRangeState.cs index 370a592..bd734df 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponSlash/WeaponSlash.CheckOutRangeState.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponSlash/WeaponSlash.CheckOutRangeState.cs @@ -16,7 +16,6 @@ namespace SepCore.Entity.Weapon { _weapon.Check(); _weapon.RotateToTarget(elapseSeconds); - _weapon._currAttackTimer += elapseSeconds; if (_weapon._target == null || !_weapon._target.Available) { diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponSlash/WeaponSlash.IdleState.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponSlash/WeaponSlash.IdleState.cs index 601ce46..11d65bf 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponSlash/WeaponSlash.IdleState.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponSlash/WeaponSlash.IdleState.cs @@ -16,7 +16,6 @@ namespace SepCore.Entity.Weapon { _weapon.Check(); _weapon.RotateToOrigin(elapseSeconds); - _weapon._currAttackTimer += elapseSeconds; if (_weapon._target != null && _weapon._target.Available) { diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponSlash/WeaponSlash.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponSlash/WeaponSlash.cs index 98c56da..904599b 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponSlash/WeaponSlash.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Weapon/WeaponSlash/WeaponSlash.cs @@ -174,7 +174,7 @@ namespace SepCore.Entity.Weapon if (_weaponData == null) return false; WeaponData = _weaponData; - _currAttackTimer = 0f; + StartAttackCooldown(_weaponData.Cooldown); _sqrRange = _weaponData.AttackRange * _weaponData.AttackRange; _cachedRotation = CachedTransform.rotation; @@ -209,6 +209,7 @@ namespace SepCore.Entity.Weapon protected override void OnWeaponHide(object userData) { StopAttackTween(true); + CancelAttackCooldown(); _attackEffect = null; }