diff options
| author | Daniel Weipert <git@mail.dweipert.de> | 2025-02-12 20:05:59 +0100 | 
|---|---|---|
| committer | Daniel Weipert <git@mail.dweipert.de> | 2025-02-12 20:05:59 +0100 | 
| commit | 218748f67a6a6b35efc4a732ad11426d0f528709 (patch) | |
| tree | e58504dd758ce6525844872007221cda2a8b6926 /network | |
| parent | f6c81b065cf4d7f1302a50f2f72cfab32204a1ec (diff) | |
next commit
Diffstat (limited to 'network')
| -rw-r--r-- | network/multiplayer_synchronizer_2.gd | 40 | ||||
| -rw-r--r-- | network/multiplayer_synchronizer_2.gd.uid | 1 | ||||
| -rw-r--r-- | network/multiplayer_synchronizer_2.tscn | 6 | ||||
| -rw-r--r-- | network/network.gd | 21 | 
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() | 
