summaryrefslogtreecommitdiff
path: root/Game/Network.gd
diff options
context:
space:
mode:
Diffstat (limited to 'Game/Network.gd')
-rw-r--r--Game/Network.gd47
1 files changed, 13 insertions, 34 deletions
diff --git a/Game/Network.gd b/Game/Network.gd
index 1fabeaf..558c8fa 100644
--- a/Game/Network.gd
+++ b/Game/Network.gd
@@ -2,6 +2,7 @@ extends Node
signal players_changed
+signal player_joined(player: Player)
func _ready():
@@ -70,6 +71,9 @@ func get_player(id: int) -> Player:
return %Players.get_node(str(id))
+func get_players() -> Array[Node]:
+ return %Players.get_children()
+
func get_ordered_player_ids() -> Array:
var keys = %Players.get_children().map(func(item: Player):
return item.id
@@ -91,42 +95,31 @@ func add_to_players(remote_data: Dictionary):
%Players.add_child(player)
+ player_joined.emit(player)
players_changed.emit()
-@rpc("any_peer")
-func update_player(remote_data: Dictionary):
- var id = multiplayer.get_remote_sender_id()
+@rpc("any_peer", "call_local")
+func update_player(id: int, remote_data: Dictionary):
var player = get_player(id)
- player.score = remote_data.score
+ for property in remote_data:
+ if typeof(player[property]) == TYPE_INT:
+ player[property] += remote_data[property]
+ else:
+ player[property] = remote_data[property]
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()
-
- var tower = Tower.from_network_data(data)
- tower.owner_id = remote_player_id
-
- Network.get_player(remote_player_id).towers[tower.global_position] = tower
-
- Client.stage.place_tower(tower, tower.global_position)
-
-
-@rpc("any_peer")
#func destroy_tower(remote_tower: Dictionary):
func destroy_tower(position: Vector2):
var owner_id = multiplayer.get_remote_sender_id()
var player = get_player(owner_id)
var tower = player.towers.get(position)
- Client.stage.destroy_tower(tower)
+ Client.current_stage.destroy_tower(tower)
@rpc("any_peer")
@@ -139,20 +132,6 @@ func update_tower(remote_tower_node_path: NodePath, remote_data: Dictionary):
@rpc("any_peer")
-func spawn_unit(remote_data: Dictionary):#, _remote_spawn: Dictionary):
- #print(remote_data)
- var data: Unit.NetworkData = dict_to_inst(remote_data)
- var unit := Unit.from_network_data(data)
- #var spawn = from_rpc_object(remote_spawn, "res://Stages/Paths/Spawn.tscn")
-
- var remote_id = multiplayer.get_remote_sender_id()
- unit.owner_id = remote_id
- #unit.set_multiplayer_authority(remote_id)
-
- Client.stage.spawn_unit(unit)
-
-
-@rpc("any_peer")
func remove_unit(remote_unit_node_path):
var unit = get_tree().current_scene.get_node_or_null(remote_unit_node_path)
if unit: