extends Node3D class_name SoulAI @export var follow_speed_curve: Curve @export var follow_dist_max: int = 5 @onready var character: Character = (get_owner() as Character) @onready var status: Status = (%Status as Status) class SkillOrder: var skill_name: String var cast_dir: Vector2 var target: int var skill_order_list: Array[SkillOrder] = [] var owner_character: Character func _process(delta) -> void: owner_character = Global.character_mgr.get_character(status.owner_id) if not owner_character: Global.character_mgr.destroy_character(character.id()) return update_skill() update_move() func update_skill() -> void: pass func update_move() -> void: if status.is_skill_running: return var owner_pos: Vector3 = owner_character.pos() var radius_add: float = owner_character.radius() + character.radius() var target_pos: Vector3 = owner_pos + Vector3(-1 if owner_character.is_right() else 1, 0, 0) * radius_add * 1.1 var dir: Vector3 = target_pos - character.pos() var dir_2d: Vector2 = Vector2(dir.x, dir.z) var dist: float = dir_2d.length() if dist > follow_dist_max: character.set_pos(target_pos) return var dist_rate = clamp(dist / follow_dist_max, 0, 1) status.speed_up_rate = follow_speed_curve.sample(dist_rate) character.move_to(dir_2d)