extends Node2D var totalCoinsAvailable = 0 var timer = Timer.new() var timeAvailable var level="res://scenes/game.tscn" var levelTwo = "res://scenes/level2.tscn" var levels = ["res://scenes/game.tscn","res://scenes/level2.tscn","res://scenes/level3.tscn"] var timers = [30,20,15] var currentLevel = 0 var startingCoins = 0 signal destroySignal(body) signal levelChangeSignal(level) signal playerTakeDamageSignal(health) signal playerDiesSignal signal bulletDamageEnemySignal(body) signal countDownSignal(timeRemaining) signal coinCountSignal(coinsRemaining, startingCoins) var player:Characterstats var enemy:Characterstats var playerHealth:int var enemiesDict = {} # Called when the node enters the scene tree for the first time. func _ready() -> void: player = load("res://scripts/rscs/playerstats.tres") enemy = load("res://scripts/rscs/slimestats.tres") playerHealth = player.starting_health add_child(timer) timer.wait_time = 1 timer.one_shot = false timer.connect("timeout", secondCounter) timer.start() func secondCounter() -> void: timeAvailable -=1 countDownSignal.emit(timeAvailable) if timeAvailable <= 0: print ("YOU LOSE") #get_tree().call_deferred("change_scene_to_file", levels[currentLevel]) levelChangeSignal.emit(levels[currentLevel]) #reload the current scene func reset() -> void: startingCoins=0 timeAvailable = timers[currentLevel] playerHealth = player.starting_health # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: pass func _on_areatrigger(effect, body) -> void: if effect == "destroy": print("Destroy this thing") body.queue_free() if effect == "lavaBurn": if body is Player: playerHealth -= 10 print("player health is now"+str(playerHealth)) func totalCoinCount(totalCoins): if startingCoins == 0: startingCoins = totalCoins totalCoinsAvailable = totalCoins func coinCollected(body, coin): if not body is Crate: destroySignal.emit(coin) totalCoinsAvailable -= 1 coinCountSignal.emit(totalCoinsAvailable, startingCoins) if totalCoinsAvailable <=0: print("YOU WIN") currentLevel +=1 if currentLevel >= levels.size(): currentLevel =0 #get_tree().call_deferred("change_scene_to_file", levels[currentLevel]) levelChangeSignal.emit(levels[currentLevel]) func playerAttacked(body, slime): print("GC knows player attacked") playerHealth -= enemiesDict[slime].damage if playerHealth<=0: playerDiesSignal.emit() else: playerTakeDamageSignal.emit(playerHealth) func playerDead(): levelChangeSignal.emit(levels[currentLevel] ) func bulletDamage(area, bullet): print("Gc Knows bullet hit something"+str(player.rangeDamage)) print("GC Knows BG health is :"+str( enemiesDict[area].health)) enemiesDict[area].health -= player.rangeDamage if enemiesDict[area].health<=0: destroySignal.emit(area) enemiesDict.erase(area) else: bulletDamageEnemySignal.emit(area) func addEnemyToLevel(slime): var randHealth:int = randi() % 20 var randDamage:int = randi() % 10 var enemyStat = { "health":enemy.starting_health+ randHealth, "damage":enemy.meleeDamage + randDamage } enemiesDict[slime]= enemyStat