diff --git a/Assets/Scripts/UnitScripts/Attacks/AttackHandler.cs b/Assets/Scripts/UnitScripts/Attacks/AttackHandler.cs index 69c8d4e..4b2f433 100644 --- a/Assets/Scripts/UnitScripts/Attacks/AttackHandler.cs +++ b/Assets/Scripts/UnitScripts/Attacks/AttackHandler.cs @@ -13,7 +13,6 @@ public class AttackHandler : MonoBehaviour [SerializeField] protected float knockbackHorizontalForce; [SerializeField] protected float knockbackVerticalForce; - protected float _timer; protected MinecraftUnit _minecraftUnit; void Awake() @@ -23,14 +22,9 @@ public class AttackHandler : MonoBehaviour void Start() { - // Random to avoid too much synchronicity - _timer = cooldown + Random.Range(-cooldown*0.2f, cooldown*0.2f); + InvokeRepeating(nameof(Attack), Random.Range(-cooldown*0.2f, cooldown*0.2f), cooldown); } - void Update() - { - _timer = _timer - Time.deltaTime; - } /// /// Launch an Attack, and return true if it's possible to attack @@ -38,7 +32,6 @@ public class AttackHandler : MonoBehaviour /// public virtual bool Attack() { - if (_timer > 0) return false; Collider[] targets = DetectTargets(); foreach (Collider target in targets) @@ -62,7 +55,6 @@ public class AttackHandler : MonoBehaviour minecraftTarget.StartCoroutine(minecraftTarget.MovementHandler.TakeImpulse(knockbackVector)); } } - _timer = cooldown + Random.Range(-cooldown*0.2f, cooldown*0.2f); return true; } diff --git a/Assets/Scripts/UnitScripts/Attacks/AttackSkeleton.cs b/Assets/Scripts/UnitScripts/Attacks/AttackSkeleton.cs index 5976a3d..54dd1d5 100644 --- a/Assets/Scripts/UnitScripts/Attacks/AttackSkeleton.cs +++ b/Assets/Scripts/UnitScripts/Attacks/AttackSkeleton.cs @@ -10,12 +10,10 @@ public class AttackSkeleton : AttackHandler public override bool Attack() { - if (_timer > 0) return false; float launchAngle = findLaunchAngle(); //print(launchAngle); // If target not reachable if (launchAngle < 0) return false; - _timer = cooldown; GameObject arrow = Instantiate(arrowPrefab, spawnPos.position, spawnPos.rotation); ArrowHandler arrowHandler = arrow.GetComponent(); diff --git a/Assets/Scripts/UnitScripts/BehaviorState/NeutralBehaviour.cs b/Assets/Scripts/UnitScripts/BehaviorState/NeutralBehaviour.cs index 1593d94..4c0c772 100644 --- a/Assets/Scripts/UnitScripts/BehaviorState/NeutralBehaviour.cs +++ b/Assets/Scripts/UnitScripts/BehaviorState/NeutralBehaviour.cs @@ -2,9 +2,13 @@ using UnityEngine; public class NeutralBehaviour : AbstractBehaviour { + [SerializeField] private float distanceGoal = 0.0f; protected override void MoveAction() { - Unit.MovementHandler.MoveTowardsNearest(); + Unit.MovementHandler.UpdateNearest(); + Vector3 targetPos = Unit.MovementHandler.TargetUnit.transform.position; + Vector3 goalPos = targetPos + (transform.position - targetPos).normalized * distanceGoal; + Unit.MovementHandler.MoveTowards(goalPos); } protected override void AttackAction() diff --git a/Assets/Scripts/UnitScripts/MovementHandler.cs b/Assets/Scripts/UnitScripts/MovementHandler.cs index 1e14c98..1ea4744 100644 --- a/Assets/Scripts/UnitScripts/MovementHandler.cs +++ b/Assets/Scripts/UnitScripts/MovementHandler.cs @@ -58,9 +58,13 @@ public class MovementHandler : MonoBehaviour if (agent.enabled) agent.SetDestination(destination); } - public void MoveTowardsNearest() + public void UpdateNearest() { TargetUnit = FindNearestEnemy(); + } + + public void MoveTowardsNearest() + { MoveTowards(TargetUnit.transform.position); }