Paths

Hladké cesty

Sestaví kubickou Hermite křivku a poskytne sampling podle vzdálenosti.

build_smooth() doplní tangenty, vytvoří nativní PathConstraintPathHermite, přenáší stabilní normal podél křivky, aplikuje roll jednotlivých bodů a připraví přibližnou tabulku délky oblouku.

Syntaxe#

Syntax
track.build_smooth(smoothness=1.0);

Požadavky#

VlastnostPožadavek
smoothnessKonečné číslo větší než 0 a nejvýše 4.
otevřená cestaNejméně 2 control points.
uzavřená cestaNejméně 3 control points.
segmentySousední pozice se musí lišit.

Pravidlo automatických tangent#

  • Vnitřní body otevřené cesty a všechny body loopu používají 0.5 × smoothness × (next − previous).
  • Koncové body otevřené cesty používají smoothness násobené sousedním segmentem.
  • Tangenty z add_point_tangent() zůstávají beze změny.

Sampling podle délky oblouku#

GML
var midpoint = track.get_position(0.5);
var direction = track.get_direction(0.5);

var distance = track.get_length() * 0.25;
var position = track.get_position_at_distance(distance);
var tangent = track.get_direction_at_distance(distance);

Veřejná fraction představuje normalizovanou přibližnou délku oblouku, ne surový Hermite parametr segmentu. Hodnota 0.5 je proto fyzický střed cesty.

Frame a prostorové dotazy#

GML
var euler = track.get_rotation(0.5);
var quaternion = track.get_rotation_quaternion(0.5);
var nearest = track.get_closest_point(x, y, z);
var bounds = track.get_bounds();
Closest-point fieldVýznam
positionNejbližší Hermite pozice.
distanceWorld-space vzdálenost od dotazu.
fractionNormalizovaná část délky.
path_distanceVzdálenost podél cesty.
directionTangenta v nejbližší pozici.

Ověřené kontrakty operací#

Následující kontrakty rozlišují jednotky, návratové hodnoty, chyby a životnost podle aktuální implementace. Nevynechávej kontrolu výsledku: false, 0 a undefined mohou mít u různých metod odlišný význam.

Symbol / vlastníkSignaturaKontrakt operace
JoltPath.build_smoothJoltPath.build_smooth(smoothness = 1.0)Boolean; smoothness(0, 4] default 1, alespoň2 body otevřené/3 loop. Dopočítá neexplicitní tangenty a vytvoří nový native resource. Neplatný build neposkytuje vzorkování.
JoltPath.get_boundsJoltPath.get_bounds()Po build: délka m (chyba0), bounds kopie min_x/y/z, max_x/y/z (chyba undefined) v souřadnicích path.
JoltPath.get_closest_pointJoltPath.get_closest_point(x, y, z)XYZ v souřadnicích path, po build; snapshot {position, distance, fraction, path_distance, direction}. Distance od dotazu a path_distance podél křivky v m; chyba undefined.
JoltPath.get_directionJoltPath.get_direction(fraction)Vyžaduje aktuální build; fraction0..1 nebo konečná vzdálenost m. Vrací {x, y, z} pozice m / jednotková tečna v souřadnicích path, undefined při odmítnutí.
JoltPath.get_direction_at_distanceJoltPath.get_direction_at_distance(distance)Vyžaduje aktuální build; fraction0..1 nebo konečná vzdálenost m. Vrací {x, y, z} pozice m / jednotková tečna v souřadnicích path, undefined při odmítnutí.
JoltPath.get_lengthJoltPath.get_length()Po build: délka m (chyba0), bounds kopie min_x/y/z, max_x/y/z (chyba undefined) v souřadnicích path.
JoltPath.get_positionJoltPath.get_position(fraction)Vyžaduje aktuální build; fraction0..1 nebo konečná vzdálenost m. Vrací {x, y, z} pozice m / jednotková tečna v souřadnicích path, undefined při odmítnutí.
JoltPath.get_position_at_distanceJoltPath.get_position_at_distance(distance)Vyžaduje aktuální build; fraction0..1 nebo konečná vzdálenost m. Vrací {x, y, z} pozice m / jednotková tečna v souřadnicích path, undefined při odmítnutí.
JoltPath.get_rotationJoltPath.get_rotation(fraction)Fraction0..1 po build; quaternion XYZW pouze u get_rotation_quaternion. get_rotation i get_rotation_euler vrací Euler XYZ°! undefined při chybě.
JoltPath.get_rotation_eulerJoltPath.get_rotation_euler(fraction)Fraction0..1 po build; quaternion XYZW pouze u get_rotation_quaternion. get_rotation i get_rotation_euler vrací Euler XYZ°! undefined při chybě.
JoltPath.get_rotation_quaternionJoltPath.get_rotation_quaternion(fraction)Fraction0..1 po build; quaternion XYZW pouze u get_rotation_quaternion. get_rotation i get_rotation_euler vrací Euler XYZ°! undefined při chybě.