class_name GameController extends Node2D var totalCrates = 3 var timeLimit = 10 var timer = Timer.new() var coinsCollectedTotal := 0 var levels = ["res://scenes/game.tscn", "res://scenes/level2.tscn", "res://scenes/level3.tscn"] var timers = [30, 15, 25] var currentLevel = 0 var playerHealth = 100 signal levelCompleteSignal(level) signal destroySignal(body) signal playerDamage signal playerDeath # Called when the node enters the scene tree for the first time. func _ready() -> void: add_child(timer) timer.wait_time = 1 timer.one_shot = false timer.connect("timeout", secondCounter) timer.start() func secondCounter(): print("tick "+str(timeLimit)) timeLimit -= 1 if timeLimit <= 0: print("YOU LOSE...") levelCompleteSignal.emit(levels[currentLevel]) # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: if totalCrates == 0: print("YOU WIN!") currentLevel += 1 if currentLevel >= levels.size(): currentLevel = 0 levelCompleteSignal.emit(levels[currentLevel]) func _on_trigger_fired(effect: Variant, body: Variant) -> void: print("GameController know about trigger " + effect) if effect == "destroy": if body is Crate: print("Crates remaining: " + str(totalCrates)) destroySignal.emit(body) func _on_coin_collected(body, coin): coinsCollectedTotal += 1 destroySignal.emit(coin) print("GC knows coin collected") func _on_player_damage(body, enemy): if enemy is Slime: print("slime attack!") playerHealth -= 10 if playerHealth > 0: print("Player damaged") playerDamage.emit() else: print("Player dead") playerDeath.emit() func numberOfCrates(value:int)->void: totalCrates = value func bulletDamage(body, bullet): if body is Crate: print("Crates remaining: " + str(totalCrates)) destroySignal.emit(body) func reset(): timeLimit = timers[currentLevel] playerHealth = 100 func death(): print("player death animation complete")