‹›
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#

Syntax
jolt_conveyor(body, options=undefined)

Argumenty#

ArgumentTypPopis
bodyJoltBodyŽivé non-sensor Static nebo Kinematic hostitelské těleso v managed default world.
optionsStruct nebo undefinedVolitelné nastavení směru, rychlosti, vrstev a smart pomocníků.

Options#

FieldVýchozí hodnotaPopis
direction{x:0,y:1,z:0}Nenulový směr pohybu promítnutý do horní tangent plane hostitele.
speed1.0Cílová rychlost kontaktní plochy ve world units za sekundu; může být nulová nebo záporná.
spaceJOLT_CONVEYOR_LOCALLOCAL sleduje rotaci hostitele, WORLD drží směr absolutně ve world space.
layersundefinedPovolený JoltLayer nákladu, pole vrstev nebo číselná maska.
center_objectsfalseAplikuje fyzickou boční korekci směrem ke středové ose pásu.
center_strength100.0Kladný limit centrovací síly a PD stiffness.
align_rotationfalseFyzicky zarovnává yaw nákladu na diskrétní úhly relativně k hostiteli.
rotation_step90.0Interval zarovnání ve stupních; musí být větší než 0 a nejvýše 360.
rotation_strength50.0Kladný 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#

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

GML
belt.set_speed(-2); // Obrácení směru
belt.set_speed(0);  // Zastavení fyzického pohybu plochy

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_conveyorjolt_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.destroyJoltConveyor.destroy()Boolean; opakované zničení uspěje. Zničí pás, nikdy hostitelský JoltBody. Další konfigurace zničeného helperu selže.
JoltConveyor.get_bodyJoltConveyor.get_body()Uložený host nebo undefined; tato metoda sama neověřuje platnost hosta.
JoltConveyor.get_directionJoltConveyor.get_direction()Kopie normalizovaného {x, y, z} ve zvoleném LOCAL/WORLD prostoru; undefined při chybě.
JoltConveyor.get_native_handleJoltConveyor.get_native_handle()Handle živého pásu, jinak 0. Nejde o handle hostitelského tělesa.
JoltConveyor.get_speedJoltConveyor.get_speed()Rychlost v m/s, před set_body uložená hodnota. Při chybě 0 a chybový stav.
JoltConveyor.is_validJoltConveyor.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_charactersJoltConveyor.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_rotationJoltConveyor.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_bodyJoltConveyor.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_objectsJoltConveyor.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_strengthJoltConveyor.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_centeringJoltConveyor.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_directionJoltConveyor.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_layersJoltConveyor.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_alignmentJoltConveyor.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_stepJoltConveyor.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_strengthJoltConveyor.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_spaceJoltConveyor.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_speedJoltConveyor.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ě.