diff options
Diffstat (limited to 'network/network.gd')
-rw-r--r-- | network/network.gd | 81 |
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))) |