AprilGameExample/Scripts/scene_manager.gd

53 lines
1.6 KiB
GDScript3
Raw Normal View History

2026-04-28 01:08:43 +00:00
class_name SceneManager extends Node2D
@onready var crates: Node2D = $"../Crates"
var grenade = preload("res://Scenes/grenade.tscn")
2026-05-26 01:03:43 +00:00
@onready var enemies: Node2D = $"../Enemies"
2026-04-28 01:08:43 +00:00
func _ready() -> void:
2026-05-26 01:03:43 +00:00
GameController.reset()
2026-04-28 01:08:43 +00:00
print("Scene manager is ready!")
2026-05-26 01:03:43 +00:00
GameController.destroySignal.connect(destroy)
GameController.levelChangeSignal.connect(changeScene)
2026-04-28 01:08:43 +00:00
buildLevel()
func destroy(body)->void:
if body is Crate:
body.queue_free()
func buildLevel()->void:
updateCrates()
2026-05-26 01:03:43 +00:00
if enemies:
updateEnemies()
func updateEnemies()->void:
var totalEnemies = 0
for obj in enemies.get_children():
if obj is Slime:
totalEnemies +=1
#hook up signals
if not obj.slimeDamageSignal.is_connected(GameController._on_slime_damage):
obj.slimeDamageSignal.connect(GameController._on_slime_damage)
GameController.addEnemyToLevel(obj)
2026-04-28 01:08:43 +00:00
func updateCrates()->void:
#is there a crate holder?
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
print("Number of crates: "+str(_crateTotal))
2026-05-26 01:03:43 +00:00
GameController.totalCrates(_crateTotal)
func makeGrenade(_grenadePosition, _grenadeDirection)->void:
print("SM wants to make a grenade")
var myGrenade:Grenade = grenade.instantiate()
owner.add_child(myGrenade)
myGrenade.transform = _grenadePosition
myGrenade.apply_central_impulse(Vector2(_grenadeDirection,-1)*200)
2026-05-26 01:03:43 +00:00
func changeScene(level)->void:
print("SM wants to change scene "+level)
get_tree().call_deferred("change_scene_to_file",level)