From 7cfbfb3a0451798bdfc988023d1cb7dfc3009b6e Mon Sep 17 00:00:00 2001 From: Dusk Date: Fri, 27 Feb 2026 18:58:19 +0100 Subject: [PATCH] feat: Add stamina system --- player.gd | 24 +++++++++++++++++++++++- player.tscn | 5 +++++ project.godot | 5 +++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/player.gd b/player.gd index f9094af..0a36867 100644 --- a/player.gd +++ b/player.gd @@ -1,7 +1,29 @@ extends CharacterBody3D +const BASE_STAMINA = 50 +const BASE_SPEED = 4 +const SPRINT_MULT = 1.6 +const STAMINA_COST = 15 +const STAMINA_RECOVER = 10 + + +var stamina: float = BASE_STAMINA + + func _process(delta: float) -> void: + $StaminaLabel.text = str(int(stamina)) + var dir = Input.get_vector("player_move_left", "player_move_right", "player_move_up", "player_move_down") - self.velocity = Vector3(dir.x * 5, 0, dir.y * 5) + var speed: float = BASE_SPEED + + if Input.is_action_pressed("player_sprint") and stamina > 0: + stamina -= STAMINA_COST * delta + speed *= SPRINT_MULT + elif stamina <= BASE_STAMINA: + stamina += STAMINA_RECOVER * delta + + self.velocity = Vector3(dir.x * speed, 0, dir.y * speed) + print(str(self.velocity)) + self.move_and_slide() diff --git a/player.tscn b/player.tscn index 073a6a2..93b2804 100644 --- a/player.tscn +++ b/player.tscn @@ -22,3 +22,8 @@ surface_material_override/0 = SubResource("StandardMaterial3D_4flbx") [node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=271233394] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 0) shape = SubResource("BoxShape3D_sh265") + +[node name="StaminaLabel" type="Label" parent="." unique_id=762689230] +offset_right = 99.0 +offset_bottom = 46.0 +theme_override_colors/font_color = Color(0.83137256, 0, 0.18039216, 1) diff --git a/project.godot b/project.godot index a9032ea..900d465 100644 --- a/project.godot +++ b/project.godot @@ -41,6 +41,11 @@ player_move_down={ , 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) ] } +player_sprint={ +"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":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} [physics]