Constraints
Cone Constraint
Drží shared anchor pohromadě, omezuje swing na kruhový kužel a nechává twist kolem osy volný.
Cone je vhodný pro závěsy, jednoduché ball joints a články, které se mohou vychýlit maximálním úhlem, ale nepotřebují twist limits. Pro eliptický swing, twist limits nebo angular motory použijte SwingTwist.
Syntaxe#
jolt_cone(body_a, body_b, anchor_x, anchor_y, anchor_z, axis_x, axis_y, axis_z, max_angle, options=undefined)
jolt_cone_world(body, anchor_x, anchor_y, anchor_z, axis_x, axis_y, axis_z, max_angle, options=undefined)Argumenty a options#
| Název | Výchozí | Popis |
|---|---|---|
| body_a / body_b | povinné | Propojená managed tělesa. |
| body | povinné | Jediné těleso pro world variantu. |
| anchor_x / anchor_y / anchor_z | povinné | Společný world-space pivot. |
| axis_x / axis_y / axis_z | povinné | Konečný nenulový referenční směr; interně se normalizuje. |
| max_angle | povinné | Swing half-angle od 0 do 180 stupňů. |
| collision | true | Body-to-body collision state; world varianta hodnotu ignoruje. |
| enabled | true | Počáteční stav solveru. |
Úhlové chování#
- Aktuální osa se může od referenční osy vychýlit nejvýše o max_angle.
- Relativní twist kolem této osy zůstává neomezený.
- Limit 0 stupňů uzamkne swing; 180 stupňů znamená prakticky volný swing.
- Public API používá stupně a interně je převádí na Jolt radiány.
Metody#
| Metoda | Výsledek | Chování Cone |
|---|---|---|
| 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_limit(angle) | Boolean | Nastaví swing half-angle v rozsahu 0..180 stupňů. |
| get_limit() | Real | Vrátí maximální swing ve stupních. |
| get_angle() | Real | Vrátí aktuální swing angle ve stupních. |
| get_impulse() | Real | Vrátí poslední souhrnný position/angular solver impulse. |
Příklad: zavěšená lampa#
var lamp = jolt_box_create_dynamic(0, 0, 3.5, 0.7, 0.7, 1, { mass: 3 });
var joint = jolt_cone_world(
lamp,
0, 0, 4,
0, 0, -1,
35
);Body-to-body příklad#
var joint = jolt_cone(upper, lower, 0, 0, 4.5, 0, 0, -1, 45, {
collision: false
});
joint.set_limit(30);
var swing = joint.get_angle();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 musí mít nenulovou délku.
- max_angle a runtime limit musí zůstat mezi 0 a 180 stupni.
- Cone nemá motor ani pružinu. Pro poháněné angular řízení použijte SwingTwist nebo SixDOF.
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_cone | jolt_cone(body_a, body_b, anchor_x, anchor_y, anchor_z, axis_x, axis_y, axis_z, max_angle, 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 a max_angle ve stupních 0..180. |
| jolt_cone_world | jolt_cone_world(body, anchor_x, anchor_y, anchor_z, axis_x, axis_y, axis_z, max_angle, 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 a max_angle ve stupních 0..180. |
| JoltConstraint.set_rotation | JoltConstraint.set_rotation(angle) | Pouze Hinge: konečný referenční úhel ve stupních; Boolean. Mění referenční rámec, neteleportuje těleso. |