SeptemberGame/scripts/gamecontroller.gd

158 lines
4.2 KiB
GDScript

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