summaryrefslogtreecommitdiff
path: root/Game/Network.gd
diff options
context:
space:
mode:
Diffstat (limited to 'Game/Network.gd')
-rw-r--r--Game/Network.gd46
1 files changed, 35 insertions, 11 deletions
diff --git a/Game/Network.gd b/Game/Network.gd
index 5f8be5c..1fabeaf 100644
--- a/Game/Network.gd
+++ b/Game/Network.gd
@@ -3,11 +3,12 @@ extends Node
signal players_changed
-var players = {}
-
func _ready():
+ reset_players()
+
multiplayer.connected_to_server.connect(_on_connected_to_server)
+ multiplayer.server_disconnected.connect(_on_disconneted_from_server)
multiplayer.peer_connected.connect(_on_peer_connected)
multiplayer.peer_disconnected.connect(_on_peer_disconnected)
@@ -21,7 +22,6 @@ func host_game(port):
multiplayer.multiplayer_peer = peer
Client.player.id = multiplayer.get_unique_id()
- %Players.add_child(Client.player)
func join_game(ip, port):
var peer = ENetMultiplayerPeer.new()
@@ -35,32 +35,45 @@ func join_game(ip, port):
func _on_connected_to_server():
print(multiplayer.get_unique_id(), ": connected to server")
+func _on_disconneted_from_server():
+ print("disconnected from server")
+
+ multiplayer.multiplayer_peer = OfflineMultiplayerPeer.new()
+ reset_players()
+
func _on_peer_connected(id):
print(multiplayer.get_unique_id(), ": peer connected: ", id)
- if id == 1: # tell host to add player
- add_to_players.rpc_id(1, inst_to_dict(Client.player))
- Client._player = null
+ add_to_players.rpc_id(id, inst_to_dict(Client.player))
# TODO: add existing towers to new peers
func _on_peer_disconnected(id):
print(multiplayer.get_unique_id(), ": peer disconnected: ", id)
+
+ %Players.remove_child(get_player(id))
+
# TODO: move towers owned by peer to host
if id == 1: # if host disconnected go back to Lobby
- get_tree().change_scene_to_file("res://UI/Lobby.tscn")
+ get_tree().change_scene_to_file("res://UI/Start.tscn")
+
+func reset_players():
+ for node in %Players.get_children():
+ %Players.remove_child(node)
+
+ %Players.add_child(preload("res://Game/Player.tscn").instantiate())
func get_player(id: int) -> Player:
+ if %Players.get_child_count() == 1:
+ return %Players.get_child(0)
+
return %Players.get_node(str(id))
-func get_ordered_player_ids(): # TODO: return type needed for players_list.gd "find" method?
+func get_ordered_player_ids() -> Array:
var keys = %Players.get_children().map(func(item: Player):
return item.id
)
- keys = keys.filter(func(item: int): # workaround for MultiplayerSpawner + Synchronizer
- return item != 0
- )
keys.sort_custom(func(a: int, b: int):
return int(str(a).substr(0, 8)) < int(str(b).substr(0, 8))
)
@@ -82,8 +95,19 @@ func add_to_players(remote_data: Dictionary):
@rpc("any_peer")
+func update_player(remote_data: Dictionary):
+ var id = multiplayer.get_remote_sender_id()
+ var player = get_player(id)
+
+ player.score = remote_data.score
+
+ players_changed.emit()
+
+
+@rpc("any_peer")
#func place_tower(remote_tower: Dictionary, position: Vector2):
func place_tower(remote_data: Dictionary):
+ print(remote_data)
var data: Tower.NetworkData = dict_to_inst(remote_data)
var remote_player_id = multiplayer.get_remote_sender_id()