extends Node @onready var crates: Node2D = $"../crates" @onready var triggers: Node2D = $"../triggers" @onready var coins: Node2D = $"../coins" @onready var enemies: Node2D = $"../enemies" @onready var player: Player = $"../CharacterBody2D" var bullet = preload("res://scenes/bullet.tscn") var bulletArray=[] var totalAllowedBullets = 7 func buildLevel()->void: Gamecontroller.reset() #count crates # tell the game controller Gamecontroller.numberOfCrates( countCrates() ) if triggers: for obj in triggers.get_children(): if obj is Trigger: obj.triggerFired.connect(Gamecontroller._on_trigger_fired) # coins if coins: for obj in coins.get_children(): if obj is Coin: obj.coinCollectedSignal.connect(Gamecontroller._on_coin_collected) # enemies if enemies: for obj in enemies.get_children(): if obj is Slime: obj.playerDamageSignal.connect(Gamecontroller._on_player_damage) #Wire up signals Gamecontroller.levelCompleteSignal.connect(loadLevel) Gamecontroller.destroySignal.connect(destroy) Gamecontroller.playerDamage.connect(player._player_damage) Gamecontroller.playerDeath.connect(player._player_death) #player connection player.deathComplete.connect(Gamecontroller.death) func countCrates()->int: var totalCrates = 0 for obj in crates.get_children(): if obj is Crate: totalCrates +=1 return totalCrates func _ready() -> void: buildLevel() func bulletFactory(): var mybullet if bulletArray.size() < totalAllowedBullets: #new bullet mybullet = bullet.instantiate() mybullet.connect("bulletHit", Gamecontroller.bulletDamage) owner.add_child(mybullet) else: #recycled bullet mybullet = bulletArray.pop_back() bulletArray.push_front(mybullet) return mybullet func makeBullet(position, speed): print("Scene manager makes a bullet") var mybullet = bulletFactory() mybullet.setSpeed(speed) mybullet.transform = position func loadLevel(level): get_tree().call_deferred("change_scene_to_file", level) func destroy(body): if body is Crate: Gamecontroller.numberOfCrates( countCrates() -1 ) body.queue_free()