Paths

Path Constraints

Připoutá dynamic těleso k hotové cestě ve world space nebo relativně k jinému tělesu.

PathConstraint drží Body B na křivce patřící Body A. jolt_path_world() používá jako Body A pevný world; počáteční fraction tělesa vybere podle nejbližšího bodu cesty.

World-space cesta#

GML
var cart = jolt_box_create_dynamic(-12, 0, 2, 1, 1, 1, { mass: 2 });
var rail = jolt_path_world(cart, track, {
    rotation_mode: JOLT_PATH_ROTATION_FOLLOW,
    friction_force: 8
});

Cesta relativní k tělesu#

GML
var rail = jolt_path(moving_base, cart, track, {
    collision: false,
    rotation_mode: JOLT_PATH_ROTATION_FREE
});

Obě tělesa musí být různá, aktivní a patřit do výchozího worldu. Cesta leží v lokálním frame Body A a pohybuje se s ním.

Options#

OptionVýchozíVýznam
rotation_modeJOLT_PATH_ROTATION_FREEPovolená rotace Body B vzhledem k path frame.
friction_force0Maximální nezáporná síla brzdící pohyb po cestě.
collisiontruePouze mezi tělesy: zda A a B mohou kolidovat.
enabledtruePočáteční stav constraintu.
motor_max_force100Maximální síla motoru.
motor_velocitynenastavenoZapne velocity motor.
motor_positionnenastavenoZapne position motor.
motor_spring_frequency / damping2 / 1Spring nastavení position motoru.

Režimy rotace#

Runtime stav#

GML
rail.get_fraction()
rail.get_path_distance()
rail.get_speed()
rail.get_direction()
rail.get_impulse()
rail.get_rotation_mode()
rail.get_friction_force()

get_speed() vrací relativní velocity připojených bodů promítnutou na world-space tangentu cesty. get_direction() vrací tuto tangentu.

Tření za běhu#

GML
if (!rail.set_friction_force(20)) {
    show_debug_message(jolt_get_error_message());
}
var friction = rail.get_friction_force();

set_friction_force(force) přijímá konečný nezáporný limit síly podél cesty a vrací bool úspěšnost. Nula toto tření vypne. Jde o odpor PathConstraintu, nikoliv materiálový koeficient tělesa. get_friction_force() může vrátit nulu jako platné nastavení i při chybě, proto podle potřeby ověřte chybový kanál.

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
JoltConstraint.get_directionJoltConstraint.get_direction()Pouze Path: jednotková světová tečna {x, y, z}; undefined při chybě.
JoltConstraint.get_fractionJoltConstraint.get_fraction()Pouze Path: normalizovaný parametr cesty, 0 při chybě. Není to vzdálenost v metrech.
JoltConstraint.get_friction_forceJoltConstraint.get_friction_force()Pouze Path: konečný nezáporný odpor v N. Setter Boolean, getter číslo nebo 0 při chybě.
JoltConstraint.get_impulseJoltConstraint.get_impulse()Poslední solver impulz: Hinge motor/Cone v N·m·s; Distance/Slider motor/Path motor/Point/Pulley v N·s. 0 při chybě/nepodporovaném typu, ne důkaz nulového zatížení.
JoltConstraint.get_path_distanceJoltConstraint.get_path_distance()Pouze Path: vzdálenost podél cesty v m, 0 při chybě.
JoltConstraint.get_rotation_modeJoltConstraint.get_rotation_mode()Pouze Path: JOLT_PATH_ROTATION_* režim. Setter Boolean, getter enum, při chybě FREE; čti chybový stav.
JoltConstraint.get_speedJoltConstraint.get_speed()Pouze Path: relativní rychlost podél tečny v m/s vůči hostu cesty; 0 při chybě.
JoltConstraint.set_friction_forceJoltConstraint.set_friction_force(force)Pouze Path: konečný nezáporný odpor v N. Setter Boolean, getter číslo nebo 0 při chybě.
JoltConstraint.set_rotation_modeJoltConstraint.set_rotation_mode(mode)Pouze Path: JOLT_PATH_ROTATION_* režim. Setter Boolean, getter enum, při chybě FREE; čti chybový stav.