extends Node3D class_name AIManager var tick_time: float = 1 var tick_time_left: float = 1 func _ready(): pass func _process(delta) -> void: tick_time_left -= delta if tick_time_left <= 0: tick_time_left = tick_time tick_time_left = 0 if tick_time_left > 0: return return var player: Character = Global.character_mgr.get_player() if not player: return var enemy_list: Array[Character] = Global.character_mgr.get_enemy_list(player.id()) if not enemy_list: return var pos_player: Vector2 = player.pos2D() enemy_list.sort_custom(func(a: Character, b: Character): return a.pos2D().distance_squared_to(pos_player) < b.pos2D().distance_squared_to(pos_player)) var count: int = enemy_list.size() var role_num_1: int = max(int(count*0.2), 2) #近战 var role_num_2: int = max(int(count*0.1), 1) #刺客 var role_num_3: int = max(int(count*0.2), 2) #远程 var index: int = 0 for enemy in enemy_list: if enemy.get_status("is_stagger") or enemy.get_status("is_stun"): enemy.set_status("ai_role", Enum.EAIRoleType.None) continue if index < role_num_1: enemy.set_status("ai_role", Enum.EAIRoleType.Saber) elif index < role_num_1 + role_num_2: enemy.set_status("ai_role", Enum.EAIRoleType.Assassin) elif index < role_num_1 + role_num_2 + role_num_3: enemy.set_status("ai_role", Enum.EAIRoleType.Caster) else: enemy.set_status("ai_role", Enum.EAIRoleType.None) index += 1