extends Node class_name InputHandler var camera: Camera3D func get_camera_input_direction() -> Vector2: return Input.get_vector( "camera-left", "camera-right", "camera-up", "camera-down" ) # Get the XZ input direction based on player's input relative to the camera func get_player_input_relative_to_camera(raw_input: Vector2) -> Vector3: if camera: var forward := camera.global_basis.z var right := camera.global_basis.x var dir := ( forward * raw_input.y + right * raw_input.x ).normalized() return dir else: return Vector3.ZERO func get_player_input() -> InputPacket: var p: InputPacket = InputPacket.new() p.movement_direction = Input.get_vector( "player-left", "player-right", "player-forward", "player-backward" ) p.camera_movement_direction = get_player_input_relative_to_camera( p.movement_direction ) if p.movement_direction != Vector2.ZERO: p.actions.append("walk") if Input.is_action_just_pressed("player-dash"): p.actions.append("dash") if Input.is_action_just_pressed("player-slash"): p.actions.append("slash") if Input.is_action_just_pressed("player-shoot"): p.actions.append("shoot") if p.actions.is_empty(): p.actions.append("idle") return p