JulyGame/scripts/scene_manager.gd

72 lines
1.9 KiB
GDScript3
Raw Normal View History

2025-08-12 01:03:02 +00:00
class_name SceneManager extends Node2D
const BulletScn = preload("res://scenes/bullet.tscn")
2025-08-19 01:05:53 +00:00
@onready var triggers: Node2D = $"../triggers"
2025-08-26 01:07:20 +00:00
@onready var coins: Node = $"../coins"
2025-09-09 00:56:39 +00:00
@onready var enemies: Node = $"../Enemies"
2025-08-12 01:03:02 +00:00
var bullets: Array[Bullet] = []
const MAX_BULLETS = 10
var current_bullet = 0
2025-08-19 01:05:53 +00:00
func _ready() -> void:
if triggers:
for obj in triggers.get_children():
if obj is Trigger:
2025-09-09 00:56:39 +00:00
obj.areaTriggerSignal.connect(Gamecontroller._on_area_2d_area_trigger_signal)
2025-08-26 01:07:20 +00:00
if coins:
2025-09-09 00:56:39 +00:00
updateCoins()
if enemies:
updateEnemies()
Gamecontroller.destroySignal.connect(destroy)
Gamecontroller.levelChangeSignal.connect(changeScene)
func updateEnemies():
for obj in enemies.get_children():
if obj is Slime:
if !obj.slimeAttacked.is_connected(Gamecontroller.playerAttacked):
obj.slimeAttacked.connect(Gamecontroller.playerAttacked)
func updateCoins():
var coinCount: int = 0
for obj in coins.get_children():
if obj is Coin:
if not obj.coin_collected.is_connected(Gamecontroller.coin_collected):
obj.coin_collected.connect(Gamecontroller.coin_collected)
# connect tree exit
if not obj.tree_exited.is_connected(updateCoins):
obj.tree_exited.connect(updateCoins)
coinCount += 1
Gamecontroller.totalCoinCount(coinCount)
2025-08-19 01:05:53 +00:00
2025-08-12 01:03:02 +00:00
# makes and recycles bullets
func bulletFactory() -> Bullet:
if len(bullets) < MAX_BULLETS:
# create new
var b = BulletScn.instantiate()
2025-09-09 00:56:39 +00:00
b.bulletDamageSignal.connect(Gamecontroller.bulletDamage)
2025-08-12 01:03:02 +00:00
add_child(b)
bullets.append(b)
return b
else:
# recycle
var i = current_bullet
current_bullet = (current_bullet + 1) % MAX_BULLETS
bullets[i].visible = true
return bullets[i]
2025-09-09 00:56:39 +00:00
func destroy(body):
body.queue_free()
2025-08-12 01:03:02 +00:00
func makeBullet(pos: Transform2D, dir: int) -> Node2D:
var b = bulletFactory()
#b.position = pos.get_origin()
b.transform = pos
b.setSpeed(dir * 700)
return b
2025-09-09 00:56:39 +00:00
func changeScene(level: String):
get_tree().call_deferred("change_scene_to_file", level)