class_name GameController extends Node2D var crateTotal = 0 signal destroySignal(body) signal teleportSignal(body) signal levelChangeSignal(level) var coinsCollected = 0 var timer := Timer.new() #add new levels var levels=["res://scenes/game.tscn","res://scenes/level2.tscn"] var timers=[16,10] var currentLevel = 0 var timeAvailable = timers[currentLevel] var enemiesDict={} var playerStartingHealth = 50 var playerHealth = 50 # Called when the node enters the scene tree for the first time. func _ready() -> void: get_window().grab_focus() add_child(timer) timer.wait_time = 1 timer.one_shot= false timer.connect("timeout", secondCounter) timer.start() # called by the scenemanager func reset()->void: # reset the time timeAvailable = timers[currentLevel] enemiesDict.clear() playerHealth = playerStartingHealth func secondCounter()->void: timeAvailable -=1 if timeAvailable <=0: print("YOU LOSE BABY!!") levelChangeSignal.emit(levels[currentLevel]) # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: pass func _on_coin_collected(body:Player, coin:Coin)-> void: coinsCollected +=1 destroySignal.emit(coin) #Any time coins are destroyed, game controller is informed how many left func totalCoins(value)-> void: print(value) if value <=0: print("You WON!!!") currentLevel +=1 if currentLevel >= levels.size(): currentLevel = 0 levelChangeSignal.emit(levels[currentLevel]) func _on_trigger(body: Variant, effect, trigger) -> void: print("GC knows trigger...."+effect) if body is Crate: match effect: "destroy": destroySignal.emit(body) "teleport": print("GC teleport an object") teleportSignal.emit(body) if body is Player: match effect: "powerup": print("GC knows about powerup") timeAvailable +=5 destroySignal.emit(trigger) func _on_slime_damage(body, slime)->void: # print("Slime attacked player for "+str(enemiesDict[slime]["damage"])) playerHealth -= enemiesDict[slime]["damage"] if playerHealth<=0: print("PLAYER KILLED!") #reload current level levelChangeSignal.emit(levels[currentLevel]) func totalEnemies(value)->void: print("Number of Enemies: "+str(value)) func addEnemyToLevel(slime:Slime)->void: #random number up to 10 var randDamage:int = randi()%10 var enemyStat = { "health":50, "damage":randDamage } #store in the enemy Dictionary enemiesDict[slime]=enemyStat func removeEnemyFromLevel(slime)->void: enemiesDict.erase(slime) func crateUpdate(cratesAmount)->void: crateTotal = cratesAmount print("GC updated crates: "+str(crateTotal)) if crateTotal <=0: print("You WON!!!") currentLevel +=1 if currentLevel >= levels.size(): currentLevel = 0 levelChangeSignal.emit(levels[currentLevel]) func bulletDamage(body:Node2D, bullet:Bullet)->void: if body is Crate: #destroy crate destroySignal.emit(body) destroySignal.emit(bullet) if body is Slime: print("bullet hitting slime") #damage the slime enemiesDict[body]["health"] -= 10 if enemiesDict[body]["health"] <=0: removeEnemyFromLevel(body) destroySignal.emit(body) destroySignal.emit(bullet)