X-Git-Url: http://git.purplebirdman.com/frog-ninja.git/blobdiff_plain/715f2ba5689e0474928af72a3f2d7493ef431963..0b4b7dc3e7a9507f7b7c87e9cf0f606e051927f2:/player/player.gd?ds=sidebyside diff --git a/player/player.gd b/player/player.gd index 258602b..5964f1b 100644 --- a/player/player.gd +++ b/player/player.gd @@ -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