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.
21 lines
731 B
GDScript
21 lines
731 B
GDScript
extends ActionWithTarget
|
|
class_name ActionMoveTo
|
|
|
|
@export var dist_min: float = 0
|
|
@export var dist_max: float = 5
|
|
@export var offset: float = 0.1 #0为无偏差 1为偏差90度
|
|
|
|
|
|
func execute(character: Character, target: Character, blackboard: Blackboard) -> int:
|
|
var dir: Vector2 = target.pos2D() - character.pos2D()
|
|
var dist: float = dir.length()
|
|
if (dist > dist_min ) and (dist < dist_max):
|
|
character.move_stop()
|
|
return SUCCESS
|
|
var is_far: bool = dist >= dist_max
|
|
var to_dir: Vector2 = dir if is_far else -dir
|
|
var offset_deg: float = 90 * randf() * clamp(offset, 0, 1) * (1 if randf() < 0.5 else -1)
|
|
to_dir = to_dir.rotated(deg_to_rad(offset_deg))
|
|
character.move_to(dir if is_far else -dir)
|
|
return FAILURE
|