| extends CharacterBody3D
|
|
|
| @export var config: PlayerConfig
|
|
|
| @onready var movement = $PlayerMovement
|
| @onready var jump = $PlayerJump
|
| @onready var gravity = $PlayerGravity
|
| @onready var player_input = $InputController
|
| @onready var camera = $Camera3D
|
|
|
| func _ready():
|
| Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
|
|
| func _physics_process(delta: float) -> void:
|
| # Update vertical velocity with appropriate gravity
|
| velocity.y += gravity.get_gravity(is_on_floor()) * delta
|
|
|
| # Coyote time
|
| jump.update_coyote_timer(is_on_floor(), delta)
|
|
|
| # Handle jumping
|
| if jump.can_jump(is_on_floor()) and player_input.is_jump_pressed():
|
| velocity.y = jump.perform_jump()
|
|
|
| # Handle horizontal movement
|
| var input = player_input.get_movement_input()
|
| velocity = movement.calculate_movement(velocity, input, transform, is_on_floor())
|
|
|
| # Apply movement
|
| move_and_slide()
|
|
|
| func _input(event: InputEvent) -> void:
|
| player_input.process_mouse_input(event, camera)
|