SeptemberGame/scripts/gamecontroller.gd

128 lines
3.4 KiB
GDScript

extends Node2D
var totalCrates = 2 #This will be updated in the future, see SceneManager
var cratesDestroyed = 0
var timeLimit = 10
#var timer:= Timer.new()
#var timerLabel =
var coinsCollectedTotal:int = 0
var totalCoinsAvailable:int = 0
var levels = ["res://scenes/game.tscn", "res://scenes/level2.tscn", "res://scenes/level3.tscn"]
var timers = [6, 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
var enemy:CharacterStats
var player:CharacterStats
var enemiesDict = {}
var playerCurrentHealth:int = 0
# Called when the node enters the scene tree for the first time.
func _ready():
# load in characters
enemy = load("res://scripts/rscs/slime_stats.tres")
player = load("res://scripts/rscs/player_stats.tres")
playerCurrentHealth = player.starting_health
add_child(timer)
timer.wait_time = 1
timer.one_shot = false
timer.connect("timeout", secondCounter)
timer.start()
#$TimerLabel.text = str(timeLimit)
func secondCounter() -> void:
#timeLimit -= 1
#$TimerLabel.text = str(timeLimit)
#if timeLimit <=0:
# print("You lose baby!")
# get_tree().reload_current_scene()
#class
timeAvailable -= 1
if timeAvailable <= 0:
print("You lose baby!")
levelChangeSignal.emit(levels[currentLevel])
func reset() -> void:
timeAvailable = timers[currentLevel]
enemiesDict.clear()
playerCurrentHealth = player.starting_health
func _on_trigger_fired(intent: Variant, body) -> void:
#print("GC knows trigger fired " +intent)
match intent:
"destroy":
#if body.name.begins_with("Crate"):
# cratesDestroyed +=1
# body.queue_free() # destroy the crate - again will move to SceneManager
#if cratesDestroyed>=totalCrates:
# print("You win baby!")
# get_tree().reload_current_scene()
destroySignal.emit(body)
"powerup":
print("power up this thing")
func _on_coin_collected(body, coin):
print("GC knows coin collected")
coinsCollectedTotal += 1
destroySignal.emit(coin)
func totalCoins(value):
if value == 0:
# you won
print("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"]))
playerCurrentHealth -= enemiesDict[slime]["damage"]
if playerCurrentHealth <= 0:
print("YOU DIED")
playerDeathSignal.emit()
else:
print("Player Health " + str(playerCurrentHealth) + " of " + str(player.starting_health))
playerDamagedSignal.emit(playerCurrentHealth, player.starting_health)
func totalEnemies(value):
print("GC knows total enemies " + str(value))
#totalEnemies = value
func addEnemyToLevel(slime) -> void:
print("GC adding enemy")
var randDamage:int = randi() % 10
var enemyStat = {
"health": enemy.health,
"damage": enemy.meleeDamage + randDamage
}
enemiesDict[slime] = enemyStat
func bulletDamage(area, bullet) -> void:
print("Bullet hitting area")
if area is Slime:
print("Hitting a slime")
enemiesDict[area]["health"] -= player.rangeDamage
if enemiesDict[area]["health"] <= 0:
print("enemy killed")
removeEnemyFromLevel(area)
destroySignal.emit(area)
else:
print("Slime health " + str(enemiesDict[area]["health"]))
func removeEnemyFromLevel(slime) -> void:
enemiesDict.erase(slime)