From 740c7c8ea2dbd0502414f5fada5d06dd4319aa16 Mon Sep 17 00:00:00 2001 From: Bobby Lucero Date: Fri, 25 Apr 2025 01:04:49 -0400 Subject: [PATCH] Refactored states --- Dungeon RPG.sln.DotSettings.user | 2 + Scenes/Characters/Player/player.tscn | 4 ++ Scripts/Characters/Player/Player.cs | 10 ++--- Scripts/Characters/Player/PlayerDashState.cs | 42 ++++++++++---------- Scripts/Characters/Player/PlayerIdleState.cs | 27 +++---------- Scripts/Characters/Player/PlayerMoveState.cs | 36 ++++------------- Scripts/Characters/Player/PlayerState.cs | 36 +++++++++++++++++ Scripts/Characters/Player/PlayerState.cs.uid | 1 + 8 files changed, 81 insertions(+), 77 deletions(-) create mode 100644 Dungeon RPG.sln.DotSettings.user create mode 100644 Scripts/Characters/Player/PlayerState.cs create mode 100644 Scripts/Characters/Player/PlayerState.cs.uid diff --git a/Dungeon RPG.sln.DotSettings.user b/Dungeon RPG.sln.DotSettings.user new file mode 100644 index 0000000..56c6c61 --- /dev/null +++ b/Dungeon RPG.sln.DotSettings.user @@ -0,0 +1,2 @@ + + ForceIncluded \ No newline at end of file diff --git a/Scenes/Characters/Player/player.tscn b/Scenes/Characters/Player/player.tscn index 455b5d6..2464322 100644 --- a/Scenes/Characters/Player/player.tscn +++ b/Scenes/Characters/Player/player.tscn @@ -192,3 +192,7 @@ script = ExtResource("33_4yec0") [node name="DashState" type="Node" parent="StateMachine"] script = ExtResource("41_2qsty") + +[node name="Timer" type="Timer" parent="StateMachine/DashState"] +wait_time = 0.4 +one_shot = true diff --git a/Scripts/Characters/Player/Player.cs b/Scripts/Characters/Player/Player.cs index 9eefe6a..0ff9b26 100644 --- a/Scripts/Characters/Player/Player.cs +++ b/Scripts/Characters/Player/Player.cs @@ -12,12 +12,6 @@ public partial class Player : CharacterBody3D public override void _Ready() { } - public override void _PhysicsProcess(double delta) - { - Velocity = new Vector3(Direction.X, 0, Direction.Y); - Velocity *= 5; - MoveAndSlide(); - } public override void _Input(InputEvent @event) { @@ -34,4 +28,8 @@ public partial class Player : CharacterBody3D } } + + + + } diff --git a/Scripts/Characters/Player/PlayerDashState.cs b/Scripts/Characters/Player/PlayerDashState.cs index 44dcd2b..b6fca04 100644 --- a/Scripts/Characters/Player/PlayerDashState.cs +++ b/Scripts/Characters/Player/PlayerDashState.cs @@ -2,41 +2,41 @@ using Godot; using System; using DungeonRPG.Scripts.General; -public partial class PlayerDashState : Node +public partial class PlayerDashState : PlayerState { - private Player characterNode; + private Timer timer; + + [Export] private float speed = 10; public override void _Ready() { - characterNode = GetOwner(); - SetPhysicsProcess(false); - SetProcessInput(false); - + base._Ready(); + timer = GetNode("Timer"); + timer.Timeout += HandleDashTimeout; } public override void _PhysicsProcess(double delta) { - + characterNode.MoveAndSlide(); } - - - public override void _Notification(int what) + protected override void EnterState() { - base._Notification(what); + characterNode.AnimatedSprite.Play(GameConstants.ANIM_DASH); + characterNode.Velocity = new Vector3(characterNode.Direction.X, 0, characterNode.Direction.Y); - if (what == GameConstants.STATE_NOTIFICATION_ENABLE) + if (characterNode.Velocity == Vector3.Zero) { - characterNode.AnimatedSprite.Play(GameConstants.ANIM_DASH); - SetPhysicsProcess(true); - SetProcessInput(true); - + characterNode.Velocity = characterNode.AnimatedSprite.FlipH ? Vector3.Left : Vector3.Right; } - else if (what == GameConstants.STATE_NOTIFICATION_DISABLE) - { - SetPhysicsProcess(false); - SetProcessInput(false); + + characterNode.Velocity *= speed; + timer.Start(); + } - } + private void HandleDashTimeout() + { + characterNode.StateMachine.SwitchState(); + characterNode.Velocity = Vector3.Zero; } } \ No newline at end of file diff --git a/Scripts/Characters/Player/PlayerIdleState.cs b/Scripts/Characters/Player/PlayerIdleState.cs index a032f81..70ef409 100644 --- a/Scripts/Characters/Player/PlayerIdleState.cs +++ b/Scripts/Characters/Player/PlayerIdleState.cs @@ -2,15 +2,9 @@ using Godot; using System; using DungeonRPG.Scripts.General; -public partial class PlayerIdleState : Node +public partial class PlayerIdleState : PlayerState { - private Player characterNode; - public override void _Ready() - { - characterNode = GetOwner(); - SetPhysicsProcess(false); - SetProcessInput(false); - } + public override void _PhysicsProcess(double delta) { @@ -28,21 +22,10 @@ public partial class PlayerIdleState : Node } } - public override void _Notification(int what) + protected override void EnterState() { - base._Notification(what); - - if (what == GameConstants.STATE_NOTIFICATION_ENABLE) - { - characterNode.AnimatedSprite.Play(GameConstants.ANIM_IDLE); - SetPhysicsProcess(true); - SetProcessInput(true); - } - else if (what == GameConstants.STATE_NOTIFICATION_DISABLE) - { - SetPhysicsProcess(false); - SetProcessInput(false); - } + base.EnterState(); + characterNode.AnimatedSprite.Play(GameConstants.ANIM_IDLE); } } diff --git a/Scripts/Characters/Player/PlayerMoveState.cs b/Scripts/Characters/Player/PlayerMoveState.cs index be3aaaf..b431ebe 100644 --- a/Scripts/Characters/Player/PlayerMoveState.cs +++ b/Scripts/Characters/Player/PlayerMoveState.cs @@ -2,24 +2,19 @@ using Godot; using System; using DungeonRPG.Scripts.General; -public partial class PlayerMoveState : Node +public partial class PlayerMoveState : PlayerState { - private Player characterNode; - - public override void _Ready() - { - characterNode = GetOwner(); - SetPhysicsProcess(false); - SetProcessInput(false); - - } - public override void _PhysicsProcess(double delta) { if (characterNode.Direction == Vector2.Zero) { characterNode.StateMachine.SwitchState(); + return; } + + characterNode.Velocity = new Vector3(characterNode.Direction.X, 0, characterNode.Direction.Y); + characterNode.Velocity *= 5; + characterNode.MoveAndSlide(); } public override void _Input(InputEvent @event) @@ -29,23 +24,8 @@ public partial class PlayerMoveState : Node characterNode.StateMachine.SwitchState(); } } - - public override void _Notification(int what) + protected override void EnterState() { - base._Notification(what); - - if (what == GameConstants.STATE_NOTIFICATION_ENABLE) - { - characterNode.AnimatedSprite.Play(GameConstants.ANIM_MOVE); - SetPhysicsProcess(true); - SetProcessInput(true); - - } - else if (what == GameConstants.STATE_NOTIFICATION_DISABLE) - { - SetPhysicsProcess(false); - SetProcessInput(false); - - } + characterNode.AnimatedSprite.Play(GameConstants.ANIM_MOVE); } } diff --git a/Scripts/Characters/Player/PlayerState.cs b/Scripts/Characters/Player/PlayerState.cs new file mode 100644 index 0000000..82a0867 --- /dev/null +++ b/Scripts/Characters/Player/PlayerState.cs @@ -0,0 +1,36 @@ +using DungeonRPG.Scripts.General; +using Godot; + + +public partial class PlayerState : Node +{ + protected Player characterNode; + public override void _Ready() + { + characterNode = GetOwner(); + SetPhysicsProcess(false); + SetProcessInput(false); + } + + public override void _Notification(int what) + { + base._Notification(what); + + if (what == GameConstants.STATE_NOTIFICATION_ENABLE) + { + SetPhysicsProcess(true); + SetProcessInput(true); + EnterState(); + } + else if (what == GameConstants.STATE_NOTIFICATION_DISABLE) + { + SetPhysicsProcess(false); + SetProcessInput(false); + } + + } + + + protected virtual void EnterState() + { } +} \ No newline at end of file diff --git a/Scripts/Characters/Player/PlayerState.cs.uid b/Scripts/Characters/Player/PlayerState.cs.uid new file mode 100644 index 0000000..3bf547c --- /dev/null +++ b/Scripts/Characters/Player/PlayerState.cs.uid @@ -0,0 +1 @@ +uid://c0jjjfwcbxi2s