|  |  |  | 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 | 
					
						
							|  |  |  |     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 |