summaryrefslogtreecommitdiff
path: root/network/network.gd
diff options
context:
space:
mode:
Diffstat (limited to 'network/network.gd')
-rw-r--r--network/network.gd81
1 files changed, 81 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)))