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