class_name SceneManager extends Node2D var bulletArray =[] var totalAllowedBullets = 7 var bullet = preload("res://scenes/bullet.tscn") var slime = preload("res://scenes/slime.tscn") @onready var triggers: Node2D = $"../triggers" @onready var coins: Node2D = $"../coins" @onready var enemies: Node2D = $"../enemies" @onready var player: Player = $"../Player" # Called when the node enters the scene tree for the first time. func _ready() -> void: var loadObject = Gamecontroller.reset() print("LOAD OBECT") print(loadObject) loadSceneInfo(loadObject) if triggers: for obj in triggers.get_children(): if obj is Trigger: obj.areaTriggerSignal.connect(Gamecontroller._on_trigger) if coins: updateCoins() if enemies: updateEnemies() Gamecontroller.destroySignal.connect(destroy) Gamecontroller.levelChangeSignal.connect(changeScene) Gamecontroller.playerDamageSignal.connect(player.handle_damage) Gamecontroller.playerDeathSignal.connect(player.handle_death) player.playerDeathCompleteSignal.connect(Gamecontroller.deathComplete) func updateEnemies(): for obj in enemies.get_children(): if obj is Slime: if not obj.playerDamageSignal.is_connected(Gamecontroller.playerAttacked): obj.playerDamageSignal.connect(Gamecontroller.playerAttacked) Gamecontroller.addEnemyToLevel(obj) func updateCoins(): var coinCount = 0 for obj in coins.get_children(): if obj is Coin: if not obj.coinCollectedSignal.is_connected(Gamecontroller.coinCollected): obj.coinCollectedSignal.connect(Gamecontroller.coinCollected) #connect tree exit if not obj.tree_exited.is_connected(updateCoins): obj.tree_exited.connect(updateCoins) coinCount +=1 Gamecontroller.totalCoinCount(coinCount) # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: pass # makes and recycles bullets func bulletFactory(): var myBullet:Bullet if bulletArray.size() < totalAllowedBullets: #make a new bullet myBullet = bullet.instantiate() myBullet.bulletDamageSignal.connect(Gamecontroller.bulletDamage) owner.add_child(myBullet) else: myBullet = bulletArray.pop_back() bulletArray.push_front(myBullet) return myBullet func makeBullet(position, speed): var someBullet = bulletFactory() someBullet.setSpeed(speed) # postition the bullet someBullet.transform = position func destroy(body): body.queue_free() func changeScene(level): get_tree().call_deferred("change_scene_to_file", level) func loadSceneInfo(loadObject)->void: print("make the scene") if loadObject.size()<1: print("bailing out") return if enemies: for obj in enemies.get_children(): if obj is Slime: obj.queue_free() #build and place save game badguys var enemiesList = loadObject["enemies"] for key in enemiesList: print(enemiesList[key]) var badguy = slime.instantiate() enemies.add_child(badguy) badguy.global_position = enemiesList[key]["global_position"]