summaryrefslogtreecommitdiff
path: root/Stages/Wintermaul/wintermaul.gd
diff options
context:
space:
mode:
Diffstat (limited to 'Stages/Wintermaul/wintermaul.gd')
-rw-r--r--Stages/Wintermaul/wintermaul.gd39
1 files changed, 37 insertions, 2 deletions
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()