2024-12-27 21:00:07 +01:00
|
|
|
extends CharacterBody3D
|
|
|
|
|
|
|
|
|
|
const SPEED = 150.0
|
2024-12-31 05:19:57 +01:00
|
|
|
const RUN_SPEED = 400.0
|
2024-12-27 21:00:07 +01:00
|
|
|
const JUMP_VELOCITY = 200
|
|
|
|
|
|
2025-02-04 05:50:59 +01:00
|
|
|
#
|
|
|
|
|
#@export var state_machine: LimboHSM
|
|
|
|
|
## States
|
|
|
|
|
#@onready var idle_state: LimboState = $LimboHSM/Idle
|
|
|
|
|
|
|
|
|
|
|
2024-12-28 01:58:19 +01:00
|
|
|
var last_direction:= Vector3.ONE
|
2025-01-02 12:09:30 +01:00
|
|
|
@onready var camera: Camera3D = $Camera3D
|
2025-02-04 05:50:59 +01:00
|
|
|
#
|
|
|
|
|
#func _ready():
|
|
|
|
|
#_initialize_state_machine()
|
|
|
|
|
#
|
|
|
|
|
#func _initialize_state_machine():
|
|
|
|
|
#state_machine.initial_state = idle_state
|
|
|
|
|
#state_machine.initialize(self)
|
|
|
|
|
#state_machine.set_active(true)
|
|
|
|
|
#
|
2024-12-27 21:00:07 +01:00
|
|
|
func _physics_process(delta: float) -> void:
|
|
|
|
|
# Add the gravity.
|
|
|
|
|
if not is_on_floor():
|
|
|
|
|
velocity += get_gravity() * delta
|
2024-12-31 05:19:57 +01:00
|
|
|
var k = RUN_SPEED if Input.is_key_pressed(KEY_SHIFT) else SPEED
|
|
|
|
|
self.velocity.x = delta * k * Input.get_axis("move_left", "move_right")
|
|
|
|
|
self.velocity.z = delta * k * Input.get_axis("move_forward", "move_back")
|
|
|
|
|
|
|
|
|
|
Messagebus.DEBUG_XYZ.emit(self.global_transform.origin)
|
2024-12-27 21:00:07 +01:00
|
|
|
|
2025-01-02 14:05:21 +01:00
|
|
|
if Input.is_action_just_pressed("jump") and is_on_floor():
|
2024-12-27 21:00:07 +01:00
|
|
|
self.velocity.y = delta * JUMP_VELOCITY
|
2025-01-02 14:05:21 +01:00
|
|
|
var i = Input.get_axis("move_left", "move_right")
|
|
|
|
|
if snapped(i, 1):
|
|
|
|
|
last_direction = Vector3(sign(i), 1, 1)
|
2024-12-31 05:46:18 +01:00
|
|
|
var t: Material = $MeshInstance3D.material_override
|
|
|
|
|
t.uv1_scale = last_direction
|
2024-12-27 21:00:07 +01:00
|
|
|
|
|
|
|
|
move_and_slide()
|
2025-01-02 12:09:30 +01:00
|
|
|
|
|
|
|
|
# handle camera
|
|
|
|
|
camera.position.x = lerp(camera.position.x, position.x, 0.08)
|
|
|
|
|
camera.position.y = lerp(camera.position.y, position.y, 0.08) + 0.07
|
|
|
|
|
camera.position.z = position.z + 4
|
|
|
|
|
|
2025-02-04 05:50:59 +01:00
|
|
|
func _unhandled_input(_event: InputEvent) -> void:
|
2025-01-02 14:05:21 +01:00
|
|
|
if Input.is_action_pressed("zoom_in"):
|
|
|
|
|
camera.fov -= 1 * (5 if Input.is_key_pressed(KEY_SHIFT) else 1)
|
|
|
|
|
camera.size -= 1 * (0.2 if Input.is_key_pressed(KEY_SHIFT) else 0.05)
|
|
|
|
|
if Input.is_action_pressed("zoom_out"):
|
|
|
|
|
camera.fov += 1 * (5 if Input.is_key_pressed(KEY_SHIFT) else 1)
|
|
|
|
|
camera.size += 1 * (0.2 if Input.is_key_pressed(KEY_SHIFT) else 0.05)
|