class_name GameController extends Node2D var crateTotal=0 signal destroySignal(body) signal teleportSignal(body) signal levelChangeSignal(level) 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={} # Called when the node enters the scene tree for the first time. func _ready() -> void: get_window().grab_focus() add_child(timer) timer.wait_time =1 timer.one_shot=false timer.connect("timeout", secondCounter) timer.start() func reset() -> void: timeAvailable =timers[currentLevel] playerHealth=playerStartingHealth func secondCounter()-> void: timeAvailable -=1 if timeAvailable <=0: print("YOU LOSE!!") 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) "powerup": print("GC knows powerup") timeAvailable +=5 if body is Player: match effect: "powerup": print("GC knows powerup") timeAvailable +=5 destroySignal.emit(trigger) func crateUpdate(cratesAmount) ->void: crateTotal=cratesAmount print("GC updated crates: " +str(crateTotal)) if crateTotal <=0: print("you win") 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"] -=10 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 coin remaining " + str(value)) if value <=0: # no coins left in level levelChangeSignal.emit(levels[currentLevel]) func _on_slime_damage(body:Node2D, slime:Slime) -> void: playerHealth -=enemiesDict[slime]["damage"] print("GC knows damage "+str(enemiesDict[slime]["damage"])) print("GC knows slime damage to player "+ str(playerHealth)) if playerHealth <=0: print("You are dead") levelChangeSignal.emit(levels[currentLevel]) func addEnemyToLevel(slime:Slime)-> void: var randDamage:int=randi()%10 var enemyStat ={ "health": 50, "damage": randDamage } #put it in dictionary enemiesDict[slime]=enemyStat