summaryrefslogtreecommitdiff
path: root/network
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
parentf6c81b065cf4d7f1302a50f2f72cfab32204a1ec (diff)
next commitHEADmain
Diffstat (limited to 'network')
-rw-r--r--network/multiplayer_synchronizer_2.gd40
-rw-r--r--network/multiplayer_synchronizer_2.gd.uid1
-rw-r--r--network/multiplayer_synchronizer_2.tscn6
-rw-r--r--network/network.gd21
4 files changed, 67 insertions, 1 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))
diff --git a/network/multiplayer_synchronizer_2.gd.uid b/network/multiplayer_synchronizer_2.gd.uid
new file mode 100644
index 0000000..6120cdf
--- /dev/null
+++ b/network/multiplayer_synchronizer_2.gd.uid
@@ -0,0 +1 @@
+uid://6b8m7sadluig
diff --git a/network/multiplayer_synchronizer_2.tscn b/network/multiplayer_synchronizer_2.tscn
new file mode 100644
index 0000000..cdff837
--- /dev/null
+++ b/network/multiplayer_synchronizer_2.tscn
@@ -0,0 +1,6 @@
+[gd_scene load_steps=2 format=3 uid="uid://dpfo4lt54o3jj"]
+
+[ext_resource type="Script" uid="uid://6b8m7sadluig" path="res://network/multiplayer_synchronizer_2.gd" id="1_016wp"]
+
+[node name="MultiplayerSynchronizer2" type="Node"]
+script = ExtResource("1_016wp")
diff --git a/network/network.gd b/network/network.gd
index c6e3351..38eba42 100644
--- a/network/network.gd
+++ b/network/network.gd
@@ -1,6 +1,8 @@
extends Node
+signal connected
+
var local_player: Player
signal current_player_changed
@@ -74,8 +76,25 @@ func _on_peer_connected(id: int):
sync_current_player.rpc_id(id, current_player_id)
player_order.append(id)
else:
- get_player(id).set_initial_values()
+ check_is_connected()
+ #get_player(id).set_initial_values()
func _on_peer_disconnected(id: int):
%Players.remove_child(%Players.get_node(str(id)))
+
+
+# check is connected
+# TODO: check how to correctly do player setup at join
+
+func check_is_connected():
+ server_check_is_connected.rpc_id(1, multiplayer.get_peers().size())
+
+@rpc("any_peer", "call_remote")
+func server_check_is_connected(remote_peers_size: int):
+ if multiplayer.get_peers().size() == remote_peers_size:
+ server_tells_connected.rpc_id(multiplayer.get_remote_sender_id())
+
+@rpc("authority", "call_remote")
+func server_tells_connected():
+ connected.emit()