class_name SceneManager extends Node2D var bullet = preload("res://scenes/bullet.tscn") var grenade = preload("res://scenes/grenade.tscn") @onready var coins = $"../Coins" @onready var enemies = $"../Enemies" @onready var game = $".." var bulletArray = [] var totalAllowedBullets = 7 # Called when the node enters the scene tree for the first time. func _ready(): buildLevel() func buildLevel()->void: # hook up coins var totalCoins = 0 if coins: for obj in coins.get_children(): if obj is Coin: totalCoins +=1 #hook up a listener at the game controller obj.coinCollectedSignal.connect(game._on_coin_collected) #tell GC how many coins total game.totalCoins(totalCoins) var totalEnemies = 0 if enemies: for obj in enemies.get_children(): if obj is Slime: totalEnemies +=1 #hook up a listener at game controller obj.slimeDamageSignal.connect(game._on_slime_damage) pass game.totalEnemies(totalEnemies) # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta): pass func bulletFactory()->Bullet: var myBullet:Bullet if bulletArray.size() < totalAllowedBullets: #make a new bullet myBullet = bullet.instantiate() game.add_child(myBullet) else: myBullet = bulletArray.pop_back() bulletArray.push_front(myBullet) return myBullet func makeBullet(_bulletPosition, _bulletSpeed)->void: print("make a bullet, put it in the world") var myBullet = bulletFactory() myBullet.transform = _bulletPosition myBullet.setSpeed(_bulletSpeed) func makeGrenade(_grenadePosition, _grenadeDirection)->void: print("SM make a grenade") var myGrenade:Grenade = grenade.instantiate() game.add_child(myGrenade) myGrenade.apply_central_impulse(Vector2(_grenadeDirection, -1)*200) myGrenade.transform = _grenadePosition