]> Untitled Git - frog-ninja.git/blob - player/player.gd
Refactoring
[frog-ninja.git] / player / player.gd
1 extends CharacterBody3D
2 class_name Player
3
4
5 @export_group("Movement")
6 @export var walk_speed := 10.0
7 @export var dash_length := 10.0
8 @export var acceleration := 20.0
9 @export var rotation_speed := 10.0
10 @export var idle_timeout := 5.0
11
12
13 var idle_time := 0.00
14 var last_movement_direction := rotation
15 var floor_normal := Vector3.ZERO
16 var ground_slope_input := 0.0
17 var state := ""
18
19 @onready var input: InputHandler = $Input
20 @onready var model: PlayerModel = $Model
21 @onready var skin: SkeletonSkin3D = $Visual
22 @onready var cameraHandler: PlayerCameraHandler = $CameraHandler
23 @onready var camera: Camera3D = $CameraHandler/SpringArm3D/Camera3D
24
25
26 func _ready() -> void:
27         skin.assign_skeleton(model.skeleton)
28
29
30 func _physics_process(delta: float) -> void:
31         var input_pkt := input.get_player_input()
32         cameraHandler.update(input_pkt, delta)
33         
34         input_pkt.player_movement_direction = get_movement_relative_to_camera(
35                 input_pkt.player_movement_direction
36                 )
37         model.update(input_pkt, delta)
38         
39         # TODO: this is bad!!
40         model.skeleton.global_transform = skin.global_transform
41
42
43 # Get the XZ input direction based on player's input relative to the camera
44 func get_movement_relative_to_camera(movement_direction: Vector2) -> Vector2:
45         if camera:
46                 var forward := camera.global_basis.z
47                 var right := camera.global_basis.x
48                 var dir := (
49                         forward * movement_direction.y + right * movement_direction.x
50                         ).normalized()
51                 return Vector2(dir.x, dir.z).normalized()
52         else:
53                 return Vector2.ZERO