2026-05-05 01:01:53 +00:00
|
|
|
class_name SceneManager extends Node2D
|
2026-05-26 01:03:44 +00:00
|
|
|
|
2026-05-05 01:01:53 +00:00
|
|
|
@onready var crates: Node2D = $"../Crates"
|
|
|
|
|
var grenade = preload("res://Scenes/grenade.tscn")
|
2026-05-26 01:03:44 +00:00
|
|
|
@onready var enemies: Node2D = $"../Enemies"
|
|
|
|
|
|
2026-05-05 01:01:53 +00:00
|
|
|
func _ready() -> void:
|
2026-05-26 01:03:44 +00:00
|
|
|
GameController.reset()
|
2026-05-05 01:01:53 +00:00
|
|
|
print("Scene manager is ready!")
|
2026-05-26 01:03:44 +00:00
|
|
|
GameController.destroySignal.connect(destroy)
|
|
|
|
|
GameController.levelChangeSignal.connect(changeScene)
|
2026-05-05 01:01:53 +00:00
|
|
|
buildLevel()
|
|
|
|
|
|
|
|
|
|
func destroy(body)->void:
|
|
|
|
|
if body is Crate:
|
|
|
|
|
body.queue_free()
|
|
|
|
|
|
|
|
|
|
func buildLevel()->void:
|
|
|
|
|
updateCrates()
|
2026-05-26 01:03:44 +00:00
|
|
|
if enemies:
|
|
|
|
|
updateEnemies()
|
|
|
|
|
|
|
|
|
|
func updateEnemies()->void:
|
|
|
|
|
var totalEnemies = 0
|
|
|
|
|
for obj in enemies.get_children():
|
|
|
|
|
if obj is Slime:
|
|
|
|
|
totalEnemies +=1
|
|
|
|
|
#hook up signals
|
|
|
|
|
if not obj.slimeDamageSignal.is_connected(GameController._on_slime_damage):
|
|
|
|
|
obj.slimeDamageSignal.connect(GameController._on_slime_damage)
|
|
|
|
|
GameController.addEnemyToLevel(obj)
|
|
|
|
|
|
2026-05-05 01:01:53 +00:00
|
|
|
func updateCrates()->void:
|
|
|
|
|
#is there a crate holder?
|
|
|
|
|
var _crateTotal:int = 0
|
|
|
|
|
if crates:
|
|
|
|
|
for obj in crates.get_children():
|
|
|
|
|
if obj is Crate:
|
|
|
|
|
if not obj.tree_exited.is_connected(updateCrates):
|
|
|
|
|
obj.tree_exited.connect(updateCrates)
|
|
|
|
|
_crateTotal +=1
|
|
|
|
|
print("Number of crates: "+str(_crateTotal))
|
2026-05-26 01:03:44 +00:00
|
|
|
GameController.totalCrates(_crateTotal)
|
2026-05-05 01:01:53 +00:00
|
|
|
|
|
|
|
|
func makeGrenade(_greandePosition, _grenadeDirection)->void:
|
|
|
|
|
print("SM wants to make a grenade")
|
|
|
|
|
var myGrenade:Grenade = grenade.instantiate()
|
|
|
|
|
owner.add_child(myGrenade)
|
|
|
|
|
myGrenade.transform = _greandePosition
|
|
|
|
|
myGrenade.apply_central_impulse(Vector2(_grenadeDirection, -1)*200)
|
2026-05-26 01:03:44 +00:00
|
|
|
func changeScene(level)->void:
|
|
|
|
|
print("SM wants to change scence"+level)
|
|
|
|
|
get_tree().call_deferred("change_scene_to_file", level)
|