class_name SceneManager extends Node2D @onready var level: Node2D = $"../Level" @onready var crates: Node2D = $"../Crates" @onready var triggers: Node2D = $"../Triggers" @onready var game:GameController = $".." # Called when the node enters the scene tree for the first time. func _ready() -> void: buildLevel() # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: pass func buildLevel()->void: #Prepare the game controller with all #needed information if triggers: updateTriggers() if crates: updateCrates() #Listen to signals coming from game controller #that have to do with updating the stage game.destroySignal.connect(destroy) game.teleportSignal.connect(teleport) game.levelChangeSignal.connect(loadLevel) #Finds all Triggers and wires signals to game controller func updateTriggers()->void: for obj in triggers.get_children(): if obj is Trigger: if not obj.AreaTrigger.is_connected(game._on_trigger): obj.AreaTrigger.connect(game._on_trigger) #Finds all crates and wires number count to game controller func updateCrates()->void: var totalCrates =0 for obj in crates.get_children(): if obj is Crate: if not obj.tree_exited.is_connected(updateCrates): obj.tree_exited.connect(updateCrates) totalCrates +=1 game.updateCrates(totalCrates) func loadLevel(level:String)->void: get_tree().call_deferred("change_scene_to_file", level) func destroy(body:Variant)->void: body.queue_free() func teleport(body:Variant)->void: if body is Crate: #send it var viewport_size = get_viewport().get_visible_rect().size var random_x = randf_range(0, viewport_size.x) var random_y = randf_range(0, viewport_size.y) var newPosition = Vector2(random_x, random_y) body.teleport_to(newPosition)