44 lines
1.2 KiB
GDScript
44 lines
1.2 KiB
GDScript
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()
|