class_name GameController extends Node2D signal destroySignal(body) signal fanTriggerSignal(body, fanDirection) signal teleportTriggerSignal(body) signal playerHurtSignal(playerHealth, maxHealth) signal playerDeadSignal var numberOfCrates = 2 var timeAvailable = 50 var totalCoinsCollected = 0 var timer = Timer.new() var currentPlayerHealth = 100 var startingHealth = 100 var enemiesDict={} var enemy:CharacterStats var player:CharacterStats func reset()->void: print("GC reset") currentPlayerHealth=player.startingHealth # 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", countdown) timer.start() func countdown()->void: # reduce time left timeAvailable-=1 if timeAvailable<=0 and numberOfCrates>0: print("LOOOOOSAH") playerDeadSignal.emit() # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: pass func _on_trigger(body: Variant, trigger: Variant, intent:String) -> void: print("GC knows trigger fired") match intent: "destroy": if body is RigidBody2D: destroySignal.emit(body) "fan": print("do a fan effect") fanTriggerSignal.emit(body,Vector2(0,-1)*100*9) "teleport": print("do a teleport") teleportTriggerSignal.emit(body) func crateTotal(howmany): numberOfCrates = howmany print("GC knows about crates: "+str(numberOfCrates)) if numberOfCrates == 0: print("YOU WON!!!") get_tree().reload_current_scene() func coinCollected(body,coin)->void: totalCoinsCollected +=1 print("GC knows coin collected") destroySignal.emit(coin) func coinTotal(totalAmount)->void: print("GC knows total coins "+str(totalAmount)) func bulletDamage(body, _bullet)->void: if body.is_in_group("shootable"): if body is Crate: destroySignal.emit(body) destroySignal.emit(_bullet) if body is Slime: enemiesDict[body]["health"] -= player.rangeDamage if enemiesDict[body]["health"]<=0: enemiesDict.erase(body) destroySignal.emit(body) destroySignal.emit(_bullet) func rocketDamage(body, rocket)->void: if body.is_in_group("shootable"): print("Rocket strikes target!") destroySignal.emit(body) func totalEnemies(numberOfEnemies)->void: print("GC knows this many badguy: "+str(numberOfEnemies)) func slimeAttack(body,slime)->void: print("GC knows slime attack "+str(enemiesDict[slime]["damage"])) currentPlayerHealth -= enemiesDict[slime]["damage"] if currentPlayerHealth>0: #damage print("player damaged") playerHurtSignal.emit(currentPlayerHealth, startingHealth) else: #ded print("player ded") playerDeadSignal.emit() func levelChange()->void: get_tree().reload_current_scene() func addEnemyToLevel(slime)->void: var stats = { "health": enemy.startingHealth, "damage": enemy.meleeDamage } enemiesDict[slime]=stats