extends Node2D var coinsCollectedTotal:int = 0 var totalCoinsAvailable:int = 0 var levels=["res://scenes/game.tscn","res://scenes/level2.tscn","res://scenes/level3.tscn"] var timers=[16,10,15] var timeAvailable:int =0 var currentLevel = 0 var timer = Timer.new() #signals signal levelChangeSignal(level) signal destroySignal(body) signal playerDamagedSignal(health, maxHealth) signal playerDeathSignal signal gameSaveSignal(level, timeRemaining, playerHealth, enemiesDictionary) signal gameLoadSignal(stash) signal countDownSignal(timeRemaining) signal coinUpdateSignal(remainingCoins) var enemy:CharacterStats var player:CharacterStats var enemiesDict = {} var playerCurrentHealth:int =0 var stashData={} # Called when the node enters the scene tree for the first time. func _ready(): #load in characters enemy = load("res://scripts/rscs/slimeStats.tres") player = load("res://scripts/rscs/playerStats.tres") playerCurrentHealth = 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 LOOSAE Baby!") print(levels[currentLevel]) levelChangeSignal.emit(levels[currentLevel]) func reset()->void: timeAvailable = timers[currentLevel] enemiesDict.clear() playerCurrentHealth = player.starting_health # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta): if Input.is_action_just_pressed("save"): print("save the game") saveGame() if Input.is_action_just_pressed("load"): print("load the game") loadGame() func _on_trigger_fired(intent, body): print("GC knows trigger fired "+intent) match intent: "destroy": print("destroy this thing") destroySignal.emit(body) "powerup": print("power up this thing") func _on_coin_collected(body, coin): destroySignal.emit(coin) func totalCoins(value): coinUpdateSignal.emit(value) if value == 0: #you won currentLevel +=1 if currentLevel >= levels.size(): currentLevel = 0 levelChangeSignal.emit(levels[currentLevel]) func _on_slime_damage(_body, slime): print("GC knows slime damage") print("Damage "+str(enemiesDict[slime]["damage"])) print("Player Health "+str(playerCurrentHealth)+" of "+str(player.starting_health)) playerCurrentHealth -= enemiesDict[slime]["damage"] if playerCurrentHealth <=0: print("YOU DED") playerDeathSignal.emit() else: print("Taking damage") playerDamagedSignal.emit(playerCurrentHealth, player.starting_health) func deathComplete()->void: levelChangeSignal.emit(levels[currentLevel]) func totalEnemies(value): print("GC knows total enemies "+str(value)) func addEnemyToLevel(slime, _stat=null)->void: print("GC adding enemy") var randDamage:int = randi() % 10 var enemyStat = { "health": enemy.health, "damage": enemy.meleeDamage+randDamage } if _stat: enemyStat = { "health":_stat.health, "damage":_stat.damage } enemiesDict[slime]= enemyStat func bulletDamage(area,bullet)->void: print("Bullet hitting area") if area is Slime: print("Hitting a slime") print("Slime health "+str(enemiesDict[area]["health"])) enemiesDict[area]["health"]-=player.rangeDamage if enemiesDict[area]["health"] <=0: print("enemy killed") removeEnemyFromLevel(area) destroySignal.emit(area) else: print("enemy damaged") func removeEnemyFromLevel(slime)->void: enemiesDict.erase(slime) func saveGame()->void: gameSaveSignal.emit(currentLevel, timeAvailable, playerCurrentHealth, enemiesDict) func loadGame()->void: if ResourceLoader.exists("res://scripts/rscs/level"+str(currentLevel)+"_gameSaveStats.tres"): var saved_game:SaveObject = load("res://scripts/rscs/level"+str(currentLevel)+"_gameSaveStats.tres") enemiesDict.clear() #get from loaded game save stashData = saved_game.gameSave print("loading the game") gameLoadSignal.emit(stashData) func stashGame(stash)->void: print("stashing game") stashData = stash var stashObject = SaveObject.new() stashObject.gameSave=stashData ResourceSaver.save(stashObject, "res://scripts/rscs/level"+str(currentLevel)+"_gameSaveStats.tres") func playerHealth(value)->void: playerCurrentHealth = value