Files
fps_project_1/scripts/room_manager.gd

88 lines
2.1 KiB
GDScript

extends Node
@export_group("Main")
@export var room_lockdown : bool = false
@export var number_of_enemies : int = 20
@export var spawnable_enemies = preload("res://assets/spider2.tscn")
@export_group("Key")
@export var key_drop : bool = false
@export_enum("Silver", "Gold", "Special") var key_type: int
@export var special_key_name : String
@export_group("Item Drops")
@export var number_of_drops = 5
var enemies = []
var doors = []
var room_checks = []
var enemy_spawners = []
var number_enemies : int
var rot_amount : float
# Called when the node enters the scene tree for the first time.
func _ready():
SignalBus.enemy_killed.connect(enemy_in_room_killed)
SignalBus.game_loaded.connect(assign_elements)
assign_elements()
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
pass
func assign_elements():
for i in self.get_children():
if i is Enemy:
enemies.append(i)
if i.is_in_group("door"):
doors.append(i)
if i.is_in_group("room_check"):
room_checks.append(i)
i.room_entered.connect(room_entered)
i.room_exited.connect(room_exited)
if i is EnemySpawner:
enemy_spawners.append(i)
if enemy_spawners.size() > 0:
spawn_enemies()
func enemy_in_room_killed():
var enemy_count = 0
for i in self.get_children():
if i.is_in_group("enemy") and i.health > 0:
enemy_count += 1
if enemy_count <= 0:
if room_lockdown:
room_lockdown = false
for i in doors:
if !i.door_open:
i.open()
func room_entered():
if room_lockdown:
for i in doors:
if i.door_open:
i.close()
func room_exited():
if room_lockdown:
for i in doors:
if !i.door_open:
i.open()
func spawn_enemies():
while number_of_enemies >= 0:
number_of_enemies -= 1
var random_spawner = enemy_spawners.pick_random()
var spawn_offset = random_spawner.random_box_pos()
var set_pos = random_spawner.global_position + spawn_offset
var enemy = spawnable_enemies.instantiate() #turn into an array of available enemies later
add_child(enemy)
enemy.global_position = set_pos
await number_enemies == 0
for i in self.get_children():
if i is Enemy:
enemies.append(i)