summaryrefslogtreecommitdiff
path: root/network
diff options
context:
space:
mode:
authorDaniel Weipert <git@mail.dweipert.de>2025-02-08 23:44:34 +0100
committerDaniel Weipert <git@mail.dweipert.de>2025-02-08 23:44:34 +0100
commitf6c81b065cf4d7f1302a50f2f72cfab32204a1ec (patch)
tree7690bae73a7bf54ed973a8c8480ba104d8ab413f /network
parentd24180c58e9e1d6149f0ac41d4f4bbaf674bdbd3 (diff)
next commit
Diffstat (limited to 'network')
-rw-r--r--network/network.gd81
-rw-r--r--network/network.gd.uid1
-rw-r--r--network/network.tscn9
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