diff options
Diffstat (limited to 'network/multiplayer_synchronizer_2.gd')
-rw-r--r-- | network/multiplayer_synchronizer_2.gd | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/network/multiplayer_synchronizer_2.gd b/network/multiplayer_synchronizer_2.gd new file mode 100644 index 0000000..f843f6b --- /dev/null +++ b/network/multiplayer_synchronizer_2.gd @@ -0,0 +1,40 @@ +class_name MultiplayerSynchronizer2 +extends Node + + +signal property_changed(property_name: String, value: Variant) + +@export var root_node: Node +@export var properties: Array[String] + +var skip_setter: Dictionary[String, bool] + + +func _enter_tree() -> void: + for property in properties: + skip_setter.set(property, false) + if not multiplayer.is_server(): + if multiplayer.get_peers().size() > 0: + sync_initial_value.rpc_id(1, property) + else: + multiplayer.peer_connected.connect(func(_id: int): + sync_initial_value.rpc_id(1, property) + ) + + +func set_property(property_name: String, value: Variant) -> void: + if not skip_setter.get(property_name, false): + sync_property.rpc(property_name, value) + + +@rpc("any_peer", "call_local") +func sync_property(property_name: String, value: Variant) -> void: + skip_setter.set(property_name, true) + root_node.set(property_name, value) + property_changed.emit(property_name, value) + skip_setter.set(property_name, false) + + +@rpc("any_peer", "call_remote") +func sync_initial_value(property_name: String) -> void: + sync_property.rpc_id(multiplayer.get_remote_sender_id(), property_name, root_node.get(property_name)) |