From e82990eeafdf0be5d42d8aaa9b7fb6091e0d8435 Mon Sep 17 00:00:00 2001 From: Daniel Weipert Date: Sun, 13 Oct 2024 11:14:43 +0200 Subject: next commit --- Stages/Wintermaul/wintermaul.gd | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) (limited to 'Stages/Wintermaul/wintermaul.gd') diff --git a/Stages/Wintermaul/wintermaul.gd b/Stages/Wintermaul/wintermaul.gd index f80234d..680f692 100644 --- a/Stages/Wintermaul/wintermaul.gd +++ b/Stages/Wintermaul/wintermaul.gd @@ -2,6 +2,8 @@ class_name Wintermaul extends Stage +signal lives_changed + class Teams extends Resource: var top := Team.new() var bottom := Team.new() @@ -16,6 +18,8 @@ var teams := Teams.new() func _init(): + super._init() + transform_players(preload("res://Stages/Wintermaul/player.gd")) teams.top.lives = 10 @@ -25,6 +29,7 @@ func _init(): func _ready(): super._ready() + # initialize player resources if multiplayer.is_server(): for player in Network.get_players(): Network.update_player.rpc(player.id, { @@ -32,25 +37,34 @@ func _ready(): "income": 1, }) + # set camera limits $Camera.limit_left = $Map.get_used_rect().position.x * %Map.tile_set.tile_size.x $Camera.limit_right = $Map.get_used_rect().end.x * %Map.tile_set.tile_size.x $Camera.limit_top = %Map.get_used_rect().position.y * %Map.tile_set.tile_size.y $Camera.limit_bottom = %Map.get_used_rect().end.y * %Map.tile_set.tile_size.y + # add players to teams Network.player_joined.connect(add_player) for id in Network.get_ordered_player_ids(): add_player(Network.get_player(id)) + # set camera for local player if get_team(Client.player) == teams.top: $Camera.set_center($BuilderCollisions/TeamTop/CollisionShape2D.global_position) elif get_team(Client.player) == teams.bottom: $Camera.set_center($BuilderCollisions/TeamBottom/CollisionShape2D.global_position) + # set players for HUD teams %HUD.get_node("%TeamTop").players = teams.top.players %HUD.get_node("%TeamBottom").players = teams.bottom.players + # start timer on server if multiplayer.is_server(): $IncomeTimer.start() + + # initialize lives display + update_lives("top", 0) + update_lives("bottom", 0) @rpc("any_peer", "call_local") @@ -77,9 +91,9 @@ func spawn_unit(remote_data: Dictionary): unit.reached_goal.connect(func(): var team = get_team(player) if team == teams.top: - teams.bottom.lives -= 1 + update_lives.rpc("bottom", -1) elif team == teams.bottom: - teams.top.lives -= 1 + update_lives.rpc("top", -1) ) Network.update_player.rpc(player.id, { @@ -90,6 +104,21 @@ func spawn_unit(remote_data: Dictionary): _spawn_unit(%Units, unit) +func can_place_tower(): + if Client.player.money < 1: + print("Not enough money to build tower") + return false + + return true + +func can_spawn_unit(): + if Client.player.money < 1: + print("Not enough money to spawn unit") + return false + + return true + + func add_player(player: Player): if teams.bottom.players.size() < teams.top.players.size(): teams.bottom.players.append(player) @@ -131,3 +160,9 @@ func _on_income_timer_timeout() -> void: Network.update_player.rpc(player.id, { "money": player.income, }) + + +@rpc("authority", "call_local") +func update_lives(team: String, lives: int): + teams[team].lives += lives + lives_changed.emit() -- cgit v1.2.3