Constraints
Slider Constraint
Omezí relativní pohyb na jedinou přímou world-space osu a uzamkne ostatní translace i veškerou relativní rotaci.
jolt_slider() propojí dvě různá managed tělesa; jolt_slider_world() připojí jedno managed těleso přímo k pevnému world body Jolt. Obě varianty vracejí stejné managed rozhraní JoltConstraint.
Syntaxe#
jolt_slider(body_a, body_b, anchor_x, anchor_y, anchor_z, axis_x, axis_y, axis_z, options=undefined)
jolt_slider_world(body, anchor_x, anchor_y, anchor_z, axis_x, axis_y, axis_z, options=undefined)Argumenty#
| Argument | Typ | Popis |
|---|---|---|
| body_a / body_b | JoltBody | Dvě různá živá tělesa v managed výchozím worldu. |
| body | JoltBody | Jediné živé těleso pro jolt_slider_world(). |
| anchor_x / anchor_y / anchor_z | Real | Společný world-space attachment point. |
| axis_x / axis_y / axis_z | Real | Konečná nenulová povolená osa translace; interně se normalizuje. |
| options | Struct nebo undefined | Volitelné limity, collision, stav, motor a pružina. |
Options#
| Pole | Výchozí | Popis |
|---|---|---|
| limits_min | -1000000 | Minimální position ve world units; musí být <= 0. |
| limits_max | 1000000 | Maximální position ve world units; musí být >= 0. |
| collision | true | Zda uživatelská tělesa mohou kolidovat; world varianta hodnotu ignoruje. |
| enabled | true | Počáteční stav solveru. |
| motor_max_force | 100 | Konečný nezáporný limit lineární force. |
| spring_frequency | 2 | Frequency pružiny position motoru; při vytvoření se použije jen tehdy, je-li pole přítomné. |
| spring_damping | 1 | Damping spojený se spring_frequency. |
| motor_velocity | nenastaveno | Počáteční target ve world units za sekundu; vybere velocity režim. |
| motor_position | nenastaveno | Počáteční target ve world units; vybere position režim. |
Metody#
| Metoda | Výsledek | Chování Slider |
|---|---|---|
| is_valid() | Boolean | Ověří managed wrapper i jeho native generační handle. |
| get_native_handle() | Real | Vrátí neprůhledný native handle, nebo 0 při neplatném constraintu. |
| destroy() | Boolean | Idempotentně uvolní pouze constraint; připojená tělesa zůstanou živá. |
| set_enabled(enabled) / get_enabled() | Boolean | Dočasně odebere nebo obnoví účast v solveru bez zničení constraintu. |
| set_collision_enabled(enabled) / get_collision_enabled() | Boolean | Řídí kolize dvojice těles. World varianty vždy vracejí false. |
| set_limits(minimum, maximum) | Boolean | Aktualizuje konečné lineární limity obsahující nulu. |
| get_limits() | Struct | Vrátí {minimum, maximum} ve world units. |
| get_position() | Real | Aktuální signed relativní position podél osy. |
| set_motor_velocity(velocity) | Boolean | Vybere velocity režim v units/s. |
| set_motor_position(position) | Boolean | Vybere position režim ve world units. |
| enable_motor(enabled) | Boolean | Motor vypne nebo obnoví jeho předchozí režim. |
| set_motor_max_force(force) | Boolean | Aktualizuje nezáporný limit lineární force. |
| get_motor_state() | Struct | Vrátí režim, targets, force limit a nastavení pružiny. |
| set_spring(frequency, damping) / get_spring() | Boolean / Struct | Řídí native pružinu position motoru. |
| get_impulse() | Real | Poslední motor solver impulse, nikoli force za sekundu. |
Souřadnice a pravidla motoru#
- Kladná position sleduje zadanou osu; její obrácení obrátí position i směr motoru.
- Dvě kolmé translace a celá relativní rotace jsou uzamčené.
- Velocity a position setters vyberou a zapnou svůj režim. Pružina působí pouze v position režimu.
- Jsou-li přítomny oba creation targets, motor_position se použije poslední a bude aktivní.
Příklad: zásuvka#
var cabinet = jolt_box_create_static(4, 3.5, 2, 3.6, 3.8, 0.5);
var drawer = jolt_box_create_dynamic(4, 3.5, 2.75, 3, 2.6, 0.7, { mass: 4 });
var slider = jolt_slider(cabinet, drawer, 4, 3.5, 2.75, 0, -1, 0, {
limits_min: 0,
limits_max: 2,
collision: false
});Příklad: poháněný píst#
var slider = jolt_slider(frame, piston, 0, 0, 2, 1, 0, 0, {
limits_min: -1.5, limits_max: 1.5,
motor_max_force: 80,
spring_frequency: 3, spring_damping: 0.7,
motor_position: 1
});
slider.set_motor_velocity(-2);
slider.set_motor_position(1);
var position = slider.get_position();World varianta#
var drawer = jolt_box_create_dynamic(0, 0, 1, 1.8, 2.5, 0.5, { mass: 3 });
var rail = jolt_slider_world(drawer, 0, 0, 1, 0, 1, 0, {
limits_min: -0.5,
limits_max: 0.5
});Chyby a životní cyklus#
- Body-to-body creatory vyžadují dvě různá živá managed JoltBody ve stejném managed výchozím worldu.
- Alespoň jedno připojené těleso musí být pohyblivé; nepodporovaná static-static dvojice v native Jolt selže.
- Constructory při úspěchu vracejí managed JoltConstraint, při validační nebo native chybě undefined.
- Zničení kteréhokoli připojeného tělesa nejprve automaticky zničí a zneplatní jeho constrainty.
- Po selhání creatoru nebo metody čtěte jolt_get_error(), zejména u nedůvěryhodných hodnot.
- Anchor a axis komponenty musí být konečné a osa nesmí mít nulovou délku.
- Limity musí být konečné a splnit minimum <= 0 <= maximum.
- Motor targets musí být konečné; force, frequency a damping konečné a nezáporné.
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 |
|---|---|---|
| jolt_slider | jolt_slider(body_a, body_b, anchor_x, anchor_y, anchor_z, axis_x, axis_y, axis_z, options = undefined) | Vrací JoltConstraint/undefined, nevlastní tělesa. Dvě různá živá tělesa stejného světa; _world varianta jedno Dynamic těleso a pevný svět. Enabled default true; běžné dvoutělesové collision default true, pokud není dále uvedeno jinak. Po vytvoření ověř i jolt_has_error: některé navazující options mohou selhat a přesto vrátit vytvořený constraint. Světová kotva/osa; limits_min/max default±1000000m, rozsah obsahuje0. Volitelné spring_frequency Hz a spring_damping default 1. |
| jolt_slider_world | jolt_slider_world(body, anchor_x, anchor_y, anchor_z, axis_x, axis_y, axis_z, options = undefined) | Vrací JoltConstraint/undefined, nevlastní tělesa. Dvě různá živá tělesa stejného světa; _world varianta jedno Dynamic těleso a pevný svět. Enabled default true; běžné dvoutělesové collision default true, pokud není dále uvedeno jinak. Po vytvoření ověř i jolt_has_error: některé navazující options mohou selhat a přesto vrátit vytvořený constraint. Světová kotva/osa; limits_min/max default±1000000m, rozsah obsahuje0. Volitelné spring_frequency Hz a spring_damping default 1. |