Lokální síla a impulz
Pomocník vybírá pohyblivé částice jednoho Soft Body ve světové kouli; těleso automaticky nesleduje. Vytvoření a settery neaplikují sílu. apply naplánuje celkovou sílu v newtonech pro další řízenou aktualizaci; opakování požadavek nahradí místo násobení renderovacími FPS. Snímek bez fyzikálního kroku jej ponechá. cancel jej zruší. impulse při každém volání okamžitě aplikuje další impulz v N·s.
Příklad#
push = jolt_soft_body_force(soft);
push.set_position(0, 0, 3);
push.set_direction(0, 0, -1);
push.set_radius(0.3);
push.set_strength(20);
push.set_impulse(0.5);
// Step, before the existing jolt_update():
if (mouse_check_button(mb_left)) push.apply();
if (keyboard_check_pressed(vk_space)) push.impulse();Použití a omezení#
Síla se rozdělí normalizovaným plynulým útlumem. Piny/připojené částice se vynechají. Výběr je objemový bez zakrytí nebo raycastu: malá koule může síť minout. get_affected_count se změní po provedení, u impulzu ihned. Naplánované apply vyžaduje jolt_update a samotná vlastní smyčka jolt_step jej nezpracuje.
Poloměr přijímá 0.001..1000 m; síla/impulz 0..1000000. set_debug(true) nebo JOLT_DEBUG_FORCES zobrazí oblast. destroy zruší pomocníka a čekající sílu, nikoli Soft Body. Zničení vlastníka jej uklidí automaticky.
Přehled API#
Signatury veřejných funkcí a metod. Metody volejte na vrácené instanci; parametry s výchozí hodnotou jsou volitelné.
Související návody#
- Převod staršího kódu
- Výběr měkkého tělesa
- Měkká koule
- Objemový měkký kvádr
- Import uzavřeného modelu
- Látkový model a pojmenované úchyty
- Prostorové úchyty
- Oddělená vizuální síť
- Vítr
- Přenášení měkkých těles
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_soft_body_force | jolt_soft_body_force(soft) | Živé JoltBBMODCloth/JoltBBMODSoftBody; vrací nový Force nebo undefined, helperů může být více. Výchozí position {0, 0, 0}, direction -Z, radius 0.3 m, strength 20 N, impulse 1 N·s, debug false. Samotné vytvoření nic neaplikuje. |
| JoltSoftBodyForce.apply | JoltSoftBodyForce.apply() | Boolean; zachytí aktuální konfiguraci před jolt_update. Poslední požadavek vyhraje, opakuje se v doháněcích krocích, při snímku bez kroku zůstane čekat. Po zpracovaném snímku se vyčistí. Volné částice uvnitř radiusu dostanou normalizovaný smoothstep podíl síly; piny/attachmenty se vynechají. |
| JoltSoftBodyForce.cancel | JoltSoftBodyForce.cancel() | Boolean; odstraní čekající apply požadavek, nevrátí již aplikovaný impulz/sílu. Vyžaduje živý helper. |
| JoltSoftBodyForce.destroy | JoltSoftBodyForce.destroy() | Boolean, opakované zničení je bezpečné. Odstraní pouze helper; nezničí soft body ani hostitelský rigid body. Wind vypne proudění, Force zruší čekající požadavek, Attachment uvolní svůj výběr částic. |
| JoltSoftBodyForce.get_affected_count | JoltSoftBodyForce.get_affected_count() | Počet částic posledního úspěšně odeslaného požadavku, zpočátku 0. apply mění údaj až při fyzikálním kroku; pouhá konfigurace jej neaktualizuje. |
| JoltSoftBodyForce.get_debug | JoltSoftBodyForce.get_debug() | Uložený Boolean diagnostiky; sám neověřuje platnost. |
| JoltSoftBodyForce.get_direction | JoltSoftBodyForce.get_direction() | Kopie uloženého jednotkového světového {x, y, z}; jde o konfigurační getter, sám neověřuje platnost helperu. |
| JoltSoftBodyForce.get_impulse | JoltSoftBodyForce.get_impulse() | Celkový impulz: uložené číslo v N·s; bez ověření platnosti helperu. |
| JoltSoftBodyForce.get_position | JoltSoftBodyForce.get_position() | Kopie uložené světové {x, y, z} v m; konfigurační getter bez ověření platnosti. |
| JoltSoftBodyForce.get_radius | JoltSoftBodyForce.get_radius() | Poloměr výběru: uložené číslo v m; bez ověření platnosti helperu. |
| JoltSoftBodyForce.get_strength | JoltSoftBodyForce.get_strength() | Celková síla: uložené číslo v N; bez ověření platnosti helperu. |
| JoltSoftBodyForce.impulse | JoltSoftBodyForce.impulse() | Boolean; aplikuje okamžitý celkový impulz rozdělený smoothstep váhami na volné částice uvnitř radiusu. Nulová síla nebo prázdný výběr je úspěch s 0 zasaženými. Nejde o opakovaný apply. |
| JoltSoftBodyForce.is_valid | JoltSoftBodyForce.is_valid() | Boolean; helper i jeho soft body musí být živé. Po zničení soft body je helper neplatný. |
| JoltSoftBodyForce.set_debug | JoltSoftBodyForce.set_debug(v) | Boolean převod; výchozí false. Vrací true/false, vyžaduje živý helper. Pouze diagnostika. |
| JoltSoftBodyForce.set_direction | JoltSoftBodyForce.set_direction(x,y,z) | Konečné světové x/y/z, absolutně ≤ 1e9, délka ≥ 1e-6. Normalizuje směr; Boolean, při neplatném helperu false. |
| JoltSoftBodyForce.set_impulse | JoltSoftBodyForce.set_impulse(v) | Celkový impulz: konečné 0..1000000 N·s, výchozí 1; Boolean. Hodnota je celková pro výběr, nerozmnožuje se počtem částic. |
| JoltSoftBodyForce.set_position | JoltSoftBodyForce.set_position(x,y,z) | Konečné světové x/y/z v m, absolutně ≤ 1e9; Boolean. Změna nastaví budoucí požadavek, již zachycený apply snapshot nezmění. |
| JoltSoftBodyForce.set_radius | JoltSoftBodyForce.set_radius(v) | Poloměr výběru: konečné 0.001..1000 m, výchozí 0.3; Boolean. Hodnota je celková pro výběr, nerozmnožuje se počtem částic. |
| JoltSoftBodyForce.set_strength | JoltSoftBodyForce.set_strength(v) | Celková síla: konečné 0..1000000 N, výchozí 20; Boolean. Hodnota je celková pro výběr, nerozmnožuje se počtem částic. |