diff options
Diffstat (limited to 'Global.gd')
-rw-r--r-- | Global.gd | 56 |
1 files changed, 54 insertions, 2 deletions
@@ -1,6 +1,10 @@ extends Node +signal level_map_updated() +signal game_won() + + const Levels = [ "Level_0001", "Level_0001", @@ -20,7 +24,10 @@ func _ready(): for level in self.Levels: self.Level_Map.push_back({ time = 0, - cleared_by = -1, + cleared_by = { # Network.player + idx = -1, + name = "" + }, meta = { path = "res://Levels/%s.tscn" % level, name = level, @@ -55,6 +62,51 @@ func end_level(instance_level): var time = stepify(instance_level.timer, 0.01) if (global_level.time == 0 or time < global_level.time): global_level.time = time - global_level.cleared_by = randi() & 1 + global_level.cleared_by = Network.player + for id in Network.players: + rpc_id(id, "_update_level_map", instance_level.idx, global_level) get_tree().change_scene("res://UI/LevelSelect.tscn") + + self.check_win() + + +remote func _update_level_map(idx, global_level): + self.Level_Map[idx] = global_level + emit_signal("level_map_updated") + + +func check_win(): + var has_won = false + + var cleared_levels_idx = [] + for idx in range(self.Level_Map.size()): + if self.Level_Map[idx].cleared_by.idx == Network.player.idx: + cleared_levels_idx.push_back(idx) + + var possible_winning_conditions = [ + [0, 1, 2], + [3, 4, 5], + [6, 7, 8], + + [0, 3, 6], + [1, 4, 7], + [2, 5, 8], + + [0, 4, 8], + [2, 4, 6], + ] + + # because there's no intersection method on arrays.. + for cond in possible_winning_conditions: + var has_cleared = 0 + for digit in cond: + if digit in cleared_levels_idx: + has_cleared += 1 + + if has_cleared == 3: + has_won = true + break + + if has_won: + emit_signal("game_won", Network.player) |