extends Node2D signal playerDamageSignal(health, maxhealth) signal playerDeathSignal signal destroySignal(body) signal levelChangeSignal(level) 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 = {} var loadIntent = false # 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]) 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 enemyStat = { "health": enemy.health + randHealth, "damage": enemy.meleeDamage + randDamage } enemiesDict[slime] = enemyStat 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 guy 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"]])