diff --git a/Scripts/Components/FSM/EnemyFSMState.cs b/Scripts/Components/FSM/EnemyFSMState.cs new file mode 100644 index 00000000..4358c30c --- /dev/null +++ b/Scripts/Components/FSM/EnemyFSMState.cs @@ -0,0 +1,15 @@ +using Godot; + +namespace Cirno.Scripts.Components.FSM; + +public abstract partial class EnemyFSMState : State +{ + [Export] + public EnemyState State { get; private set; } + public override int StateId => (int)State; + + protected void ChangeState(EnemyState newState) + { + _stateMachine.SetState((int)newState); + } +} \ No newline at end of file diff --git a/Scripts/Components/FSM/EnemyIdle.cs b/Scripts/Components/FSM/EnemyIdle.cs deleted file mode 100644 index d80872b5..00000000 --- a/Scripts/Components/FSM/EnemyIdle.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Godot; - -namespace Cirno.Scripts.Components.FSM; - -public partial class EnemyIdle : State -{ - //[Export] - //public EnemyState State { get; private set; } - public override int StateId => (int)EnemyState.Idle; - - public override void EnterState() - { - - } - - public override void ExitState() - { - - } - - public override void ProcessState(double delta) - { - - } - - public override void PhysicsProcessState(double delta) - { - // Scan for player - // Wait for alarms - } - - protected void ChangeState(EnemyState newState) - { - _stateMachine.SetState((int)newState); - } -} \ No newline at end of file diff --git a/Scripts/Components/FSM/FSMStateModule.cs b/Scripts/Components/FSM/FSMStateModule.cs new file mode 100644 index 00000000..6fc293b2 --- /dev/null +++ b/Scripts/Components/FSM/FSMStateModule.cs @@ -0,0 +1,11 @@ +using System; +using Godot; + +namespace Cirno.Scripts.Components.FSM; + +public abstract partial class FSMStateModule : Node2D +{ + public abstract void Init(Actor actor); + public abstract void Update(double delta); + public abstract void PhysicsUpdate(double delta); +} diff --git a/Scripts/Components/FSM/PlayerFSMState.cs b/Scripts/Components/FSM/PlayerFSMState.cs new file mode 100644 index 00000000..5197abb9 --- /dev/null +++ b/Scripts/Components/FSM/PlayerFSMState.cs @@ -0,0 +1,22 @@ +using Godot; + +namespace Cirno.Scripts.Components.FSM; + +public abstract partial class PlayerFSMState : State +{ + [Export] + public PlayerState State { get; private set; } + public override int StateId => (int)State; + + protected void ChangeState(PlayerState newState) + { + _stateMachine.SetState((int)newState); + } +} + +public enum PlayerState +{ + Idle, + Walking, + Cutscene +} \ No newline at end of file diff --git a/Scripts/Components/FSM/State.cs b/Scripts/Components/FSM/State.cs index f8450147..71314fd3 100644 --- a/Scripts/Components/FSM/State.cs +++ b/Scripts/Components/FSM/State.cs @@ -1,9 +1,13 @@ using Godot; +using Godot.Collections; namespace Cirno.Scripts.Components.FSM; public abstract partial class State : Node2D { + [Export] + public Array Modules { get; private set; } = new(); + public virtual int StateId { get; } protected ActorStateMachine _stateMachine; @@ -11,6 +15,11 @@ public abstract partial class State : Node2D public virtual void Init(ActorStateMachine stateMachine) { _stateMachine = stateMachine; + + foreach (var module in Modules) + { + //module.Init() + } } public abstract void EnterState();