JuneGame/scripts/gamecontroller.gd

118 lines
3.1 KiB
GDScript

extends Node2D
var totalCoinsAvailable = 0
var timer = Timer.new()
var timeAvailable
var level="res://scenes/game.tscn"
var levelTwo = "res://scenes/level2.tscn"
var levels = ["res://scenes/game.tscn","res://scenes/level2.tscn","res://scenes/level3.tscn"]
var timers = [30,20,15]
var currentLevel = 0
var startingCoins = 0
signal destroySignal(body)
signal levelChangeSignal(level)
signal playerTakeDamageSignal(health)
signal playerDiesSignal
signal bulletDamageEnemySignal(body)
signal countDownSignal(timeRemaining)
signal coinCountSignal(coinsRemaining, startingCoins)
var player:Characterstats
var enemy:Characterstats
var playerHealth:int
var enemiesDict = {}
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
player = load("res://scripts/rscs/playerstats.tres")
enemy = load("res://scripts/rscs/slimestats.tres")
playerHealth = 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 LOSE")
#get_tree().call_deferred("change_scene_to_file", levels[currentLevel])
levelChangeSignal.emit(levels[currentLevel])
#reload the current scene
func reset() -> void:
startingCoins=0
timeAvailable = timers[currentLevel]
playerHealth = player.starting_health
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
func _on_areatrigger(effect, body) -> void:
if effect == "destroy":
print("Destroy this thing")
body.queue_free()
if effect == "lavaBurn":
if body is Player:
playerHealth -= 10
print("player health is now"+str(playerHealth))
func totalCoinCount(totalCoins):
if startingCoins == 0:
startingCoins = totalCoins
totalCoinsAvailable = totalCoins
func coinCollected(body, coin):
if not body is Crate:
destroySignal.emit(coin)
totalCoinsAvailable -= 1
coinCountSignal.emit(totalCoinsAvailable, startingCoins)
if totalCoinsAvailable <=0:
print("YOU WIN")
currentLevel +=1
if currentLevel >= levels.size():
currentLevel =0
#get_tree().call_deferred("change_scene_to_file", levels[currentLevel])
levelChangeSignal.emit(levels[currentLevel])
func playerAttacked(body, slime):
print("GC knows player attacked")
playerHealth -= enemiesDict[slime].damage
if playerHealth<=0:
playerDiesSignal.emit()
else:
playerTakeDamageSignal.emit(playerHealth)
func playerDead():
levelChangeSignal.emit(levels[currentLevel] )
func bulletDamage(area, bullet):
print("Gc Knows bullet hit something"+str(player.rangeDamage))
print("GC Knows BG health is :"+str( enemiesDict[area].health))
enemiesDict[area].health -= player.rangeDamage
if enemiesDict[area].health<=0:
destroySignal.emit(area)
enemiesDict.erase(area)
else:
bulletDamageEnemySignal.emit(area)
func addEnemyToLevel(slime):
var randHealth:int = randi() % 20
var randDamage:int = randi() % 10
var enemyStat = {
"health":enemy.starting_health+ randHealth,
"damage":enemy.meleeDamage + randDamage
}
enemiesDict[slime]= enemyStat