113 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			GDScript
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			2.9 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
 | 
						|
 | 
						|
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/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
 | 
						|
	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):
 | 
						|
	pass
 | 
						|
 | 
						|
 | 
						|
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):
 | 
						|
	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 totalEnemies(value):
 | 
						|
	print("GC knows total enemies "+str(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")
 | 
						|
		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)
 |