diff options
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 |