You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
	
	
		
			
				
					
						
							|  |  |  | 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 |