JulyGame/scripts/gamecontroller.gd

154 lines
4.1 KiB
GDScript3
Raw Normal View History

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"]])