2026-10-06 20:58:28 -04:00
|
|
|
class_name GameController extends Node2D
|
2026-09-29 21:07:27 -04:00
|
|
|
|
2026-10-06 20:58:28 -04:00
|
|
|
signal teleportSignal(body:RigidBody2D)
|
2026-10-13 20:59:25 -04:00
|
|
|
signal destroySignal(body)
|
2026-11-03 20:50:06 -05:00
|
|
|
signal damageSignal(body)
|
2026-10-13 20:59:25 -04:00
|
|
|
|
2026-10-27 21:03:58 -04:00
|
|
|
var numberOfCrates = 2
|
|
|
|
|
var totalCoins = 0
|
|
|
|
|
var coinsRemaining = 0
|
|
|
|
|
var coinsCollected = 0
|
|
|
|
|
|
2026-11-03 20:50:06 -05:00
|
|
|
var enemiesDict={}
|
|
|
|
|
var playerStats={
|
|
|
|
|
"health":100,
|
|
|
|
|
"meleeAttack": 50,
|
|
|
|
|
"rangeAttack": 20
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var enemy:CharacterStats
|
|
|
|
|
var player:CharacterStats
|
|
|
|
|
|
|
|
|
|
# level information
|
|
|
|
|
var levelArray=["res://scenes/game.tscn", "res://scenes/level2.tscn", "res://scenes/level3.tscn"]
|
|
|
|
|
var currentLevel = 0
|
|
|
|
|
|
2026-09-29 21:07:27 -04:00
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
|
|
|
func _ready() -> void:
|
2026-10-20 20:19:39 -04:00
|
|
|
get_window().grab_focus()
|
2026-11-03 20:50:06 -05:00
|
|
|
enemy = load("res://scripts/rscs/slimeStats.tres")
|
|
|
|
|
player = load("res://scripts/rscs/playerStats.tres")
|
2026-09-29 21:07:27 -04:00
|
|
|
|
2026-11-03 20:50:06 -05:00
|
|
|
func reset()->void:
|
|
|
|
|
playerStats={
|
|
|
|
|
"health": player.currentHealth,
|
|
|
|
|
"meleeAttack": player.meleeDamage,
|
|
|
|
|
"rangeAttack": player.rangeDamage
|
|
|
|
|
}
|
|
|
|
|
coinsCollected = 0
|
|
|
|
|
|
2026-09-29 21:07:27 -04:00
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
|
|
|
func _process(delta: float) -> void:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _on_trigger(effect: Variant, Object: Variant) -> void:
|
2026-11-03 20:50:06 -05:00
|
|
|
|
2026-10-06 20:58:28 -04:00
|
|
|
match effect:
|
|
|
|
|
"destroy":
|
|
|
|
|
if not Object is Player:
|
2026-10-13 20:59:25 -04:00
|
|
|
destroySignal.emit(Object)
|
2026-10-06 20:58:28 -04:00
|
|
|
"teleport":
|
|
|
|
|
if Object is Crate:
|
|
|
|
|
teleportSignal.emit(Object)
|
|
|
|
|
|
2026-11-03 20:50:06 -05:00
|
|
|
func _on_bullet_hit(body, bullet) -> void:
|
2026-10-06 20:58:28 -04:00
|
|
|
if body is Crate:
|
2026-10-13 20:59:25 -04:00
|
|
|
destroySignal.emit(body)
|
|
|
|
|
destroySignal.emit(bullet)
|
2026-11-03 20:50:06 -05:00
|
|
|
if body is Slime:
|
|
|
|
|
enemiesDict[body]["health"] -= playerStats.rangeAttack
|
|
|
|
|
if enemiesDict[body]["health"] <= 0:
|
|
|
|
|
print("Enemy is dead")
|
|
|
|
|
destroySignal.emit(body)
|
|
|
|
|
destroySignal.emit(bullet)
|
|
|
|
|
removeEnemyFromLevel(body)
|
|
|
|
|
else:
|
|
|
|
|
print("Enemy takes damage")
|
|
|
|
|
destroySignal.emit(bullet)
|
|
|
|
|
damageSignal.emit(body)
|
|
|
|
|
|
2026-10-06 20:58:28 -04:00
|
|
|
|
2026-10-27 21:03:58 -04:00
|
|
|
|
|
|
|
|
func crateTotal(amount)->void:
|
|
|
|
|
numberOfCrates = amount
|
|
|
|
|
if numberOfCrates<=0:
|
|
|
|
|
print("YOU WON!!!")
|
2026-11-03 20:50:06 -05:00
|
|
|
if currentLevel<levelArray.size()-1:
|
|
|
|
|
currentLevel +=1
|
|
|
|
|
else:
|
|
|
|
|
currentLevel = 0
|
|
|
|
|
levelChange()
|
2026-10-27 21:03:58 -04:00
|
|
|
func coinTotal(amount)->void:
|
|
|
|
|
if totalCoins == 0:
|
|
|
|
|
totalCoins = amount
|
|
|
|
|
coinsRemaining = amount
|
|
|
|
|
func coinCollected(body, coin)->void:
|
|
|
|
|
if body is Player:
|
|
|
|
|
#give them a coin
|
|
|
|
|
coinsCollected +=1
|
|
|
|
|
destroySignal.emit(coin)
|
2026-11-03 20:50:06 -05:00
|
|
|
func slimeAttack(body, slime)->void:
|
|
|
|
|
playerStats.health -= enemiesDict[slime].meleeDamage
|
|
|
|
|
if playerStats.health >0:
|
|
|
|
|
print("player takes damage")
|
|
|
|
|
damageSignal.emit(body)
|
|
|
|
|
else:
|
|
|
|
|
print("player is dead!!")
|
|
|
|
|
destroySignal.emit(body)
|
|
|
|
|
|
|
|
|
|
func addEnemyToLevel(slime)->void:
|
|
|
|
|
|
|
|
|
|
var stat={
|
|
|
|
|
"health":enemy.currentHealth + randi_range(0,10),
|
|
|
|
|
"meleeDamage":enemy.meleeDamage + randi_range(0,8)
|
|
|
|
|
}
|
|
|
|
|
enemiesDict[slime]=stat
|
|
|
|
|
func removeEnemyFromLevel(enemy)->void:
|
|
|
|
|
enemiesDict.erase(enemy)
|
|
|
|
|
|
|
|
|
|
func levelChange()->void:
|
|
|
|
|
get_tree().change_scene_to_file(levelArray[currentLevel])
|