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 var player:CharacterStats var slime:CharacterStats var enemiesDict = {} signal levelCompleteSignal(level) signal destroySignal(body) signal playerDamage(health, maxHealth) signal playerDeath signal countDown(timeRemaining) signal coinUpdate(totalCoins) signal enemyHurt(enemy) # Called when the node enters the scene tree for the first time. func _ready() -> void: #load custom resources for player and slime player = load("res://scripts/res/playerstats.tres") slime = load("res://scripts/res/slimestats.tres") 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 countDown.emit(timeLimit) 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 coinUpdate.emit(coinsCollectedTotal) destroySignal.emit(coin) print("GC knows coin collected") func _on_player_damage(body, enemy): if enemy is Slime: print("slime attack!") #playerHealth -= slime.meleeDamage playerHealth -= enemiesDict[enemy]["damage"] if playerHealth > 0: print("Player damaged") playerDamage.emit(playerHealth, player.max_health) else: print("Player dead") playerDeath.emit() func addEnemyToLevel(enemy): var randHealth = randi() % 20 var randDamage = randi() % 10 var enemyStat = { "health":slime.health + randHealth, "damage":slime.meleeDamage + randDamage } enemiesDict[enemy] = enemyStat func numberOfCrates(value:int)->void: totalCrates = value func bulletDamage(body, bullet): #if body is Crate: # print("Crates remaining: " + str(totalCrates)) # destroySignal.emit(body) if body is Slime: enemiesDict[body]["health"] -= player.rangeDamage print("Enemy Health "+str(enemiesDict[body]["health"])) enemyHurt.emit(body) if enemiesDict[body]["health"] <= 0: destroySignal.emit(body) enemiesDict.erase(body) func reset(): timeLimit = timers[currentLevel] playerHealth = player.starting_health func death(): print("player death animation complete") levelCompleteSignal.emit(levels[currentLevel])