@onready var spring: SpringArm3D = $SpringArm3D
+@onready var camera: Camera3D = $SpringArm3D/Camera3D
# Called when the node enters the scene tree for the first time.
# horizontal camera rotation
rotation.y -= camera_input_direction.x * delta
+
+
+# Get the XZ input direction based on player's input relative to the camera
+func get_xz_direction_relative_to_camera(d: Vector2) -> Vector2:
+ if camera:
+ var forward := camera.global_basis.z
+ var right := camera.global_basis.x
+ var dir3 := forward * d.y + right * d.x
+ return Vector2(dir3.x, dir3.z).normalized()
+ else:
+ return Vector2.ZERO
@onready var model: PlayerModel = $Model
@onready var skin: SkeletonSkin3D = $Visual
@onready var cameraHandler: PlayerCameraHandler = $CameraHandler
-@onready var camera: Camera3D = $CameraHandler/SpringArm3D/Camera3D
func _ready() -> 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 = cameraHandler.get_xz_direction_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