Targety a odpor
Target určuje, do čeho lze proniknout, jakou silou a do jaké maximální hloubky.
jolt_penetration_target(body) připraví neaktivní objekt se settery; zapněte jej přes set_enabled(true). Explicitní varianta (body, config) dál vrací bool a nastaví target okamžitě. Použijte existující Static nebo Dynamic non-sensor body. Registrace sama o sobě nevypíná jeho kolize; konkrétní pár je potlačen až při vytvoření relationship.
target_penetration = jolt_penetration_target(target);
target_penetration.set_forward_force(8);
target_penetration.set_backward_force(20);
target_penetration.set_max_depth(0.15);
target_penetration.set_category_bits(1);
if (!target_penetration.set_enabled(true)) show_debug_message(jolt_get_error_message());get_info() vrací kopii nastavení. Opakované volání s týmž body vrací stejný objekt. Settery vracejí bool a při odmítnutí zachovají předchozí hodnoty. Následující explicitní konfigurace zůstává kompatibilní alternativou.
var material = {
enabled: true,
category_bits: 1,
forward_force: 8,
backward_force: 20,
max_depth: 0.15
};
if (!jolt_penetration_target(target, material)) {
show_debug_message(jolt_get_error_message());
}| Název | Výchozí / rozsah | Význam |
|---|---|---|
| enabled | false / legacy config: true | Povolí nové zásahy do targetu. |
| category_bits | 1 / uint32 | Bitové kategorie materiálu pro průnik s tip.mask. Nejde o ID kolizní vrstvy. |
| forward_force | 100 N / ≥ 0 | Odpor proti zasouvání po skutečném entry. |
| backward_force | 300 N / ≥ 0 | Odpor proti vytahování. Může být odlišný od odporu zasouvání. |
| max_depth | 0.5 m / > 0 | Materiálový limit hloubky. Efektivní relationship limit je min(target.max_depth, tip.max_insertion). |
Co znamená odpor#
Síly nejsou procenta ani koeficient tření. Constraint se snaží brzdit relativní axiální pohyb k nulové rychlosti v mezích forward_force a backward_force. Nárazy mohou překonat odpor energií a vstoupit i tehdy, když samotná tíha nestačí. Orientačně má 1 kg při g=9,81 tíhu 9,81 N; vysoký odpor může zastavit hlubší zasouvání po platném capture.
Aktualizace konfigurace#
Každé volání target funkce znovu sestaví celou konfiguraci z dodaných hodnot a defaultů; neprovádí merge s předchozím materiálem. Pro změnu jedné položky udržujte vlastní úplný material struct. Konfigurace aktivního targetu s relationships se odmítá, včetně pokusu jej vypnout. Nejdříve vztahy ukončete nebo nechte těleso vytáhnout.
Tvary a pohyb#
Podporované solid tvary jsou Box, Sphere, Capsule, Cylinder, TaperedCapsule, TaperedCylinder a ConvexHull i jejich compoundy z jolt_asset_create_body() nebo jolt_compound(), včetně poloh, rotací částí a posunutého těžiště. Podpora platí pro penetrator i target. Povolený je Static nebo Dynamic target; Kinematic target a sensory jsou odmítnuté. Mesh, HeightField, Plane a ScaledShape podporované nejsou. I u podporovaného tvaru musí projít konkrétní geometrie vstupu. Odpor, hloubka a dočasné potlačení kolizí platí pro celé těleso; části compoundu nejsou samostatné vrstvy materiálu.
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_penetration_target | jolt_penetration_target(body,config=undefined) | Body bez config vrací neaktivní JoltPenetrationTarget pro settery; s explicitním config provede registraci okamžitě a vrací Boolean. Default force forward/backward 100/300 N, depth 0.5 m, category 1; explicitní config má enabled default true, builder false. |
| JoltPenetrationTarget.get_info | JoltPenetrationTarget.get_info() | is_valid Boolean stavu hosta/světa; get_info kopie konfigurace nebo undefined. Platný builder ještě nemusí být enabled či registrovaný. |
| JoltPenetrationTarget.is_valid | JoltPenetrationTarget.is_valid() | is_valid Boolean stavu hosta/světa; get_info kopie konfigurace nebo undefined. Platný builder ještě nemusí být enabled či registrovaný. |
| JoltPenetrationTarget.set_backward_force | JoltPenetrationTarget.set_backward_force(value) | Boolean výsledek; enabled Boolean/0/1, síly konečné >=0 N, depth >0 m, category celé uint32. Před aktivací mění pouze config, po registraci respektuje native busy pravidla; cache změní jen při úspěchu. |
| JoltPenetrationTarget.set_category_bits | JoltPenetrationTarget.set_category_bits(value) | Boolean výsledek; enabled Boolean/0/1, síly konečné >=0 N, depth >0 m, category celé uint32. Před aktivací mění pouze config, po registraci respektuje native busy pravidla; cache změní jen při úspěchu. |
| JoltPenetrationTarget.set_enabled | JoltPenetrationTarget.set_enabled(value) | Boolean výsledek; enabled Boolean/0/1, síly konečné >=0 N, depth >0 m, category celé uint32. Před aktivací mění pouze config, po registraci respektuje native busy pravidla; cache změní jen při úspěchu. |
| JoltPenetrationTarget.set_forward_force | JoltPenetrationTarget.set_forward_force(value) | Boolean výsledek; enabled Boolean/0/1, síly konečné >=0 N, depth >0 m, category celé uint32. Před aktivací mění pouze config, po registraci respektuje native busy pravidla; cache změní jen při úspěchu. |
| JoltPenetrationTarget.set_max_depth | JoltPenetrationTarget.set_max_depth(value) | Boolean výsledek; enabled Boolean/0/1, síly konečné >=0 N, depth >0 m, category celé uint32. Před aktivací mění pouze config, po registraci respektuje native busy pravidla; cache změní jen při úspěchu. |