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#
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#
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#
| Option | Výchozí | Význam |
|---|---|---|
| rotation_mode | JOLT_PATH_ROTATION_FREE | Povolená rotace Body B vzhledem k path frame. |
| friction_force | 0 | Maximální nezáporná síla brzdící pohyb po cestě. |
| collision | true | Pouze mezi tělesy: zda A a B mohou kolidovat. |
| enabled | true | Počáteční stav constraintu. |
| motor_max_force | 100 | Maximální síla motoru. |
| motor_velocity | nenastaveno | Zapne velocity motor. |
| motor_position | nenastaveno | Zapne position motor. |
| motor_spring_frequency / damping | 2 / 1 | Spring nastavení position motoru. |
Režimy rotace#
Runtime stav#
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#
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ík | Signatura | Kontrakt operace |
|---|---|---|
| JoltConstraint.get_direction | JoltConstraint.get_direction() | Pouze Path: jednotková světová tečna {x, y, z}; undefined při chybě. |
| JoltConstraint.get_fraction | JoltConstraint.get_fraction() | Pouze Path: normalizovaný parametr cesty, 0 při chybě. Není to vzdálenost v metrech. |
| JoltConstraint.get_friction_force | JoltConstraint.get_friction_force() | Pouze Path: konečný nezáporný odpor v N. Setter Boolean, getter číslo nebo 0 při chybě. |
| JoltConstraint.get_impulse | JoltConstraint.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_distance | JoltConstraint.get_path_distance() | Pouze Path: vzdálenost podél cesty v m, 0 při chybě. |
| JoltConstraint.get_rotation_mode | JoltConstraint.get_rotation_mode() | Pouze Path: JOLT_PATH_ROTATION_* režim. Setter Boolean, getter enum, při chybě FREE; čti chybový stav. |
| JoltConstraint.get_speed | JoltConstraint.get_speed() | Pouze Path: relativní rychlost podél tečny v m/s vůči hostu cesty; 0 při chybě. |
| JoltConstraint.set_friction_force | JoltConstraint.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_mode | JoltConstraint.set_rotation_mode(mode) | Pouze Path: JOLT_PATH_ROTATION_* režim. Setter Boolean, getter enum, při chybě FREE; čti chybový stav. |