extends Node2D signal destroy(body) signal level_change_signal(level) signal damage_player_signal(damage, player_health) var levels = ["res://scenes/level1.tscn","res://scenes/level2.tscn","res://scenes/level3.tscn"] var current_level_index = 0 var level_times = [15,20,25] var time_available = 0 var timer = Timer.new() var player:Player; var enemies = {} var enemy_stats:CharacterStats var player_stats:CharacterStats func _ready(): get_window().grab_focus() enemy_stats = load("res://scripts/resources/slime_stats.tres") player_stats = load("res://scripts/resources/player_stats.tres") reset() add_child(timer) timer.wait_time = 1 timer.one_shot = false timer.connect("timeout", timer_tick) timer.start() func timer_tick(): time_available -= 1 if time_available <= 0: print("you lose") level_change_signal.emit(levels[current_level_index]) reset() func reset(): time_available = level_times[current_level_index] if player: player.health = player_stats.starting_health func stop(): timer.stop() func _process(delta): pass func _on_area_2d_trigger_active_signal(body, intentMessage): print("game controller received trigger") if intentMessage == "destroy" and body.is_in_group("destructable"): destroy.emit(body) var crate_num : int = 0 func set_crate_num(count: int): crate_num = count if crate_num <= 0: current_level_index += 1 if current_level_index == levels.size(): print("You Win!") stop() else: level_change_signal.emit(levels[current_level_index]) reset() func _on_slime_damage(body, slime): damage_player_signal.emit(enemies[slime]["damage"]) func add_enemy(slime): var enemy_stat = { "health": enemy_stats.starting_health, "damage": enemy_stats.melee_damage } enemies[slime] = enemy_stat func _on_slime_struck(body, slime): print("game controller sees slime struck") func _on_player_dead(player): print("game controller sees dead player") level_change_signal.emit(levels[current_level_index])