extends Node2D signal playerDeathSignal signal playerDamageSignal(health, maxhealth) signal destroySignal(body) signal levelChangeSignal(level) var loadIntent = false var timer = Timer.new() var timeAvailable:int = 5 var levels = ["res://scenes/game.tscn","res://scenes/level2.tscn","res://scenes/level3.tscn"] var timers = [15,10,9] var currentLevel = 0 #character stats var enemy:CharacterStats var player:CharacterStats var playerCurrentHealth:int var enemiesDict = {} var saveObject = {} # Called when the node enters the scene tree for the first time. func _ready() -> void: 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 reset(): enemiesDict.clear() timeAvailable = timers[currentLevel] playerCurrentHealth = player.max_health if loadIntent: var saved_game:SavedGame = load("res://scripts/rscs/gameSaveStats.tres") saveObject = saved_game.gameData playerCurrentHealth = saveObject ["PlayerHealth"] timeAvailable = saveObject["TimeAvailable"] loadIntent = false return saveObject return{} func secondCounter(): timeAvailable -=1 #check for time running out 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: if Input.is_action_just_pressed("save"): saveGame() if Input.is_action_just_pressed("load"): loadGame() func _on_trigger(effect: Variant, body: Variant) -> void: print("GC sees trigger "+effect) match effect: "player_hurt": if body is Player: print("hurt the player") #playerDamage.emit() #if not body is Player: # body.queue_free() func bulletDamage(body, bullet): print("GC know about bullet hit") if body is Slime: #give damage to this individual enemy enemiesDict[body]["health"] -= player.rangeDamage if enemiesDict[body]["health"] <=0: print ("enemy is dead") removeEnemyFromLevel(body) destroySignal.emit(body) else: print("enemy is damaged") body.handle_damage() func removeEnemyFromLevel(body)->void: enemiesDict.erase(body) func coinCollected(body, coin): print("GC knows coin collected") destroySignal.emit(coin) func totalCoinCount(count): print("GC knows total coins "+str(count)) if count == 0: currentLevel +=1 if currentLevel >= levels.size(): currentLevel = 0 levelChangeSignal.emit(levels[currentLevel]) func playerAttacked(body, slime): print("GC knows slime attack") print("Damge : "+str(enemiesDict[slime]["damage"]) ) print("Player health : "+str(playerCurrentHealth)) playerCurrentHealth -= enemiesDict[slime]["damage"] if playerCurrentHealth <=0: print("YOU DEAD") playerDeathSignal.emit() else: print("taking damage") playerDamageSignal.emit(playerCurrentHealth, player.max_health) func deathComplete()->void: levelChangeSignal.emit(levels[currentLevel]) func addEnemyToLevel(slime)->void: var randHealth:int= randi() % 20 var randDamage:int = randi() % 10 var enemyState= {"health": enemy.health + randHealth, "damage": enemy.meleeDamage + randDamage } enemiesDict[slime]= enemyState func saveGame()->void: saveObject["enemies"]={} var index = 0 # create an object with all critical game data print("game Level"+str(currentLevel)) print("time Remaining"+str(timeAvailable)) print("player Health"+str(playerCurrentHealth)) #bad guys stuff for key in enemiesDict: var tempObj = {} tempObj["health"]= enemiesDict[key]["health"] tempObj ["damage"]=enemiesDict[key]["damage"] tempObj["global_position"]= key.global_position saveObject["enemies"]["slime"+str(index)] = tempObj index +=1 saveObject["GameLevel"]= currentLevel saveObject["TimeAvailable"]= timeAvailable saveObject["PlayerHealth"]= playerCurrentHealth var saved_game:SavedGame = SavedGame.new() saved_game.gameData = saveObject ResourceSaver.save(saved_game, "res://scripts/rscs/gameSaveStats.tres") func loadGame()->void: loadIntent = true levelChangeSignal.emit(levels[saveObject["GameLevel"]])