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#
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#
| Člen | Význam |
|---|---|
| pairs / primary_pair | Kopie explicitních párů a index řídicího páru. |
| aligned_count | Počet párů splňujících běžné tolerance v posledním vyhodnocení. |
| active / ready | Všechny páry jsou použitelné a v dosahu / připravené k vytvoření constraintu. |
| connection | Jeden 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ík | Signatura | Kontrakt operace |
|---|---|---|
| jolt_socket_group | jolt_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.destroy | JoltSocketGroup.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.disconnect | JoltSocketGroup.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_valid | JoltSocketGroup.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í. |