summaryrefslogtreecommitdiff
path: root/Stages/Wintermaul/unit_manager.gd
diff options
context:
space:
mode:
Diffstat (limited to 'Stages/Wintermaul/unit_manager.gd')
-rw-r--r--Stages/Wintermaul/unit_manager.gd61
1 files changed, 61 insertions, 0 deletions
diff --git a/Stages/Wintermaul/unit_manager.gd b/Stages/Wintermaul/unit_manager.gd
new file mode 100644
index 0000000..8690966
--- /dev/null
+++ b/Stages/Wintermaul/unit_manager.gd
@@ -0,0 +1,61 @@
+class_name UnitManager
+extends Node
+
+
+@export var stage: Stage
+@export var units_container: Node2D
+
+@export var money_manager: MoneyManager
+@export var path_manager: PathManager
+@export var notification_manager: NotificationManager
+
+
+func spawn_unit(unit: Unit, spawn: Spawn, overwrite_target: PathNode = null):
+ if not can_spawn_unit(unit):
+ return
+
+ var network_id = multiplayer.get_unique_id()
+ unit.owner_id = network_id
+ unit.name = "Unit@" + str(network_id) + "@" + str(Time.get_ticks_usec())
+
+ unit.global_position = spawn.spawn_position
+ unit.target = spawn.next_node
+
+ if overwrite_target:
+ unit.target = overwrite_target
+
+ spawn_unit_in_stage.rpc(inst_to_dict(unit.to_network_data()))
+
+
+@rpc("any_peer", "call_local")
+func spawn_unit_in_stage(remote_data: Dictionary):
+ var data: Unit.NetworkData = dict_to_inst(remote_data)
+ var unit := Unit.from_network_data(data)
+
+ var player = Network.get_player(unit.owner_id)
+ player.units.append(unit)
+
+ player.money -= unit.unit_resource.cost
+ player.income += unit.unit_resource.income
+ Network.players_changed.emit()
+
+ #if multiplayer.is_server(): # TODO: TeamManager
+ #unit.reached_goal.connect(func():
+ #var team = get_team(player)
+ #if team == teams.top:
+ #update_lives.rpc("bottom", -1)
+ #elif team == teams.bottom:
+ #update_lives.rpc("top", -1)
+ #)
+
+ unit.sprite.modulate = player.get_color()
+
+ units_container.add_child(unit, true)
+
+
+func can_spawn_unit(unit: Unit):
+ if Client.player.money < unit.unit_resource.cost:
+ notification_manager.add_status_message("Not enough money to spawn unit")
+ return false
+
+ return true