Pomocné skripty · Sockets

Multi-socket groups

Několik explicitních párů určuje správné usazení, ale skupina vytvoří jediný SocketConnection a jediný constraint.

jolt_socket_group(pairs, options=undefined) vyžaduje nejméně dva unikátní male/female páry mezi stejnými dvěma bodies. Všechny povinné páry musí ve stejném fixed stepu splnit kompatibilitu, dostupnost a tolerance.

Definice skupiny#

GML
var mount = jolt_socket_group([
    { male: tool_left,  female: host_left  },
    { male: tool_right, female: host_right }
], {
    primary_pair: 0
});

// Connection vznikne teprve po současném zarovnání obou párů.
if (is_struct(mount.connection)) {
    show_debug_message("Nástroj je připojen");
}

Pravidla vytvoření#

  • Každá položka pole je struct {male, female}; polarity jsou povinné a endpoint nelze v poli opakovat.
  • Všechny male sockety musí patřit body A a všechny female sockety body B ve stejném world.
  • Socket nesmí už patřit jiné group ani mít connection. Alespoň jedno z obou bodies musí být Dynamic.
  • Dočasně nekompatibilní nebo disabled pár nezruší group; pouze zabrání její aktivaci a spojení.

Primary pair#

Jediná option primary_pair je index páru, default 0. Jeho male vlastní connection_type, attraction, collision, parametry constraintu a break limity. Jeho female poskytuje výsledný anchor a frame. Ostatní páry jsou přesné podmínky usazení.

Výpočet zarovnání#

  • Bez attraction musí každý pár projít vlastní menší position a rotation tolerancí obou endpointů.
  • S attraction musí každý pár projít také přesnými lock tolerancemi a limity relativní rychlosti primary male.
  • Controller průměruje poziční, rotační a rychlostní chyby všech párů a jednou aplikuje výslednou sílu a torque.
  • attraction_force ani attraction_torque se nenásobí počtem socketů; jsou limitem celého docking mechanismu.

Stav a lifecycle group#

ČlenVýznam
pairs / primary_pairKopie explicitních párů a index řídicího páru.
aligned_countPočet párů splňujících běžné tolerance v posledním vyhodnocení.
active / readyVšechny páry jsou použitelné a v dosahu / připravené k vytvoření constraintu.
connectionJeden sdílený SocketConnection, nebo undefined.
is_valid() / disconnect() / destroy()Kontrola, rozpojení jednoho constraintu a úplné rozpuštění group.

Omezení první verze#

  • Neexistuje pravidlo 2 ze 3, volitelné páry, automatické párování ani více výsledných constraintů.
  • Kollineární body samy neurčí twist, pokud jejich socket frames a rotation tolerance orientaci ignorují.
  • Nekonzistentní rozmístění párů, překážky nebo příliš malá síla mohou zabránit locku; systém geometrii neteleportuje.

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_socket_groupjolt_socket_group(pairs, options=undefined)Pole nejméně2 unikátních {male, female} mezi stejnými dvěma tělesy, alespoň jedno Dynamic. Options primary_pair index default 0. JoltSocketGroup/undefined; páry nesmějí být již propojené nebo v jiné skupině. Vzniká jeden společný constraint, ne redundantní kloub na každý pár.
JoltSocketGroup.destroyJoltSocketGroup.destroy()Boolean; ověří oba hosty a všechny páry. Disconnect ruší společný constraint; destroy navíc uvolní členství socketů. Hosty ani sockety nevlastní.
JoltSocketGroup.disconnectJoltSocketGroup.disconnect()Boolean; ověří oba hosty a všechny páry. Disconnect ruší společný constraint; destroy navíc uvolní členství socketů. Hosty ani sockety nevlastní.
JoltSocketGroup.is_validJoltSocketGroup.is_valid()Boolean; ověří oba hosty a všechny páry. Disconnect ruší společný constraint; destroy navíc uvolní členství socketů. Hosty ani sockety nevlastní.