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.

48 lines
1.4 KiB
GDScript

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)