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 = [50, 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 resource 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(): timeLimit -=1 countDown.emit(timeLimit) if timeLimit <= 0: #loser!!!! 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: if effect=="destroy": if body is Crate: destroySignal.emit(body) func _on_coin_collected(body, coin): coinsCollectedTotal += 1 coinUpdate.emit(coinsCollectedTotal) destroySignal.emit(coin) func _on_player_damage(body, enemy): if enemy is Slime: playerHealth -= enemiesDict[enemy]["damage"] if playerHealth >0: playerDamage.emit(playerHealth, player.max_health) else: playerDeath.emit() func addEnemyToLevel(enemy): var randHealth:int = randi() % 20 var randDamage:int = randi() % 10 print("randoms "+str(randHealth)+" "+str(randDamage)) var enemyStat = { "health": slime.health + randHealth, "damage": slime.meleeDamage + randDamage } enemiesDict[enemy] = enemyStat func numberOfCrates(value): totalCrates = value func bulletDamage(body, bullet): if body is Slime: enemiesDict[body]["health"] -= player.rangeDamage #send custom signal 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(): levelCompleteSignal.emit(levels[currentLevel])