From 66d788b808474bc0d01c856df1763ad34747249f Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 3 Jan 2026 06:30:14 +0200 Subject: [PATCH] SLIDING!!!!! --- AGame/.godot/editor/editor_layout.cfg | 1 - AGame/.godot/editor/project_metadata.cfg | 5 ++ AGame/.godot/editor/script_editor_cache.cfg | 2 +- AGame/Scripts/player.gd | 84 ++++++++++++++++----- AGame/project.godot | 33 ++++++++ 5 files changed, 106 insertions(+), 19 deletions(-) diff --git a/AGame/.godot/editor/editor_layout.cfg b/AGame/.godot/editor/editor_layout.cfg index dbecd404..beef1b04 100644 --- a/AGame/.godot/editor/editor_layout.cfg +++ b/AGame/.godot/editor/editor_layout.cfg @@ -33,7 +33,6 @@ current_scene="res://Player.tscn" center_split_offset=0 selected_default_debugger_tab_idx=0 selected_main_editor_idx=2 -selected_bottom_panel_item=0 [EditorWindow] diff --git a/AGame/.godot/editor/project_metadata.cfg b/AGame/.godot/editor/project_metadata.cfg index 127c1f2a..52a74ca5 100644 --- a/AGame/.godot/editor/project_metadata.cfg +++ b/AGame/.godot/editor/project_metadata.cfg @@ -10,6 +10,7 @@ executable_path="/media/kevin/Drive2/GodotProjects/.editor_config/AGame/Godot_v4 [dialog_bounds] create_new_node=Rect2(1950, 250, 900, 700) +project_settings=Rect2(1800, 250, 1200, 700) [recent_files] @@ -25,3 +26,7 @@ create_built_in_script=false picker_shape=3 recent_presets=PackedColorArray(0.39210242, 0.58253837, 1, 1, 0, 0, 1, 1, 0.02948817, 0.2666716, 1, 1, 0.0006434119, 0.21836194, 1, 1, 1, 0.28627452, 1, 1, 0.5030338, 0.65093625, 0.96411306, 1, 0.7203012, 0.8066189, 0.98081595, 1, 0.25331905, 0.47389442, 1, 1, 0.6516739, 0.7670327, 1, 1) + +[project_settings] + +show_builtin_actions=false diff --git a/AGame/.godot/editor/script_editor_cache.cfg b/AGame/.godot/editor/script_editor_cache.cfg index 2cd10d4c..9dc29fbf 100644 --- a/AGame/.godot/editor/script_editor_cache.cfg +++ b/AGame/.godot/editor/script_editor_cache.cfg @@ -6,7 +6,7 @@ state={ "column": 22, "folded_lines": Array[int]([]), "h_scroll_position": 0, -"row": 14, +"row": 10, "scroll_position": 0.0, "selection": false, "syntax_highlighter": "GDScript" diff --git a/AGame/Scripts/player.gd b/AGame/Scripts/player.gd index 66cababf..ac4d1b84 100644 --- a/AGame/Scripts/player.gd +++ b/AGame/Scripts/player.gd @@ -1,9 +1,19 @@ extends CharacterBody3D @export var mouse_sensitivity = 1 -const SPEED = 5.0 -const JUMP_VELOCITY = 4.5 +# ======== Movement Stuff + + +const walk_speed = 10.0 +var crouch_speed = 5 +var slide_speed = 25 +var slide_friction = 5 +var slide_direction = Vector3.ZERO +const jump_velocity = 4.5 + + +# ========= Cam Stuff var max_look_up = deg_to_rad(80) var max_look_down = deg_to_rad(-80) @@ -11,6 +21,9 @@ var pitch = 0 @onready var camera_pivot = $CameraPivot +# ========= Other Stuff +var is_crouching = false +var is_sliding = false func _ready() -> void: mouse_sensitivity = mouse_sensitivity * 0.001 @@ -26,27 +39,64 @@ func _unhandled_input(event: InputEvent) -> void: camera_pivot.rotation.x = pitch func _physics_process(delta: float) -> void: - - - - + # Add the gravity. if not is_on_floor(): velocity += get_gravity() * delta # Handle jump. if Input.is_action_just_pressed("ui_accept") and is_on_floor(): - velocity.y = JUMP_VELOCITY + velocity.y = jump_velocity + + var input_dir = Vector3.ZERO + if Input.is_action_pressed("move_forward"): + input_dir -= transform.basis.z + if Input.is_action_pressed("move_backward"): + input_dir += transform.basis.z + if Input.is_action_pressed("move_left"): + input_dir -= transform.basis.x + if Input.is_action_pressed("move_right"): + input_dir += transform.basis.x + input_dir = input_dir.normalized() + + handle_crouch(input_dir, delta) - # Get the input direction and handle the movement/deceleration. - # As good practice, you should replace UI actions with custom gameplay actions. - var input_dir := Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down") - var direction := (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() - if direction: - velocity.x = direction.x * SPEED - velocity.z = direction.z * SPEED - else: - velocity.x = move_toward(velocity.x, 0, SPEED) - velocity.z = move_toward(velocity.z, 0, SPEED) move_and_slide() + + +func handle_crouch(input_dir:Vector3, delta): + if Input.is_action_just_pressed("crouch") and is_on_floor(): + is_crouching = true + + if input_dir.length() > 0.1: + start_slide(input_dir) + + if Input.is_action_just_released("crouch"): + stop_crouch() + + + + if is_sliding: + velocity.x = slide_direction.x + velocity.z = slide_direction.z + + slide_direction = slide_direction.move_toward(Vector3.ZERO, slide_friction * delta) + + if slide_direction.length() < 1: + is_sliding= false + + elif is_crouching: + velocity.x = input_dir.x * crouch_speed + velocity.z = input_dir.z * crouch_speed + else: + velocity.x = input_dir.x * walk_speed + velocity.z = input_dir.z * walk_speed + +func start_slide(input_dir: Vector3): + is_sliding = true + slide_direction = input_dir*slide_speed + +func stop_crouch(): + is_crouching = false + is_sliding = false diff --git a/AGame/project.godot b/AGame/project.godot index 9a07edd5..714491bc 100644 --- a/AGame/project.godot +++ b/AGame/project.godot @@ -14,3 +14,36 @@ config/name="AGame" run/main_scene="uid://d28ms4hn3rgie" config/features=PackedStringArray("4.5") config/icon="res://assets/icon.svg" + +[input] + +move_forward={ +"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":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) +] +} +move_backward={ +"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":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) +] +} +move_left={ +"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":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) +] +} +move_right={ +"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":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) +] +} +jump={ +"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":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) +] +} +crouch={ +"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) +] +}