class_name SceneManager extends Node2D @onready var triggers: Node2D = $"../Triggers" @onready var level: Node2D = $"../Level" @onready var crates: Node2D = $"../Crates" @onready var game: GameController = $".." # has the recepies var bullet = preload("res://scenes/bullet.tscn") var bulletArray:Array[Bullet] = [] var totalAllowedBullets:int=7 # 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: print("building level") updatesCrates() updateTriggers() #wire up signals from gamecontrollerd game.destroySignal.connect(destroy) game.teleportSignal.connect(teleport) game.levelChangeSignal.connect(loadLevel) func updateTriggers()->void: if triggers: 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) func updatesCrates() -> void: #check that there is a crates node if crates: var totalCrates=0 for obj in crates.get_children(): if obj is Crate: if not obj.tree_exited.is_connected(updatesCrates): obj.tree_exited.connect(updatesCrates) totalCrates+=1 print("Total crates: "+str(totalCrates)) game.crateUpdate(totalCrates) func destroy(body)->void: if body is Bullet: stashBullet(body) return body.queue_free() func teleport(body) -> void: if body is Crate: 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) func loadLevel(level:String) -> void: get_tree().call_deferred("change_scene_to_file",level) func stashBullet(bullet:Bullet) -> void: var stashPosition:Vector2 =Vector2(-100,-100) bullet.position=stashPosition bullet.setSpeed(0) bullet.set_process(false) func bulletFactory()-> Bullet: var myBullet:Bullet # how many bullets have been made? if bulletArray.size() <=totalAllowedBullets: myBullet=bullet.instantiate() if not myBullet.bulletDamageSignal.is_connected(game.bulletDamage): myBullet.bulletDamageSignal.connect(game.bulletDamage) game.add_child(myBullet) else: myBullet=bulletArray.pop_back() bulletArray.push_front(myBullet) return myBullet func makebullet(targetPosition,speed) -> void: print("make a bullet") print("bullets created: "+str(bulletArray.size())) var myBullet:Bullet = bulletFactory() myBullet.transform=targetPosition myBullet.setSpeed(speed) myBullet.set_process(true)