From ec024440144008223387d17b027d3cfaa1099788 Mon Sep 17 00:00:00 2001 From: Rob Kelly Date: Mon, 29 Sep 2025 16:45:53 -0600 Subject: [PATCH] Added debug movement mode --- project.godot | 25 ++++++++++++++++++ src/player/movement/debug_movement.gd | 32 +++++++++++++++++++++++ src/player/movement/debug_movement.gd.uid | 1 + src/player/player.gd | 9 +++++++ src/player/player.tscn | 9 ++++++- 5 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 src/player/movement/debug_movement.gd create mode 100644 src/player/movement/debug_movement.gd.uid diff --git a/project.godot b/project.godot index 5f9be2b..02f0dd0 100644 --- a/project.godot +++ b/project.godot @@ -91,6 +91,11 @@ sprint={ "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":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) ] } +sneak={ +"deadzone": 0.2, +"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":4194326,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} interact={ "deadzone": 0.2, "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":69,"key_label":0,"unicode":101,"location":0,"echo":false,"script":null) @@ -106,6 +111,26 @@ pause={ "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":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) ] } +debug_1={ +"deadzone": 0.2, +"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":4194332,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +debug_2={ +"deadzone": 0.2, +"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":4194333,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +debug_3={ +"deadzone": 0.2, +"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":4194334,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +debug_4={ +"deadzone": 0.2, +"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":4194335,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} [layer_names] diff --git a/src/player/movement/debug_movement.gd b/src/player/movement/debug_movement.gd new file mode 100644 index 0000000..abe4ca7 --- /dev/null +++ b/src/player/movement/debug_movement.gd @@ -0,0 +1,32 @@ +class_name DebugMovement extends Node +## Movement controller for debug flight + +const ACCELERATION := 10.0 + +@export var enabled := false + +@export var normal_speed := 160.0 +@export var fast_speed := 320.0 + +@onready var character: CharacterBody3D = get_parent() + + +func get_speed() -> float: + return fast_speed if Input.is_action_pressed("sprint") else normal_speed + + +func _physics_process(delta: float) -> void: + if not enabled: + return + + var forward_input := Input.get_axis("move_back", "move_forward") + var side_input := Input.get_axis("move_right", "move_left") + var vertical_input := Input.get_axis("sneak", "jump") + var movement := Vector3(-side_input, vertical_input, -forward_input) * get_speed() * delta + var camera := get_viewport().get_camera_3d() + var motion := camera.basis * movement + + var weight := 1.0 - exp(-ACCELERATION * delta) + character.velocity = character.velocity.lerp(motion, weight) + + character.move_and_slide() diff --git a/src/player/movement/debug_movement.gd.uid b/src/player/movement/debug_movement.gd.uid new file mode 100644 index 0000000..e3dd7be --- /dev/null +++ b/src/player/movement/debug_movement.gd.uid @@ -0,0 +1 @@ +uid://htwqrc73xg7q diff --git a/src/player/player.gd b/src/player/player.gd index 2d35185..e92a977 100644 --- a/src/player/player.gd +++ b/src/player/player.gd @@ -1,9 +1,18 @@ class_name Player extends CharacterBody3D ## The instance of the current player in the game world. +@onready var movement_controller: MovementController = %MovementController +@onready var debug_movement: DebugMovement = %DebugMovement + ## Global singleton accessor static var instance: Player func _init() -> void: Player.instance = self + + +func _unhandled_input(event: InputEvent) -> void: + if event.is_action_pressed("debug_1"): + movement_controller.enabled = not movement_controller.enabled + debug_movement.enabled = not debug_movement.enabled diff --git a/src/player/player.tscn b/src/player/player.tscn index 4ff89e3..781d5ab 100644 --- a/src/player/player.tscn +++ b/src/player/player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=22 format=3 uid="uid://dtbulshrxetes"] +[gd_scene load_steps=23 format=3 uid="uid://dtbulshrxetes"] [ext_resource type="Script" uid="uid://bihaf1xlwpkdo" path="res://src/player/player.gd" id="1_5f2sf"] [ext_resource type="Script" uid="uid://f3kssctvn2bo" path="res://src/player/camera/camera_controller.gd" id="1_mf2ua"] @@ -10,6 +10,7 @@ [ext_resource type="Script" uid="uid://c0nxcunx0fo4r" path="res://src/player/movement/movement_controller.gd" id="6_jiejy"] [ext_resource type="Script" uid="uid://d11erhxna68vd" path="res://src/player/movement/player_input_controller.gd" id="7_o822w"] [ext_resource type="Script" uid="uid://dao84umfatnid" path="res://src/player/debug_hud.gd" id="9_l271a"] +[ext_resource type="Script" uid="uid://htwqrc73xg7q" path="res://src/player/movement/debug_movement.gd" id="10_ylhto"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_qnmj6"] @@ -106,6 +107,7 @@ script = ExtResource("4_244u8") metadata/_custom_type_script = "uid://032jyhgkb2rv" [node name="MovementController" type="Node" parent="."] +unique_name_in_owner = true script = ExtResource("6_jiejy") metadata/_custom_type_script = "uid://c0nxcunx0fo4r" @@ -113,6 +115,11 @@ metadata/_custom_type_script = "uid://c0nxcunx0fo4r" script = ExtResource("7_o822w") metadata/_custom_type_script = "uid://d11erhxna68vd" +[node name="DebugMovement" type="Node" parent="."] +unique_name_in_owner = true +script = ExtResource("10_ylhto") +metadata/_custom_type_script = "uid://htwqrc73xg7q" + [node name="DebugHUD" type="CanvasLayer" parent="." node_paths=PackedStringArray("player")] script = ExtResource("9_l271a") player = NodePath("..")