Pomocné skripty
Dopravní pásy
Změní horní plochu existujícího tělesa na pohybující se fyzikální kontaktní povrch.
jolt_conveyor připojí managed native helper k jednomu non-sensor Static nebo Kinematic JoltBody. Dynamic náklad se přepravuje prostřednictvím Jolt contact solveru a tření: pozice, rotace ani rychlost se neteleportují a běžné kolize zůstávají aktivní.
Syntaxe#
jolt_conveyor(body, options=undefined)Argumenty#
| Argument | Typ | Popis |
|---|---|---|
| body | JoltBody | Živé non-sensor Static nebo Kinematic hostitelské těleso v managed default world. |
| options | Struct nebo undefined | Volitelné nastavení směru, rychlosti, vrstev a smart pomocníků. |
Options#
| Field | Výchozí hodnota | Popis |
|---|---|---|
| direction | {x:0,y:1,z:0} | Nenulový směr pohybu promítnutý do horní tangent plane hostitele. |
| speed | 1.0 | Cílová rychlost kontaktní plochy ve world units za sekundu; může být nulová nebo záporná. |
| space | JOLT_CONVEYOR_LOCAL | LOCAL sleduje rotaci hostitele, WORLD drží směr absolutně ve world space. |
| layers | undefined | Povolený JoltLayer nákladu, pole vrstev nebo číselná maska. |
| center_objects | false | Aplikuje fyzickou boční korekci směrem ke středové ose pásu. |
| center_strength | 100.0 | Kladný limit centrovací síly a PD stiffness. |
| align_rotation | false | Fyzicky zarovnává yaw nákladu na diskrétní úhly relativně k hostiteli. |
| rotation_step | 90.0 | Interval zarovnání ve stupních; musí být větší než 0 a nejvýše 360. |
| rotation_strength | 50.0 | Kladný limit zarovnávacího torque a PD stiffness. |
Veřejné metody#
| Metoda | Účel |
|---|---|
| is_valid() / destroy() | Ověří nebo odstraní helper bez zničení hostitelského tělesa. |
| get_native_handle() | Vrátí opaque native handle helperu, nebo 0 při neplatnosti. |
| set_speed(speed) / get_speed() | Za běhu změní rychlost, obrátí nebo zastaví povrch. |
| set_direction(x,y,z) / get_direction() | Změní nebo přečte uložený nenulový směr. |
| set_centering(enabled,strength) | Zapne nebo upraví fyzické boční centrování. |
| set_rotation_alignment(enabled,step,strength) | Zapne nebo upraví fyzické zarovnání yaw. |
| set_layers(layers) | Změní filtr vrstev nákladu bez úpravy globální collision matrix. |
Pravidla kontaktu a pohybu#
- Přepravují se pouze Dynamic non-sensor rigid bodies ve skutečném kontaktu s horní plochou. Tělesa ve vzduchu, na boku nebo zespodu jsou ignorována.
- Test horní plochy používá local +Z normal hostitele a přijímá kontaktní normals uvnitř 60stupňového horního kužele.
- Speed je cílová relativní surface velocity, nikoli impulz přičítaný každý Step. Skutečnou odezvu určuje friction, normal force, hmotnost a podmínky kontaktu.
- Boxy se posouvají, zatímco Sphere a Cylinder mohou přirozeně rolovat. Kolize mezi nákladem i běžná contact response zůstávají aktivní.
- LOCAL směr sleduje otočený nebo nakloněný host. WORLD zůstává absolutní, ale stále se promítá do horní tangent plane a nemůže vytvářet vztlak.
- Změna speed, direction, layers nebo smart pomocníků probudí vhodná tělesa dotýkající se skutečného tvaru hostitele.
Centrování a zarovnání rotace#
- Centrování aplikuje omezenou boční PD sílu směrem k přímce vedené veřejným originem hostitele ve směru pásu. Nemá dopřednou složku a neteleportuje.
- Rotation alignment aplikuje omezený torque kolem surface normal směrem k nejbližšímu násobku rotation_step relativně k orientaci hostitele.
- Zarovnání řídí pouze projektovaný yaw; nejde o úplnou 3D upright stabilizaci.
- Oba smart pomocníci působí jen během horního kontaktu a může jim odporovat hmotnost, tření nebo jiné colliders.
Příklad#
var conveyor_body = jolt_box_create_static(0, 0, 0, 3, 20, 0.5, {
friction: 0.8
});
var belt = jolt_conveyor(conveyor_body, {
direction: {x:0, y:1, z:0},
speed: 2,
center_objects: true,
center_strength: 100,
align_rotation: true,
rotation_step: 90,
rotation_strength: 50
});Řízení za běhu#
belt.set_speed(-2); // Obrácení směru
belt.set_speed(0); // Zastavení fyzického pohybu plochyOvěř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_conveyor | jolt_conveyor(body = undefined, options = undefined) | Vytvoří JoltConveyor v běžícím managed světě, jinak undefined. Bez body jde o připravený helper: settery fungují, is_valid je false do set_body. Výchozí speed 1 m/s, direction +Y, LOCAL, všechny vrstvy, centering/rotation/characters false; strengths 100/50, rotation_step 90°. Options jsou volitelné; chyba vytvoření vrací undefined. |
| JoltConveyor.destroy | JoltConveyor.destroy() | Boolean; opakované zničení uspěje. Zničí pás, nikdy hostitelský JoltBody. Další konfigurace zničeného helperu selže. |
| JoltConveyor.get_body | JoltConveyor.get_body() | Uložený host nebo undefined; tato metoda sama neověřuje platnost hosta. |
| JoltConveyor.get_direction | JoltConveyor.get_direction() | Kopie normalizovaného {x, y, z} ve zvoleném LOCAL/WORLD prostoru; undefined při chybě. |
| JoltConveyor.get_native_handle | JoltConveyor.get_native_handle() | Handle živého pásu, jinak 0. Nejde o handle hostitelského tělesa. |
| JoltConveyor.get_speed | JoltConveyor.get_speed() | Rychlost v m/s, před set_body uložená hodnota. Při chybě 0 a chybový stav. |
| JoltConveyor.is_valid | JoltConveyor.is_valid() | Boolean pro živý nativní pás a hosta. Připravený helper bez hosta vrací false. Ztráta hosta zneplatní pás. |
| JoltConveyor.set_affect_characters | JoltConveyor.set_affect_characters(enabled) | Boolean vstup i výsledek; výchozí false. Zapne přepravu podepřených Characterů při zachování jejich vstupu a orientace. Tento název zůstává affect_characters, přejmenování Explosion se na něj nevztahuje. |
| JoltConveyor.set_align_rotation | JoltConveyor.set_align_rotation(enabled) | Rotace: enabled Boolean, step v (0, 360] stupních, konečné strength > 0. Výchozí false/90/50. Boolean; vynechané argumenty zachovají aktuální step/strength. Korekční moment je škálovaný hmotností. |
| JoltConveyor.set_body | JoltConveyor.set_body(body) | Živý nesenzorový Static/Kinematic JoltBody ze stejného světa. Boolean; neúspěšná změna zachová dosavadní pás. Host se nevlastní ani nekopíruje. |
| JoltConveyor.set_center_objects | JoltConveyor.set_center_objects(enabled) | Centering: enabled Boolean, strength konečné > 0, výchozí false/100. Boolean výsledek; dílčí setter zachová druhou hodnotu. Síla je parametr korekce normalizované podle hmotnosti, nikoliv pevný limit N pro všechny objekty. |
| JoltConveyor.set_center_strength | JoltConveyor.set_center_strength(strength) | Centering: enabled Boolean, strength konečné > 0, výchozí false/100. Boolean výsledek; dílčí setter zachová druhou hodnotu. Síla je parametr korekce normalizované podle hmotnosti, nikoliv pevný limit N pro všechny objekty. |
| JoltConveyor.set_centering | JoltConveyor.set_centering(enabled, strength = center_strength) | Centering: enabled Boolean, strength konečné > 0, výchozí false/100. Boolean výsledek; dílčí setter zachová druhou hodnotu. Síla je parametr korekce normalizované podle hmotnosti, nikoliv pevný limit N pro všechny objekty. |
| JoltConveyor.set_direction | JoltConveyor.set_direction(x, y, z) | Konečný vektor s délkou² > 1e-12; normalizuje se, délka neovlivní rychlost. Výchozí +Y. Boolean; souřadný systém určuje set_space. |
| JoltConveyor.set_layers | JoltConveyor.set_layers(layers = undefined) | Transportní filtr, nemění kolizní matici. undefined = všechny vrstvy (mask 0); podporuje filtr raycastu, výsledná maska musí být celé uint32. Boolean, používá se i před připojením hosta. |
| JoltConveyor.set_rotation_alignment | JoltConveyor.set_rotation_alignment(enabled, step = rotation_step, strength = rotation_strength) | Rotace: enabled Boolean, step v (0, 360] stupních, konečné strength > 0. Výchozí false/90/50. Boolean; vynechané argumenty zachovají aktuální step/strength. Korekční moment je škálovaný hmotností. |
| JoltConveyor.set_rotation_step | JoltConveyor.set_rotation_step(step) | Rotace: enabled Boolean, step v (0, 360] stupních, konečné strength > 0. Výchozí false/90/50. Boolean; vynechané argumenty zachovají aktuální step/strength. Korekční moment je škálovaný hmotností. |
| JoltConveyor.set_rotation_strength | JoltConveyor.set_rotation_strength(strength) | Rotace: enabled Boolean, step v (0, 360] stupních, konečné strength > 0. Výchozí false/90/50. Boolean; vynechané argumenty zachovají aktuální step/strength. Korekční moment je škálovaný hmotností. |
| JoltConveyor.set_space | JoltConveyor.set_space(space) | Pouze JOLT_CONVEYOR_LOCAL nebo JOLT_CONVEYOR_WORLD, výchozí LOCAL. Boolean; místní směr se otáčí s hostem. |
| JoltConveyor.set_speed | JoltConveyor.set_speed(speed) | Konečná rychlost v m/s; 0 zastaví, záporná obrátí směr, výchozí 1. Boolean. Funguje před i po set_body v původním živém světě. |