From 1016f1cd9a809c1daf8bc8fd3a40f36b278926fd Mon Sep 17 00:00:00 2001 From: Sascha Date: Mon, 16 Oct 2023 13:29:24 +0200 Subject: [PATCH] Input via Actions --- Scripts/PlayerShip.cs | 58 ++++++++++++++++++++----------------------- project.godot | 31 +++++++++++++++++++++++ 2 files changed, 58 insertions(+), 31 deletions(-) diff --git a/Scripts/PlayerShip.cs b/Scripts/PlayerShip.cs index 68def05..f6825e4 100644 --- a/Scripts/PlayerShip.cs +++ b/Scripts/PlayerShip.cs @@ -3,13 +3,14 @@ using Godot; namespace Scripts; public partial class PlayerShip : Node3D { [Export] private float moveVelocity = 10f; + [Export] private float rotVelocity = 15f; [Export] private Node3D jet; [Export] private RigidBody3D playerRb; private const float jetTimerMax = 0.5f; private float jetTimer = jetTimerMax; private Vector3 moveDir; - private Vector3 rotDir = new(0,180,0); + private Vector3 rotDir; private bool jetActive; @@ -34,41 +35,36 @@ public partial class PlayerShip : Node3D { if (jetTimer < 0) JetActive = false; } - public override void _UnhandledKeyInput(InputEvent @event) { - if (@event is InputEventKey inputEventKey) { - JetActive = true; - switch (inputEventKey.Keycode) { - case Key.A: - moveDir.X -= moveVelocity; - rotDir.Z = -30f; - break; - case Key.D: - moveDir.X += moveVelocity; - rotDir.Z = 30f; - break; - case Key.W: - moveDir.Z -= moveVelocity; - rotDir.X = -15f; - break; - case Key.S: - moveDir.Z += moveVelocity; - rotDir.X = 15f; - break; - } - } - else { - moveDir = Vector3.Zero; - rotDir = new(0,180,0); - } + public override void _UnhandledInput(InputEvent @event) { + moveDir = Vector3.Zero; + rotDir = Vector3.Zero; + + if (Input.IsAnythingPressed()) JetActive = true; + + if (Input.IsActionPressed("Player_Move_Forward")) moveDir.Z -= moveVelocity; + if (Input.IsActionPressed("Player_Move_Backwards")) moveDir.Z += moveVelocity; + if (Input.IsActionPressed("Player_Move_Left")) moveDir.X -= moveVelocity; + if (Input.IsActionPressed("Player_Move_Right")) moveDir.X += moveVelocity; + + if (Input.IsActionJustPressed("Player_Move_Forward")) rotDir.X = -rotVelocity; + if (Input.IsActionJustPressed("Player_Move_Backwards")) rotDir.X = +rotVelocity; + if (Input.IsActionJustPressed("Player_Move_Left")) rotDir.Z = -rotVelocity * 2; + if (Input.IsActionJustPressed("Player_Move_Right")) rotDir.Z = +rotVelocity * 2; + + if (Input.IsActionJustReleased("Player_Move_Left") || Input.IsActionJustReleased("Player_Move_Right")) rotDir = Vector3.Zero; } private void HandleMovement(double delta) { - moveDir *= (float)delta; - KinematicCollision3D collision = playerRb.MoveAndCollide(moveDir); - if (collision?.GetCollider() is Node3D collider) GD.Print($"{Name} collides with {collider.GetParentNode3D().Name}"); + if (moveDir != Vector3.Zero) { + KinematicCollision3D collision = playerRb.MoveAndCollide(moveDir * (float)delta); + if (collision?.GetCollider() is Node3D collider) GD.Print($"{Name} collides with {collider.GetParentNode3D().Name}"); + } // Position += moveDir; - RotationDegrees = rotDir * (float)delta; + playerRb.RotationDegrees = rotDir; + // playerRb.Rotate(rotDir.Normalized(), rotVelocity * (float)delta); + // RotationDegrees = rotDir * (float)delta; + CheckBoundaries(); } diff --git a/project.godot b/project.godot index b7d0b06..3ad8662 100644 --- a/project.godot +++ b/project.godot @@ -25,3 +25,34 @@ window/size/viewport_height=1280 [dotnet] project/assembly_name="Godot-space Shooter" + +[input] + +Player_Move_Forward={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":11,"pressure":0.0,"pressed":true,"script":null) +] +} +Player_Move_Backwards={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":12,"pressure":0.0,"pressed":true,"script":null) +] +} +Player_Move_Left={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":13,"pressure":0.0,"pressed":true,"script":null) +] +} +Player_Move_Right={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":14,"pressure":0.0,"pressed":true,"script":null) +] +}