From 90172daae523642c9319f13ed2f2d8e3440c7cbd Mon Sep 17 00:00:00 2001 From: Ashby Issac Date: Wed, 7 Jan 2026 12:00:57 +0530 Subject: [PATCH] Created base for FSM. --- Unity/CarsDash/Assets/Scripts/FSM.meta | 8 ++++ .../Assets/Scripts/FSM/AIController.cs | 19 +++++++++ .../Assets/Scripts/FSM/AIController.cs.meta | 11 +++++ Unity/CarsDash/Assets/Scripts/FSM/AIState.cs | 24 +++++++++++ .../Assets/Scripts/FSM/AIState.cs.meta | 11 +++++ Unity/CarsDash/Assets/Scripts/FSM/Stage.cs | 6 +++ .../CarsDash/Assets/Scripts/FSM/Stage.cs.meta | 11 +++++ Unity/CarsDash/Assets/Scripts/FSM/States.meta | 8 ++++ .../Scripts/FSM/States/AcquireTargetState.cs | 30 ++++++++++++++ .../FSM/States/AcquireTargetState.cs.meta | 11 +++++ .../Assets/Scripts/FSM/States/BaseState.cs | 28 +++++++++++++ .../Scripts/FSM/States/BaseState.cs.meta | 11 +++++ .../Assets/Scripts/FSM/States/ChargeState.cs | 30 ++++++++++++++ .../Scripts/FSM/States/ChargeState.cs.meta | 11 +++++ .../Assets/Scripts/FSM/States/IdleState.cs | 33 +++++++++++++++ .../Scripts/FSM/States/IdleState.cs.meta | 11 +++++ .../Assets/Scripts/FSM/States/ImpactState.cs | 30 ++++++++++++++ .../Scripts/FSM/States/ImpactState.cs.meta | 11 +++++ .../Assets/Scripts/FSM/States/RecoverState.cs | 30 ++++++++++++++ .../Scripts/FSM/States/RecoverState.cs.meta | 11 +++++ .../Assets/Scripts/FSM/States/RoamState.cs | 40 +++++++++++++++++++ .../Scripts/FSM/States/RoamState.cs.meta | 11 +++++ 22 files changed, 396 insertions(+) create mode 100644 Unity/CarsDash/Assets/Scripts/FSM.meta create mode 100644 Unity/CarsDash/Assets/Scripts/FSM/AIController.cs create mode 100644 Unity/CarsDash/Assets/Scripts/FSM/AIController.cs.meta create mode 100644 Unity/CarsDash/Assets/Scripts/FSM/AIState.cs create mode 100644 Unity/CarsDash/Assets/Scripts/FSM/AIState.cs.meta create mode 100644 Unity/CarsDash/Assets/Scripts/FSM/Stage.cs create mode 100644 Unity/CarsDash/Assets/Scripts/FSM/Stage.cs.meta create mode 100644 Unity/CarsDash/Assets/Scripts/FSM/States.meta create mode 100644 Unity/CarsDash/Assets/Scripts/FSM/States/AcquireTargetState.cs create mode 100644 Unity/CarsDash/Assets/Scripts/FSM/States/AcquireTargetState.cs.meta create mode 100644 Unity/CarsDash/Assets/Scripts/FSM/States/BaseState.cs create mode 100644 Unity/CarsDash/Assets/Scripts/FSM/States/BaseState.cs.meta create mode 100644 Unity/CarsDash/Assets/Scripts/FSM/States/ChargeState.cs create mode 100644 Unity/CarsDash/Assets/Scripts/FSM/States/ChargeState.cs.meta create mode 100644 Unity/CarsDash/Assets/Scripts/FSM/States/IdleState.cs create mode 100644 Unity/CarsDash/Assets/Scripts/FSM/States/IdleState.cs.meta create mode 100644 Unity/CarsDash/Assets/Scripts/FSM/States/ImpactState.cs create mode 100644 Unity/CarsDash/Assets/Scripts/FSM/States/ImpactState.cs.meta create mode 100644 Unity/CarsDash/Assets/Scripts/FSM/States/RecoverState.cs create mode 100644 Unity/CarsDash/Assets/Scripts/FSM/States/RecoverState.cs.meta create mode 100644 Unity/CarsDash/Assets/Scripts/FSM/States/RoamState.cs create mode 100644 Unity/CarsDash/Assets/Scripts/FSM/States/RoamState.cs.meta diff --git a/Unity/CarsDash/Assets/Scripts/FSM.meta b/Unity/CarsDash/Assets/Scripts/FSM.meta new file mode 100644 index 0000000..72be615 --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0082726b257d94b50be8e6ddfe50611a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/CarsDash/Assets/Scripts/FSM/AIController.cs b/Unity/CarsDash/Assets/Scripts/FSM/AIController.cs new file mode 100644 index 0000000..78a25f7 --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM/AIController.cs @@ -0,0 +1,19 @@ +using System.Collections; +using System.Collections.Generic; +using Unity.VisualScripting; +using UnityEngine; + +public class AIController : MonoBehaviour +{ + private BaseState currentState; + + private void Start() + { + currentState = new IdleState(); + } + + private void Update() + { + currentState = currentState.ProcessStates(); + } +} diff --git a/Unity/CarsDash/Assets/Scripts/FSM/AIController.cs.meta b/Unity/CarsDash/Assets/Scripts/FSM/AIController.cs.meta new file mode 100644 index 0000000..96fcf0b --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM/AIController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7a6b3b930b0df4c68b9ddc3c91955866 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/CarsDash/Assets/Scripts/FSM/AIState.cs b/Unity/CarsDash/Assets/Scripts/FSM/AIState.cs new file mode 100644 index 0000000..39a8c30 --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM/AIState.cs @@ -0,0 +1,24 @@ + +public enum AIState +{ + Idle, + Roam, + AcquireTarget, + Charge, + Impact, + Recover, + + // Idle / Spawn + // ↓ + // Roam + // ↓ + // Targeting + // ↓ + // Charge + // ↓ + // Impact + // ↓ + // Recover + // ↓ + // Roam (loop) +} \ No newline at end of file diff --git a/Unity/CarsDash/Assets/Scripts/FSM/AIState.cs.meta b/Unity/CarsDash/Assets/Scripts/FSM/AIState.cs.meta new file mode 100644 index 0000000..34188ad --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM/AIState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 33bcaf2c66bb74d0fbbdea47322b33aa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/CarsDash/Assets/Scripts/FSM/Stage.cs b/Unity/CarsDash/Assets/Scripts/FSM/Stage.cs new file mode 100644 index 0000000..f8d3106 --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM/Stage.cs @@ -0,0 +1,6 @@ +public enum STAGE +{ + Enter, + Update, + Exit +} \ No newline at end of file diff --git a/Unity/CarsDash/Assets/Scripts/FSM/Stage.cs.meta b/Unity/CarsDash/Assets/Scripts/FSM/Stage.cs.meta new file mode 100644 index 0000000..1283626 --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM/Stage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 67552ab251082417691eae453527d89e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/CarsDash/Assets/Scripts/FSM/States.meta b/Unity/CarsDash/Assets/Scripts/FSM/States.meta new file mode 100644 index 0000000..f373b68 --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM/States.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c0a6f1dfd8c8d48dcae8cb76eb994be0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/CarsDash/Assets/Scripts/FSM/States/AcquireTargetState.cs b/Unity/CarsDash/Assets/Scripts/FSM/States/AcquireTargetState.cs new file mode 100644 index 0000000..f779b64 --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM/States/AcquireTargetState.cs @@ -0,0 +1,30 @@ +using UnityEngine; + +public class AcquireTargetState : BaseState +{ + public AcquireTargetState() : base() + { + Debug.Log($"### {this} constructor"); + } + + protected override void Enter() + { + base.Enter(); + + Debug.Log($"### {this} Enter STAGE"); + } + + protected override void Update() + { + base.Update(); + + Debug.Log($"### {this} Update STAGE"); + } + + protected override void Exit() + { + base.Exit(); + + Debug.Log($"### {this} Exit STAGE"); + } +} diff --git a/Unity/CarsDash/Assets/Scripts/FSM/States/AcquireTargetState.cs.meta b/Unity/CarsDash/Assets/Scripts/FSM/States/AcquireTargetState.cs.meta new file mode 100644 index 0000000..370228e --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM/States/AcquireTargetState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 61a251a5ccfb640c48cc604c7ea3fd23 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/CarsDash/Assets/Scripts/FSM/States/BaseState.cs b/Unity/CarsDash/Assets/Scripts/FSM/States/BaseState.cs new file mode 100644 index 0000000..7a23389 --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM/States/BaseState.cs @@ -0,0 +1,28 @@ + +public class BaseState +{ + protected STAGE stage; + protected BaseState nextState; + + public BaseState() + { + stage = STAGE.Enter; + } + + protected virtual void Enter() => stage = STAGE.Update; + protected virtual void Update() => stage = STAGE.Update; + protected virtual void Exit() => stage = STAGE.Exit; + + public BaseState ProcessStates() + { + if (stage == STAGE.Enter) Enter(); + if (stage == STAGE.Update) Update(); + if (stage == STAGE.Exit) + { + Exit(); + return nextState; + } + + return this; + } +} diff --git a/Unity/CarsDash/Assets/Scripts/FSM/States/BaseState.cs.meta b/Unity/CarsDash/Assets/Scripts/FSM/States/BaseState.cs.meta new file mode 100644 index 0000000..ed8b128 --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM/States/BaseState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d8715db69bce948539b926b2c28eb005 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/CarsDash/Assets/Scripts/FSM/States/ChargeState.cs b/Unity/CarsDash/Assets/Scripts/FSM/States/ChargeState.cs new file mode 100644 index 0000000..3c1213e --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM/States/ChargeState.cs @@ -0,0 +1,30 @@ +using UnityEngine; + +public class ChargeState : BaseState +{ + public ChargeState() : base() + { + Debug.Log($"### {this} constructor"); + } + + protected override void Enter() + { + base.Enter(); + + Debug.Log($"### {this} Enter STAGE"); + } + + protected override void Update() + { + base.Update(); + + Debug.Log($"### {this} Update STAGE"); + } + + protected override void Exit() + { + base.Exit(); + + Debug.Log($"### {this} Exit STAGE"); + } +} diff --git a/Unity/CarsDash/Assets/Scripts/FSM/States/ChargeState.cs.meta b/Unity/CarsDash/Assets/Scripts/FSM/States/ChargeState.cs.meta new file mode 100644 index 0000000..d54f143 --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM/States/ChargeState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 08843ca91c2a54b6faed7c52c3d62f9f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/CarsDash/Assets/Scripts/FSM/States/IdleState.cs b/Unity/CarsDash/Assets/Scripts/FSM/States/IdleState.cs new file mode 100644 index 0000000..9add2c4 --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM/States/IdleState.cs @@ -0,0 +1,33 @@ + +using UnityEngine; + +public class IdleState : BaseState +{ + public IdleState() : base() + { + Debug.Log($"### {this} constructor"); + } + + protected override void Enter() + { + base.Enter(); + + Debug.Log($"### {this} Enter STAGE"); + } + + protected override void Update() + { + base.Update(); + + // use a mod timer system and when timer completes then move onto the next state (RoamState) + nextState = new RoamState(); + Debug.Log($"### {this} Update STAGE"); + } + + protected override void Exit() + { + base.Exit(); + + Debug.Log($"### {this} Exit STAGE"); + } +} diff --git a/Unity/CarsDash/Assets/Scripts/FSM/States/IdleState.cs.meta b/Unity/CarsDash/Assets/Scripts/FSM/States/IdleState.cs.meta new file mode 100644 index 0000000..37563a4 --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM/States/IdleState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dc42ece7f3a2e4de2a929f821c43ac67 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/CarsDash/Assets/Scripts/FSM/States/ImpactState.cs b/Unity/CarsDash/Assets/Scripts/FSM/States/ImpactState.cs new file mode 100644 index 0000000..01dad6d --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM/States/ImpactState.cs @@ -0,0 +1,30 @@ +using UnityEngine; + +public class ImpactState : BaseState +{ + public ImpactState() : base() + { + Debug.Log($"### {this} constructor"); + } + + protected override void Enter() + { + base.Enter(); + + Debug.Log($"### {this} Enter STAGE"); + } + + protected override void Update() + { + base.Update(); + + Debug.Log($"### {this} Update STAGE"); + } + + protected override void Exit() + { + base.Exit(); + + Debug.Log($"### {this} Exit STAGE"); + } +} diff --git a/Unity/CarsDash/Assets/Scripts/FSM/States/ImpactState.cs.meta b/Unity/CarsDash/Assets/Scripts/FSM/States/ImpactState.cs.meta new file mode 100644 index 0000000..f6d2ca9 --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM/States/ImpactState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b377ea7860c26439691096a2f8924177 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/CarsDash/Assets/Scripts/FSM/States/RecoverState.cs b/Unity/CarsDash/Assets/Scripts/FSM/States/RecoverState.cs new file mode 100644 index 0000000..5b69913 --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM/States/RecoverState.cs @@ -0,0 +1,30 @@ +using UnityEngine; + +public class RecoverState : BaseState +{ + public RecoverState() : base() + { + Debug.Log($"### {this} constructor"); + } + + protected override void Enter() + { + base.Enter(); + + Debug.Log($"### {this} Enter STAGE"); + } + + protected override void Update() + { + base.Update(); + + Debug.Log($"### {this} Update STAGE"); + } + + protected override void Exit() + { + base.Exit(); + + Debug.Log($"### {this} Exit STAGE"); + } +} diff --git a/Unity/CarsDash/Assets/Scripts/FSM/States/RecoverState.cs.meta b/Unity/CarsDash/Assets/Scripts/FSM/States/RecoverState.cs.meta new file mode 100644 index 0000000..a263bd3 --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM/States/RecoverState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aa57a200f3f314c0e9b66293926e7b4d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/CarsDash/Assets/Scripts/FSM/States/RoamState.cs b/Unity/CarsDash/Assets/Scripts/FSM/States/RoamState.cs new file mode 100644 index 0000000..ea7039d --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM/States/RoamState.cs @@ -0,0 +1,40 @@ +using UnityEngine; + +public class RoamState : BaseState +{ + public RoamState() : base() + { + Debug.Log($"### {this} constructor"); + } + + protected override void Enter() + { + base.Enter(); + + Debug.Log($"### {this} Enter STAGE"); + + // get the target point + } + + protected override void Update() + { + base.Update(); + + // keeping roaming for a specific duration + + // use a set of target points which would be placed on the arena, + // get one of the target point and then start roaming towards that point. + // if an enemy/player is found within a specific radius and in front of- + // -the player then go to the next state after acquiring the target- + // -(next state could be ChargeState) + + Debug.Log($"### {this} Update STAGE"); + } + + protected override void Exit() + { + base.Exit(); + + Debug.Log($"### {this} Exit STAGE"); + } +} diff --git a/Unity/CarsDash/Assets/Scripts/FSM/States/RoamState.cs.meta b/Unity/CarsDash/Assets/Scripts/FSM/States/RoamState.cs.meta new file mode 100644 index 0000000..c7216cd --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM/States/RoamState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d2b520dcd5d374b71b0fed8e64923e5b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: