55 lines
1.5 KiB
GDScript
55 lines
1.5 KiB
GDScript
class_name SceneManager extends Node2D
|
|
|
|
@onready var crates: Node2D = $"../crates"
|
|
var grenade = preload("res://scenes/grenade.tscn")
|
|
@onready var enemies = $"../Enemies"
|
|
@onready var player = $"../player"
|
|
|
|
func _ready() -> void:
|
|
print("scene manager is ready")
|
|
GameController.destroy.connect(destroy)
|
|
GameController.level_change_signal.connect(change_scene)
|
|
build_level()
|
|
|
|
func _process(delta: float) -> void:
|
|
pass
|
|
|
|
func build_level() -> void:
|
|
update_crates()
|
|
if enemies:
|
|
update_enemies()
|
|
if player:
|
|
GameController.player = player
|
|
|
|
func update_enemies():
|
|
for enemy in enemies.get_children():
|
|
if not enemy.slime_damage.is_connected(GameController._on_slime_damage):
|
|
enemy.slime_damage.connect(GameController._on_slime_damage)
|
|
enemy.slime_struck.connect(GameController._on_slime_struck)
|
|
GameController.add_enemy(enemy)
|
|
|
|
func change_scene(level):
|
|
print("changing scene to ", level)
|
|
get_tree().call_deferred("change_scene_to_file", level)
|
|
|
|
func make_grenade(grenade_pos: Transform2D, grenade_dir: int) -> void:
|
|
print("scene manager making grenade")
|
|
var g:Grenade = grenade.instantiate()
|
|
g.transform = grenade_pos
|
|
owner.add_child(g)
|
|
g.apply_central_impulse(Vector2(grenade_dir, 1)*400)
|
|
|
|
func update_crates() -> void:
|
|
var crate_total:int = 0
|
|
if crates:
|
|
for obj in crates.get_children():
|
|
if obj is BrownBox:
|
|
if not obj.tree_exited.is_connected(update_crates):
|
|
obj.tree_exited.connect(update_crates)
|
|
crate_total += 1
|
|
GameController.set_crate_num(crate_total)
|
|
|
|
func destroy(body):
|
|
if body is BrownBox:
|
|
body.queue_free()
|