class_name SceneManager extends Node2D const BulletScn = preload("res://scenes/bullet.tscn") @onready var triggers: Node2D = $"../triggers" @onready var coins: Node = $"../coins" @onready var enemies: Node = $"../Enemies" var bullets: Array[Bullet] = [] const MAX_BULLETS = 10 var current_bullet = 0 func _ready() -> void: if triggers: for obj in triggers.get_children(): if obj is Trigger: obj.areaTriggerSignal.connect(Gamecontroller._on_area_2d_area_trigger_signal) if coins: updateCoins() if enemies: updateEnemies() Gamecontroller.destroySignal.connect(destroy) Gamecontroller.levelChangeSignal.connect(changeScene) func updateEnemies(): for obj in enemies.get_children(): if obj is Slime: if !obj.slimeAttacked.is_connected(Gamecontroller.playerAttacked): obj.slimeAttacked.connect(Gamecontroller.playerAttacked) func updateCoins(): var coinCount: int = 0 for obj in coins.get_children(): if obj is Coin: if not obj.coin_collected.is_connected(Gamecontroller.coin_collected): obj.coin_collected.connect(Gamecontroller.coin_collected) # connect tree exit if not obj.tree_exited.is_connected(updateCoins): obj.tree_exited.connect(updateCoins) coinCount += 1 Gamecontroller.totalCoinCount(coinCount) # makes and recycles bullets func bulletFactory() -> Bullet: if len(bullets) < MAX_BULLETS: # create new var b = BulletScn.instantiate() b.bulletDamageSignal.connect(Gamecontroller.bulletDamage) add_child(b) bullets.append(b) return b else: # recycle var i = current_bullet current_bullet = (current_bullet + 1) % MAX_BULLETS bullets[i].visible = true return bullets[i] func destroy(body): body.queue_free() func makeBullet(pos: Transform2D, dir: int) -> Node2D: var b = bulletFactory() #b.position = pos.get_origin() b.transform = pos b.setSpeed(dir * 700) return b func changeScene(level: String): get_tree().call_deferred("change_scene_to_file", level)