class_name SceneManager extends Node2D @onready var crates: Node2D = $"../Crates" var grenade = preload("res://Scenes/grenade.tscn") @onready var enemies: Node2D = $"../Enemies" func _ready() -> void: GameController.reset() print("Scene manager is ready!") GameController.destroySignal.connect(destroy) GameController.levelChangeSignal.connect(changeScene) buildLevel() func destroy(body)->void: if body is Crate: body.queue_free() func buildLevel()->void: updateCrates() 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) 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)) GameController.totalCrates(_crateTotal) func makeGrenade(_grenadePosition, _grenadeDirection)->void: print("SM wants to make a grenade") var myGrenade:Grenade = grenade.instantiate() owner.add_child(myGrenade) myGrenade.transform = _grenadePosition myGrenade.apply_central_impulse(Vector2(_grenadeDirection,-1)*200) func changeScene(level)->void: print("SM wants to change scene "+level) get_tree().call_deferred("change_scene_to_file",level)