From 5bca085548b4bff336cc9ff3cc71bbc167ef1198 Mon Sep 17 00:00:00 2001 From: Crizomb Date: Mon, 13 Jan 2025 17:41:17 +0100 Subject: [PATCH] Add behaviourState + NeutralBehavior --- Assets/Prefabs/TestUnit.prefab | 16 +++++++ Assets/Scripts/UnitScripts/AttackHandler.cs | 1 - Assets/Scripts/UnitScripts/BehaviorState.meta | 8 ++++ .../BehaviorState/AbstractBehaviour.cs | 47 +++++++++++++++++++ .../BehaviorState/AbstractBehaviour.cs.meta | 2 + .../BehaviorState/DefensiveBehaviour.cs | 14 ++++++ .../BehaviorState/DefensiveBehaviour.cs.meta | 2 + .../BehaviorState/NeutralBehaviour.cs | 14 ++++++ .../BehaviorState/NeutralBehaviour.cs.meta | 2 + .../BehaviorState/OffensiveBehaviour.cs | 14 ++++++ .../BehaviorState/OffensiveBehaviour.cs.meta | 2 + Assets/Scripts/UnitScripts/GlobalsVariable.cs | 3 +- Assets/Scripts/UnitScripts/MovementHandler.cs | 9 ---- 13 files changed, 123 insertions(+), 11 deletions(-) create mode 100644 Assets/Scripts/UnitScripts/BehaviorState.meta create mode 100644 Assets/Scripts/UnitScripts/BehaviorState/AbstractBehaviour.cs create mode 100644 Assets/Scripts/UnitScripts/BehaviorState/AbstractBehaviour.cs.meta create mode 100644 Assets/Scripts/UnitScripts/BehaviorState/DefensiveBehaviour.cs create mode 100644 Assets/Scripts/UnitScripts/BehaviorState/DefensiveBehaviour.cs.meta create mode 100644 Assets/Scripts/UnitScripts/BehaviorState/NeutralBehaviour.cs create mode 100644 Assets/Scripts/UnitScripts/BehaviorState/NeutralBehaviour.cs.meta create mode 100644 Assets/Scripts/UnitScripts/BehaviorState/OffensiveBehaviour.cs create mode 100644 Assets/Scripts/UnitScripts/BehaviorState/OffensiveBehaviour.cs.meta diff --git a/Assets/Prefabs/TestUnit.prefab b/Assets/Prefabs/TestUnit.prefab index cbaf7be..001e731 100644 --- a/Assets/Prefabs/TestUnit.prefab +++ b/Assets/Prefabs/TestUnit.prefab @@ -12,6 +12,7 @@ GameObject: - component: {fileID: 1284886913308718791} - component: {fileID: 7841837150169133400} - component: {fileID: 3280843376750909586} + - component: {fileID: 1854268353119403178} - component: {fileID: 5811210244409818000} - component: {fileID: 1085507300097694875} - component: {fileID: 2572766376840025726} @@ -122,6 +123,20 @@ Rigidbody: m_Interpolate: 0 m_Constraints: 80 m_CollisionDetection: 1 +--- !u!114 &1854268353119403178 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2076979688870881298} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 794f919ac24609c05b9c690aaab19146, type: 3} + m_Name: + m_EditorClassIdentifier: + pathFps: 1 + attackFps: 5 --- !u!195 &5811210244409818000 NavMeshAgent: m_ObjectHideFlags: 0 @@ -181,6 +196,7 @@ MonoBehaviour: m_EditorClassIdentifier: price: 0 k__BackingField: 1 + k__BackingField: 0 k__BackingField: {fileID: 3280843376750909586} k__BackingField: {fileID: 8213395333053285225} k__BackingField: {fileID: 8908285060348773052} diff --git a/Assets/Scripts/UnitScripts/AttackHandler.cs b/Assets/Scripts/UnitScripts/AttackHandler.cs index b0ff288..cf7ebbc 100644 --- a/Assets/Scripts/UnitScripts/AttackHandler.cs +++ b/Assets/Scripts/UnitScripts/AttackHandler.cs @@ -30,7 +30,6 @@ public class AttackHandler : MonoBehaviour void Update() { _timer = _timer - Time.deltaTime; - Attack(); } /// diff --git a/Assets/Scripts/UnitScripts/BehaviorState.meta b/Assets/Scripts/UnitScripts/BehaviorState.meta new file mode 100644 index 0000000..5bf2ec5 --- /dev/null +++ b/Assets/Scripts/UnitScripts/BehaviorState.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9d27c54e796078de08e2819b80f8cbcd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/UnitScripts/BehaviorState/AbstractBehaviour.cs b/Assets/Scripts/UnitScripts/BehaviorState/AbstractBehaviour.cs new file mode 100644 index 0000000..390d88f --- /dev/null +++ b/Assets/Scripts/UnitScripts/BehaviorState/AbstractBehaviour.cs @@ -0,0 +1,47 @@ +using System; +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +[RequireComponent(typeof(MinecraftUnit))] +[RequireComponent(typeof(MovementHandler))] +public abstract class AbstractBehaviour : MonoBehaviour +{ + [SerializeField] private float pathFps = 1.0f; + [SerializeField] private float attackFps = 5.0f; + + protected abstract void MoveAction(); + protected abstract void AttackAction(); + + protected MinecraftUnit Unit; + + + void Start() + { + Unit = GetComponent(); + StartCoroutine(attackUpdate()); + StartCoroutine(pathUpdate()); + } + + // Path update and attack update can be expansive, so we don't do that every frame. We create custom update + // We create custom update at low fps to handle this without performance issues + + private IEnumerator attackUpdate() + { + while (true) + { + AttackAction(); + yield return new WaitForSeconds(1.0f/attackFps); + } + } + + + private IEnumerator pathUpdate() + { + while (true) + { + MoveAction(); + yield return new WaitForSeconds(1.0f/pathFps); + } + } +} diff --git a/Assets/Scripts/UnitScripts/BehaviorState/AbstractBehaviour.cs.meta b/Assets/Scripts/UnitScripts/BehaviorState/AbstractBehaviour.cs.meta new file mode 100644 index 0000000..9268ec3 --- /dev/null +++ b/Assets/Scripts/UnitScripts/BehaviorState/AbstractBehaviour.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: bca22bdff905462e49dd5f0d224452c6 \ No newline at end of file diff --git a/Assets/Scripts/UnitScripts/BehaviorState/DefensiveBehaviour.cs b/Assets/Scripts/UnitScripts/BehaviorState/DefensiveBehaviour.cs new file mode 100644 index 0000000..3dc4971 --- /dev/null +++ b/Assets/Scripts/UnitScripts/BehaviorState/DefensiveBehaviour.cs @@ -0,0 +1,14 @@ +using UnityEngine; + +public class DefensiveBehaviour : AbstractBehaviour +{ + protected override void MoveAction() + { + throw new System.NotImplementedException(); + } + + protected override void AttackAction() + { + throw new System.NotImplementedException(); + } +} diff --git a/Assets/Scripts/UnitScripts/BehaviorState/DefensiveBehaviour.cs.meta b/Assets/Scripts/UnitScripts/BehaviorState/DefensiveBehaviour.cs.meta new file mode 100644 index 0000000..2d9cb2e --- /dev/null +++ b/Assets/Scripts/UnitScripts/BehaviorState/DefensiveBehaviour.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 4d7eb557429d0c73b8e60870d6370ff6 \ No newline at end of file diff --git a/Assets/Scripts/UnitScripts/BehaviorState/NeutralBehaviour.cs b/Assets/Scripts/UnitScripts/BehaviorState/NeutralBehaviour.cs new file mode 100644 index 0000000..1593d94 --- /dev/null +++ b/Assets/Scripts/UnitScripts/BehaviorState/NeutralBehaviour.cs @@ -0,0 +1,14 @@ +using UnityEngine; + +public class NeutralBehaviour : AbstractBehaviour +{ + protected override void MoveAction() + { + Unit.MovementHandler.MoveTowardsNearest(); + } + + protected override void AttackAction() + { + Unit.AttackHandler.Attack(); + } +} diff --git a/Assets/Scripts/UnitScripts/BehaviorState/NeutralBehaviour.cs.meta b/Assets/Scripts/UnitScripts/BehaviorState/NeutralBehaviour.cs.meta new file mode 100644 index 0000000..928ac55 --- /dev/null +++ b/Assets/Scripts/UnitScripts/BehaviorState/NeutralBehaviour.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 794f919ac24609c05b9c690aaab19146 \ No newline at end of file diff --git a/Assets/Scripts/UnitScripts/BehaviorState/OffensiveBehaviour.cs b/Assets/Scripts/UnitScripts/BehaviorState/OffensiveBehaviour.cs new file mode 100644 index 0000000..dd1ba60 --- /dev/null +++ b/Assets/Scripts/UnitScripts/BehaviorState/OffensiveBehaviour.cs @@ -0,0 +1,14 @@ +using UnityEngine; + +public class OffensiveBehaviour : AbstractBehaviour +{ + protected override void MoveAction() + { + throw new System.NotImplementedException(); + } + + protected override void AttackAction() + { + throw new System.NotImplementedException(); + } +} diff --git a/Assets/Scripts/UnitScripts/BehaviorState/OffensiveBehaviour.cs.meta b/Assets/Scripts/UnitScripts/BehaviorState/OffensiveBehaviour.cs.meta new file mode 100644 index 0000000..f93e809 --- /dev/null +++ b/Assets/Scripts/UnitScripts/BehaviorState/OffensiveBehaviour.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 02c5dcee842138a4ab3b5db250170c31 \ No newline at end of file diff --git a/Assets/Scripts/UnitScripts/GlobalsVariable.cs b/Assets/Scripts/UnitScripts/GlobalsVariable.cs index 3f3fb78..ad2cd87 100644 --- a/Assets/Scripts/UnitScripts/GlobalsVariable.cs +++ b/Assets/Scripts/UnitScripts/GlobalsVariable.cs @@ -6,5 +6,6 @@ public static class GlobalsVariable { public static List AliveUnitsTeamA = new List(); public static List AliveUnitsTeamB = new List(); - + public static AbstractUnit QueenA; + public static AbstractUnit QueenB; } diff --git a/Assets/Scripts/UnitScripts/MovementHandler.cs b/Assets/Scripts/UnitScripts/MovementHandler.cs index fd2b921..fa889b0 100644 --- a/Assets/Scripts/UnitScripts/MovementHandler.cs +++ b/Assets/Scripts/UnitScripts/MovementHandler.cs @@ -66,15 +66,6 @@ public class MovementHandler : MonoBehaviour return closestMinecraftUnit; } - - void Update() - { - if (Input.GetKeyDown(KeyCode.Space)) - { - //MoveTowards(defaultMoveTarget.position); - MoveTowardsNearest(); - } - } public IEnumerator TakeImpulse(Vector3 impulse) {