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.
41 lines
1.4 KiB
GDScript
41 lines
1.4 KiB
GDScript
extends Node3D
|
|
class_name AIManager
|
|
|
|
var tick_time: float = 1
|
|
var tick_time_left: float = 1
|
|
var role_num_1: int = 2 #近战
|
|
var role_num_2: int = 1 #刺客
|
|
var role_num_3: int = 2 #远程
|
|
|
|
|
|
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 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 |