extends Node2D @onready var game: Node2D = $".." @onready var crates: Node2D = $"../Crates" @onready var player: CharacterBody2D = $"../Player" var bullet = preload("res://scenes/bullet.tscn") var bulletArray:Array[Bullet] = [] var totalAllowedBullets:int = 7 # Called when the node enters the scene tree for the first time. func _ready() -> void: #wire up view player.forcePushSignal.connect(push) player.shootSignal.connect(makeBullet) #wire up gamecontroller game.destroySignal.connect(destroy) game.levelChangeSignal.connect(changeScene) game.fanUpSignal.connect(push) buildLevel() func buildLevel()->void: updateCrates() func updateCrates()->void: var _crateTotal:int = 0 if crates: for obj in crates.get_children(): if obj is Crate: if not obj.tree_exited.is_connected(updateCrates): obj.tree_exited.connect(updateCrates) _crateTotal +=1 game.crateTotal(_crateTotal) #applies impulse to rigidbodies func push(body, direction)->void: body.apply_central_impulse(direction) func destroy(body)->void: body.queue_free() func changeScene(level)->void: get_tree().call_deferred("change_scene_to_file",level) func bulletFactory()->Bullet : var myBullet:Bullet #how many bullets have been made? if bulletArray.size() <= totalAllowedBullets: myBullet = bullet.instantiate() if not myBullet.bulletDamageSignal.is_connected(game.bulletDamage): myBullet.bulletDamageSignal.connect(game.bulletDamage) add_sibling(myBullet) else: myBullet = bulletArray.pop_back() bulletArray.push_front(myBullet) return myBullet func makeBullet(targetPosition:Transform2D, speed:int)->void: var myBullet:Bullet = bulletFactory() myBullet.transform = targetPosition myBullet.setSpeed(speed) myBullet.set_process(true)