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 # 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: # Reset controller timer Gamecontroller.reset() # tell the game controller Gamecontroller.numberOfCrates(countCrates()) # 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) # Connect trigger signals if triggers: for obj in triggers.get_children(): if obj is Trigger: obj.triggerFired.connect(Gamecontroller._on_trigger_fired) # Connect coin signals if coins: for obj in coins.get_children(): if obj is Coin: obj.coinCollectedSignal.connect(Gamecontroller._on_coin_collected) # Connect enemy signals if enemies: for obj in enemies.get_children(): if obj is Slime: obj.playerDamageSignal.connect(Gamecontroller._on_player_damage) func countCrates()->int: # count crates var totalCrates = 0 for obj in crates.get_children(): if obj is Crate: totalCrates += 1 return totalCrates 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 make 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()