diff options
| author | Daniel Weipert <git@mail.dweipert.de> | 2025-02-08 23:44:34 +0100 | 
|---|---|---|
| committer | Daniel Weipert <git@mail.dweipert.de> | 2025-02-08 23:44:34 +0100 | 
| commit | f6c81b065cf4d7f1302a50f2f72cfab32204a1ec (patch) | |
| tree | 7690bae73a7bf54ed973a8c8480ba104d8ab413f /network | |
| parent | d24180c58e9e1d6149f0ac41d4f4bbaf674bdbd3 (diff) | |
next commit
Diffstat (limited to 'network')
| -rw-r--r-- | network/network.gd | 81 | ||||
| -rw-r--r-- | network/network.gd.uid | 1 | ||||
| -rw-r--r-- | network/network.tscn | 9 | 
3 files changed, 91 insertions, 0 deletions
| diff --git a/network/network.gd b/network/network.gd new file mode 100644 index 0000000..c6e3351 --- /dev/null +++ b/network/network.gd @@ -0,0 +1,81 @@ +extends Node + + +var local_player: Player + +signal current_player_changed +var current_player_id: int: +	set (value): +		current_player_id = value +		current_player = get_player(value) +		current_player_changed.emit() +var current_player: Player + +var player_order := [1]: +	set (value): +		player_order = value +		set_player_order.rpc(value) + + +func _ready() -> void: +	multiplayer.peer_connected.connect(_on_peer_connected) +	multiplayer.peer_disconnected.connect(_on_peer_disconnected) + + +func host() -> void: +	var peer := ENetMultiplayerPeer.new() +	peer.create_server(1234) +	multiplayer.multiplayer_peer = peer +	add_player(multiplayer.get_unique_id()) +	local_player = get_player(multiplayer.get_unique_id()) +	current_player = local_player +	current_player_id = multiplayer.get_unique_id() + + +func join() -> void: +	var peer := ENetMultiplayerPeer.new() +	peer.create_client("localhost", 1234) +	multiplayer.multiplayer_peer = peer +	add_player(multiplayer.get_unique_id()) +	local_player = get_player(multiplayer.get_unique_id()) + + +func add_player(id: int) -> void: +	var player: Player = load("res://player/player.tscn").instantiate() +	player.id = id +	%Players.add_child(player) + + +func get_player(id: int) -> Player: +	return %Players.get_node(str(id)) + + +func is_my_turn() -> bool: +	return current_player == local_player + + +func set_current_player(id: int) -> void: +	sync_current_player.rpc(id) + +@rpc("any_peer", "call_local") +func sync_current_player(id: int) -> void: +	current_player_id = id + + +@rpc("authority", "call_remote") +func set_player_order(value: Array) -> void: +	player_order = value + + +func _on_peer_connected(id: int): +	add_player(id) +	 +	if multiplayer.is_server(): +		sync_current_player.rpc_id(id, current_player_id) +		player_order.append(id) +	else: +		get_player(id).set_initial_values() + + +func _on_peer_disconnected(id: int): +	%Players.remove_child(%Players.get_node(str(id))) diff --git a/network/network.gd.uid b/network/network.gd.uid new file mode 100644 index 0000000..ef9f4bd --- /dev/null +++ b/network/network.gd.uid @@ -0,0 +1 @@ +uid://s501248mox21 diff --git a/network/network.tscn b/network/network.tscn new file mode 100644 index 0000000..414712f --- /dev/null +++ b/network/network.tscn @@ -0,0 +1,9 @@ +[gd_scene load_steps=2 format=3 uid="uid://bcsu36le4cax6"] + +[ext_resource type="Script" uid="uid://s501248mox21" path="res://network/network.gd" id="1_g3i60"] + +[node name="Network" type="Node"] +script = ExtResource("1_g3i60") + +[node name="Players" type="Node" parent="."] +unique_name_in_owner = true | 
