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