Constraints
Distance Constraint
Drží dva attachment points v nastavitelném rozsahu minimální a maximální vzdálenosti.
Distance constraint vytváří pevnou tyč, lano s vůlí nebo tlumenou pružinu bez renderování lana. Body-to-body attachment points se při vytvoření zadávají ve world space a interně se uloží relativně k tělesům.
Syntaxe#
jolt_distance(body_a, body_b, options=undefined)
jolt_distance_world(body, anchor_x, anchor_y, anchor_z, min_distance, max_distance, options=undefined)Body-to-body options#
| Pole | Výchozí | Popis |
|---|---|---|
| point_a | pozice body_a | World-space attachment point na body_a při vytvoření. |
| point_b | pozice body_b | World-space attachment point na body_b při vytvoření. |
| min_distance | aktuální vzdálenost | Minimální povolená vzdálenost ve world units. |
| max_distance | aktuální vzdálenost | Maximální povolená vzdálenost ve world units. |
| spring_frequency | neaplikuje se | Je-li přítomno, zapne native frequency/damping spring. |
| spring_damping | 1 | Damping spojený se spring_frequency. |
| collision | true | Zda připojená uživatelská tělesa mohou kolidovat. |
| enabled | true | Počáteční stav solveru. |
Argumenty world varianty#
| Argument | Význam |
|---|---|
| body | Živé managed těleso připojené k pevnému světu. |
| anchor_x / anchor_y / anchor_z | Pevný world-space bod. |
| min_distance / max_distance | Explicitní seřazený rozsah délky ve world units. |
| options | enabled a volitelné spring_frequency se spring_damping. |
Metody#
| Metoda | Výsledek | Chování Distance |
|---|---|---|
| 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 nezáporný seřazený distance range. |
| get_limits() | Struct | Vrátí {minimum, maximum} ve world units. |
| set_spring(frequency, damping) | Boolean | Nastaví nezápornou native spring frequency a damping. |
| get_spring() | Struct | Vrátí {frequency, damping}. |
| get_current_distance() | Real | Aktuální geometrická vzdálenost attachment points. |
| get_impulse() | Real | Poslední signed solver impulse podél distance osy. |
Pevná délka, vůle a pružina#
- Stejné minimum a maximum vytvoří tyč nebo lano s pevnou délkou.
- Rozsah dovolí volný pohyb, dokud attachment point nedosáhne některé hranice.
- Pružina změkčuje korekci; vyšší frequency je tužší a damping potlačuje kmitání.
- Jde pouze o matematickou geometrii bez rope collision, ohýbání, wrappingu nebo renderování.
Příklad: tlumené lano#
var anchor = jolt_box_create_static(0, 0, 6, 0.4, 0.4, 0.4);
var load = jolt_box_create_dynamic(0, 0, 2, 1, 1, 1, { mass: 5 });
var tether = jolt_distance(anchor, load, {
point_a: { x: 0, y: 0, z: 6 },
point_b: { x: 0, y: 0, z: 2 },
min_distance: 2,
max_distance: 4,
spring_frequency: 3,
spring_damping: 0.65,
collision: false
});Příklad: přímé připojení ke světu#
var load = jolt_box_create_dynamic(0, 0, 2, 1, 1, 1, { mass: 5 });
var tether = jolt_distance_world(load, 0, 0, 6, 2, 4, {
spring_frequency: 2,
spring_damping: 0.7
});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.
- Attachment structy musí obsahovat konečné hodnoty x, y a z.
- Distance limity musí být konečné, nezáporné a seřazené minimum <= maximum.
- Frequency a damping musí být 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_distance | jolt_distance(body_a, body_b, options = undefined) | Dvě tělesa; world-space point_a/b default jejich originy, min/max_distance default jejich aktuální vzdálenost m, 0<=min<=max. Optional spring_frequency Hz/damping1. Constraint/undefined; kontroluj následnou chybu options. |
| jolt_distance_world | jolt_distance_world(body, anchor_x, anchor_y, anchor_z, min_distance, max_distance, options = undefined) | Dynamic Body a světová kotva XYZ m + min/max délka m; druhý bod je origin tělesa. Constraint/undefined, enabled true; optional spring_frequency/damping1. |
| JoltConstraint.get_current_distance | JoltConstraint.get_current_distance() | Pouze Distance: současná vzdálenost kotev v m; 0 při chybě. |
| JoltConstraint.get_limit_spring | JoltConstraint.get_limit_spring(axis) | SixDOF: {frequency, damping}, Hz a poměr. Motor osy 0..5, limit pouze 0..2; při chybě mohou složky obsahovat nativní náhradní 0. |
| JoltConstraint.get_spring | JoltConstraint.get_spring() | Distance/Hinge/Slider/Path: {frequency, damping}, Hz a poměr; undefined při chybě či jiném typu. |
| JoltConstraint.set_limit_spring | JoltConstraint.set_limit_spring(axis,frequency,damping) | SixDOF pouze posuvné axis 0..2; konečné frequency ≥0 Hz a damping ≥0 jako poměr. Rotační osy odmítne, výsledek Boolean. |
| JoltConstraint.set_spring | JoltConstraint.set_spring(frequency, damping) | Distance pružina limitu nebo Slider pružina motoru: konečné frequency ≥0 Hz, damping ≥0 (poměr). Boolean. |