2025-08-12 01:03:09 +00:00
|
|
|
class_name SceneManager extends Node2D
|
|
|
|
|
|
|
|
const bullet_scene = preload("res://scenes/bullet.tscn")
|
|
|
|
|
2025-09-09 00:54:15 +00:00
|
|
|
var game := Gamecontroller
|
2025-08-19 01:06:02 +00:00
|
|
|
@onready var triggers: Node2D = $"../triggers"
|
2025-08-26 01:06:35 +00:00
|
|
|
@onready var coins: Node2D = $"../coins"
|
2025-09-09 00:54:15 +00:00
|
|
|
@onready var ennemies: Node2D = $"../ennemies"
|
2025-08-26 01:06:35 +00:00
|
|
|
|
2025-08-12 01:03:09 +00:00
|
|
|
var MAX_BULLET := 50
|
|
|
|
var available_bullets = []
|
|
|
|
|
2025-08-26 01:06:35 +00:00
|
|
|
var score := 0
|
|
|
|
|
2025-08-12 01:03:09 +00:00
|
|
|
func _ready() -> void:
|
2025-09-09 00:54:15 +00:00
|
|
|
|
2025-08-12 01:03:09 +00:00
|
|
|
for i in range(MAX_BULLET):
|
|
|
|
var new_bullet = bullet_scene.instantiate()
|
|
|
|
new_bullet.bulletHitSignal.connect(game.onBulletHitSignal)
|
|
|
|
available_bullets.push_front(new_bullet)
|
2025-08-19 01:06:02 +00:00
|
|
|
|
|
|
|
if triggers:
|
|
|
|
for trig in triggers.get_children():
|
|
|
|
if trig is Trigger:
|
|
|
|
trig.areaTriggerSignal.connect(game._on_trigger)
|
2025-08-26 01:06:35 +00:00
|
|
|
|
2025-09-09 00:54:15 +00:00
|
|
|
if ennemies:
|
|
|
|
updateEnnemies()
|
|
|
|
|
2025-08-26 01:06:35 +00:00
|
|
|
if coins:
|
2025-09-09 00:54:15 +00:00
|
|
|
updateCoins()
|
|
|
|
|
|
|
|
game.destroySignal.connect(destroy)
|
|
|
|
game.levelChangeSignal.connect(changeScene)
|
|
|
|
|
|
|
|
func updateEnnemies():
|
|
|
|
print("pdate ennemies")
|
|
|
|
for ennemy in ennemies.get_children():
|
|
|
|
if ennemy is Slime:
|
|
|
|
if not ennemy.playerDamageSignal.is_connected(game.playerAttacked):
|
|
|
|
ennemy.playerDamageSignal.connect(game.playerAttacked)
|
|
|
|
|
|
|
|
func updateCoins():
|
|
|
|
var coinCount := 0
|
|
|
|
for coin in coins.get_children():
|
|
|
|
if coin is Coin:
|
|
|
|
coinCount += 1
|
|
|
|
if not coin.coinCollectedSignal.is_connected(game.onCoinCollected):
|
2025-08-26 01:06:35 +00:00
|
|
|
coin.coinCollectedSignal.connect(game.onCoinCollected)
|
2025-09-09 00:54:15 +00:00
|
|
|
if not coin.tree_exited.is_connected(updateCoins):
|
|
|
|
coin.tree_exited.connect(updateCoins)
|
|
|
|
game.setTotalCoinCount(coinCount)
|
2025-08-12 01:03:09 +00:00
|
|
|
|
|
|
|
func make_bullet(start_position: Transform2D, speed: int):
|
|
|
|
var new_bullet = bullet_factory(start_position, speed)
|
|
|
|
if new_bullet:
|
|
|
|
owner.add_child(new_bullet)
|
2025-08-26 01:06:35 +00:00
|
|
|
new_bullet.setSpeed(speed)
|
2025-08-12 01:03:09 +00:00
|
|
|
|
|
|
|
func reload_bullet(bullet: Bullet):
|
|
|
|
available_bullets.push(bullet)
|
|
|
|
|
|
|
|
func bullet_factory(start_position: Transform2D, speed: int) -> Bullet:
|
|
|
|
var shot_bullet = available_bullets.pop_back()
|
|
|
|
shot_bullet.global_transform = start_position
|
|
|
|
|
|
|
|
available_bullets.push_front(shot_bullet)
|
|
|
|
|
|
|
|
return shot_bullet
|
2025-09-09 00:54:15 +00:00
|
|
|
|
|
|
|
func destroy(body: Node2D):
|
|
|
|
body.queue_free()
|
|
|
|
|
|
|
|
|
|
|
|
func changeScene(level):
|
|
|
|
get_tree().call_deferred("change_scene_to_file", level)
|
|
|
|
|