extends Node @export_group("Main") @export var room_lockdown : bool = false @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 ammo_drop_enabled = true @export var stamina_drop_enabled = true @export var health_drop_enabled = true @export var money_drop_enabled = true var enemies = [] var doors = [] var room_checks = [] 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) # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta): if GameGlobals.game_loaded: if enemies.size() > 0: #calculate move position for each child for i in enemies: if i.player_in_view == true: #by number of minions determine the amount they should rotate around the player to be evenly distributed number_enemies = enemies.size() #return current array index var enemy_rot_amount = enemies.find(i) * deg_to_rad(360 / number_enemies) var player_pos = i.player.global_transform.origin var enemy_pos = player_pos + Vector3(4,0,0) var nav_pos : Vector3 nav_pos.x = player_pos.x + (enemy_pos.x-player_pos.x)*cos(enemy_rot_amount) - (enemy_pos.z-player_pos.z)*sin(enemy_rot_amount) nav_pos.z = player_pos.z + (enemy_pos.x-player_pos.x)*sin(enemy_rot_amount) - (enemy_pos.z-player_pos.z)*cos(enemy_rot_amount) i.nav_agent.set_target_position(nav_pos) var next_nav_point = i.nav_agent.get_next_path_position() i.hive_velocity = (next_nav_point - i.global_transform.origin).normalized() * i.SPEED elif i.player_in_view != true and i.player_last_seen != null: i.nav_agent.set_target_position(i.player_last_seen) var next_nav_point = i.nav_agent.get_next_path_position() i.hive_velocity = (next_nav_point - i.global_transform.origin).normalized() * i.SPEED # loot on last enemy if enemies.size() == 1: for i in enemies: i.loot_amount = 20 #assign loot to the last enemy drop from this section i.last_enemy = true else: enemy_in_room_killed() func assign_elements(): for i in self.get_children(): if i.is_in_group("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) print("ENEMIES IN ROOM - ",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()