class_name NetworkPuppeteer extends Node @export var player: Hero @export var player_movement: PlayerMovement @export var skeleton: Skeleton3D @export var animation_tree: AnimationTree func _ready() -> void: if is_multiplayer_authority(): player.ready_state_changed.connect(func x(state: bool) -> void: set_ready_state.rpc(state)) func _process(delta: float) -> void: if is_multiplayer_authority(): set_position.rpc(player.global_position) set_rotation.rpc(player_movement.head_angle, player.rotation.y) @rpc("unreliable", "call_remote") func set_position(position: Vector3) -> void: if player.global_position != position: animation_tree.set("parameters/Blend2/blend_amount", 1.0) else: animation_tree.set("parameters/Blend2/blend_amount", 0.0) player.global_position = position @rpc("unreliable", "call_remote") func set_rotation(x: float, y: float) -> void: player_movement.head_angle = x player.rotation.y = y var bone: int = skeleton.find_bone("Head") var pos: Quaternion = skeleton.get_bone_pose_rotation(bone) skeleton.set_bone_pose_rotation(bone, Quaternion.from_euler(Vector3(x, 0, 0))) @rpc("reliable", "call_remote") func set_ready_state(state: bool) -> void: if state: player.ready_self() else: player.unready_self()