Aktuální projekt

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#

GML
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#

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íkSignaturaKontrakt operace
jolt_soft_body_forcejolt_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.applyJoltSoftBodyForce.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.cancelJoltSoftBodyForce.cancel()Boolean; odstraní čekající apply požadavek, nevrátí již aplikovaný impulz/sílu. Vyžaduje živý helper.
JoltSoftBodyForce.destroyJoltSoftBodyForce.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_countJoltSoftBodyForce.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_debugJoltSoftBodyForce.get_debug()Uložený Boolean diagnostiky; sám neověřuje platnost.
JoltSoftBodyForce.get_directionJoltSoftBodyForce.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_impulseJoltSoftBodyForce.get_impulse()Celkový impulz: uložené číslo v N·s; bez ověření platnosti helperu.
JoltSoftBodyForce.get_positionJoltSoftBodyForce.get_position()Kopie uložené světové {x, y, z} v m; konfigurační getter bez ověření platnosti.
JoltSoftBodyForce.get_radiusJoltSoftBodyForce.get_radius()Poloměr výběru: uložené číslo v m; bez ověření platnosti helperu.
JoltSoftBodyForce.get_strengthJoltSoftBodyForce.get_strength()Celková síla: uložené číslo v N; bez ověření platnosti helperu.
JoltSoftBodyForce.impulseJoltSoftBodyForce.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_validJoltSoftBodyForce.is_valid()Boolean; helper i jeho soft body musí být živé. Po zničení soft body je helper neplatný.
JoltSoftBodyForce.set_debugJoltSoftBodyForce.set_debug(v)Boolean převod; výchozí false. Vrací true/false, vyžaduje živý helper. Pouze diagnostika.
JoltSoftBodyForce.set_directionJoltSoftBodyForce.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_impulseJoltSoftBodyForce.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_positionJoltSoftBodyForce.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_radiusJoltSoftBodyForce.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_strengthJoltSoftBodyForce.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.