class_name GameController extends Node2D var crateTotal = 0 signal destroySignal(body) signal teleportSignal(body) signal levelChangeSignal(level) signal playerDamageSignal(health, maxHealth) signal playerDeathSignal signal countDownSignal(timeRemaining) signal coinCollectedSignal(totalCoinsCollected, coinsRemaining) var currentScene:String = "res://scenes/game.tscn" var timer := Timer.new() var timeAvailable := 10 var levels=["res://scenes/game.tscn","res://scenes/level2.tscn","res://scenes/level3.tscn"] var timers=[15,10,8] var currentLevel=0 var coinsCollected = 0 var playerHealth = 100 var playerStartingHealth = 100 var enemiesDict={} var enemy:CharacterStats var player:CharacterStats # Called when the node enters the scene tree for the first time. func _ready() -> void: get_window().grab_focus() enemy = load("res://scripts/rscs/slimeStats.tres") player = load("res://scripts/rscs/playerStats.tres") add_child(timer) timer.wait_time = 1 timer.one_shot= false timer.connect("timeout", secondCounter) timer.start() func reset()->void: timeAvailable = timers[currentLevel] playerHealth = player.starting_health coinsCollected = 0 func secondCounter()->void: timeAvailable -=1 countDownSignal.emit(timeAvailable) 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_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 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: enemiesDict[body]["health"] -= player.rangeDamage if enemiesDict[body]["health"]<=0: destroySignal.emit(body) destroySignal.emit(bullet) func _on_coin_collected(body:Node2D, coin:Coin)->void: print("GC knows coin collected") coinsCollected +=1 destroySignal.emit(coin) func totalCoins(value)->void: print("GC knows coins remaining "+str(value)) coinCollectedSignal.emit(coinsCollected, value) if value <=0: #no coins left in level currentLevel +=1 if currentLevel >= levels.size(): currentLevel = 0 levelChangeSignal.emit(levels[currentLevel]) func _on_slime_damage(body:Node2D, slime:Slime)->void: playerHealth -= enemiesDict[slime]["damage"] print("GC knows damage from slime "+str(enemiesDict[slime]["damage"])) print("GC knows slime damage to player "+str(playerHealth)) if playerHealth <=0: print("YOU DED") playerDeathSignal.emit() else: #damage playerDamageSignal.emit(playerHealth, player.max_health) func addEnemyToLevel(slime:Slime)->void: # var randDamage:int = randi()%10 var enemyStat = { "health":enemy.starting_health, "damage":enemy.meleeDamage } #put it in dictionary enemiesDict[slime]=enemyStat func loadLevel()->void: levelChangeSignal.emit(levels[currentLevel])