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.

43 lines
1.4 KiB
GDScript

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