class_name GameController extends Node2D signal teleportSignal(body:RigidBody2D) signal destroySignal(body) signal damageSignal(body) var numberOfCrates = 2 var totalCoins = 0 var coinsRemaining = 0 var coinsCollected = 0 var enemiesDict={} var playerStats={ "health":100, "meleeAttack": 50, "rangeAttack": 20 } var enemy:CharacterStats var player:CharacterStats # level information var levelArray=["res://scenes/game.tscn", "res://scenes/level2.tscn", "res://scenes/level3.tscn"] var currentLevel = 0 # 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") func reset()->void: playerStats={ "health": player.currentHealth, "meleeAttack": player.meleeDamage, "rangeAttack": player.rangeDamage } coinsCollected = 0 # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: pass func _on_trigger(effect: Variant, Object: Variant) -> void: match effect: "destroy": if not Object is Player: destroySignal.emit(Object) "teleport": if Object is Crate: teleportSignal.emit(Object) func _on_bullet_hit(body, bullet) -> void: if body is Crate: destroySignal.emit(body) destroySignal.emit(bullet) if body is Slime: enemiesDict[body]["health"] -= playerStats.rangeAttack if enemiesDict[body]["health"] <= 0: print("Enemy is dead") destroySignal.emit(body) destroySignal.emit(bullet) removeEnemyFromLevel(body) else: print("Enemy takes damage") destroySignal.emit(bullet) damageSignal.emit(body) func crateTotal(amount)->void: numberOfCrates = amount if numberOfCrates<=0: print("YOU WON!!!") if currentLevelvoid: if totalCoins == 0: totalCoins = amount coinsRemaining = amount func coinCollected(body, coin)->void: if body is Player: #give them a coin coinsCollected +=1 destroySignal.emit(coin) func slimeAttack(body, slime)->void: playerStats.health -= enemiesDict[slime].meleeDamage if playerStats.health >0: print("player takes damage") damageSignal.emit(body) else: print("player is dead!!") destroySignal.emit(body) func addEnemyToLevel(slime)->void: var stat={ "health":enemy.currentHealth + randi_range(0,10), "meleeDamage":enemy.meleeDamage + randi_range(0,8) } enemiesDict[slime]=stat func removeEnemyFromLevel(enemy)->void: enemiesDict.erase(enemy) func levelChange()->void: get_tree().change_scene_to_file(levelArray[currentLevel])