summaryrefslogtreecommitdiff
path: root/network/multiplayer_synchronizer_2.gd
diff options
context:
space:
mode:
authorDaniel Weipert <git@mail.dweipert.de>2025-02-12 20:05:59 +0100
committerDaniel Weipert <git@mail.dweipert.de>2025-02-12 20:05:59 +0100
commit218748f67a6a6b35efc4a732ad11426d0f528709 (patch)
treee58504dd758ce6525844872007221cda2a8b6926 /network/multiplayer_synchronizer_2.gd
parentf6c81b065cf4d7f1302a50f2f72cfab32204a1ec (diff)
next commitHEADmain
Diffstat (limited to 'network/multiplayer_synchronizer_2.gd')
-rw-r--r--network/multiplayer_synchronizer_2.gd40
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))