]> Untitled Git - frog-ninja.git/blobdiff - player/player.gd
Refactoring
[frog-ninja.git] / player / player.gd
index 258602ba0eb30e76e541f99e25304f8c6455b500..5964f1bbb8f7e09b44e35fce54fc2a1d0ab92b13 100644 (file)
@@ -11,7 +11,7 @@ class_name Player
 
 
 var idle_time := 0.00
-var last_movement_direction := rotation 
+var last_movement_direction := rotation
 var floor_normal := Vector3.ZERO
 var ground_slope_input := 0.0
 var state := ""
@@ -19,18 +19,35 @@ var state := ""
 @onready var input: InputHandler = $Input
 @onready var model: PlayerModel = $Model
 @onready var skin: SkeletonSkin3D = $Visual
-@onready var camera_handler: CameraHandler = $CameraHandler
+@onready var cameraHandler: PlayerCameraHandler = $CameraHandler
+@onready var camera: Camera3D = $CameraHandler/SpringArm3D/Camera3D
 
 
 func _ready() -> void:
-       input.camera = %camera
-       camera_handler.input = input
        skin.assign_skeleton(model.skeleton)
 
 
 func _physics_process(delta: float) -> void:
        var input_pkt := input.get_player_input()
+       cameraHandler.update(input_pkt, delta)
+       
+       input_pkt.player_movement_direction = get_movement_relative_to_camera(
+               input_pkt.player_movement_direction
+               )
        model.update(input_pkt, delta)
        
        # TODO: this is bad!!
        model.skeleton.global_transform = skin.global_transform
+
+
+# Get the XZ input direction based on player's input relative to the camera
+func get_movement_relative_to_camera(movement_direction: Vector2) -> Vector2:
+       if camera:
+               var forward := camera.global_basis.z
+               var right := camera.global_basis.x
+               var dir := (
+                       forward * movement_direction.y + right * movement_direction.x
+                       ).normalized()
+               return Vector2(dir.x, dir.z).normalized()
+       else:
+               return Vector2.ZERO