extends CharacterBody3D const BASE_STAMINA = 50 const BASE_SPEED = 50 const SPRINT_MULT = 1.6 const SLOW_MULT = 0.5 const STAMINA_COST = 15 const STAMINA_RECOVER = 10 var pedestrian_area_count = 0 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") var speed: float = BASE_SPEED if (pedestrian_area_count > 0): speed *= SLOW_MULT 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) self.move_and_slide() func _on_area_area_entered(area: Area3D) -> void: if area.name == "PedestrianArea": pedestrian_area_count += 1 print(pedestrian_area_count) func _on_area_area_exited(area: Area3D) -> void: if area.name == "PedestrianArea": pedestrian_area_count -= 1 print(pedestrian_area_count)