Sockety a konfigurace
Úplný kontrakt jolt_socket, lokální transform, kompatibilita a runtime stav.
jolt_socket(body, polarity, type, options=undefined) vrací JoltSocket nebo undefined a nastaví standardní high-level chybu. Všechny číselné hodnoty musí být konečné; quaternion se při vytvoření normalizuje.
Syntaxe#
jolt_socket(body, polarity, type, options=undefined)Základní options#
| Field | Default | Význam |
|---|---|---|
| position | {x:0,y:0,z:0} | Pozice socketu v local-space originu parent body. |
| rotation | {x:0,y:0,z:0,w:1} | Local quaternion orientace socket frame; musí mít nenulovou délku. |
| enabled | true | Zda se socket může účastnit matching a group podmínek. |
| search_distance | 0.5 | Maximální vzdálenost hledání; pár používá menší hodnotu obou endpointů. |
| position_tolerance | 0.01 | Povolená vzdálenost pro spojení bez attraction. |
| rotation_tolerance | 5° | Povolený nejkratší úhlový rozdíl quaternionů; 180 ignoruje orientaci. |
| cooldown | 0.25 s | Doba blokování obou endpointů po disconnectu. |
| connection_type | fixed | Recept male socketu: fixed, hinge, point nebo swing_twist. |
| collision | true | Zachová nebo potlačí kolizi pouze mezi spojenou dvojicí bodies. |
| max_force / max_torque | undefined | Volitelné kladné break limity; podpora závisí na typu spojení. |
Local → world transform#
World position vznikne otočením local position rotací body a přičtením world position body. World rotation je součin body quaternionu a local quaternionu socketu. Metoda get_transform() provede tento výpočet z aktuálního body transformu a vrátí {position, rotation}.
var frame = socket.get_transform();
if (!is_undefined(frame)) {
show_debug_message(frame.position.x);
show_debug_message(frame.rotation.w);
}Kompatibilita a výběr kandidáta#
- Pár musí být male + female, mít přesně stejný neprázdný type, být enabled, volný a mimo cooldown.
- Sockety musí patřit různým bodies ve stejném managed world. Alespoň jedno body musí být Dynamic.
- Kandidáti se globálně řadí podle nejmenší vzdálenosti, potom úhlové chyby a nakonec stabilních socket ID.
- Endpoint se rezervuje atomicky pouze jednomu kandidátovi. Mezi stejnou dvojicí bodies nevznikne redundantní druhý socket constraint.
Veřejný stav a metody#
| Člen | Použití |
|---|---|
| id, body, polarity, compatibility_type | Identita a vlastnictví socketu. |
| candidate | Aktuálně vybraný protějšek, nebo undefined. |
| connection | Sdílený JoltSocketConnection po spojení, jinak undefined. |
| group | JoltSocketGroup vlastnící endpoint, nebo undefined. |
| get_transform() / is_valid() | Aktuální world frame a kontrola živého parent body/handlu/worldu. |
| is_connected() | Vrátí true jen pro platný socket, platnou connection a skutečně platný constraint; candidate, attraction a cooldown vracejí false. |
| set_enabled(value) | Za běhu zapne nebo vypne účast v hledání; existující connection automaticky nerozpojí. |
| disconnect() | Bezpečně zničí aktuální connection, obnoví pair collision a spustí cooldown. |
| destroy() | Zničí group/connection a vyřadí socket z registru. |
Integrace s aktuálním projektem#
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 | jolt_socket(body, polarity, type, options=undefined) | Živý managed Body, male/female, neprázdný compatibility_type, options. JoltSocket/undefined. Místní position/rotation, +Z forward; shodné orientace se spojují. Default fixed, collisiontrue, enabledtrue, search.5m, tolerance.01m/5°, cooldown.25s, attractionfalse. Recept/kladné break force N a torque N·m patří male; Point nemá torque limit. |
| JoltSocket.destroy | JoltSocket.destroy() | Boolean; disconnect zruší connection a spustí cooldown, nikoliv těleso. Destroy navíc zruší případnou skupinu a zneplatní socket; opakovaně true. |
| JoltSocket.disconnect | JoltSocket.disconnect() | Boolean; disconnect zruší connection a spustí cooldown, nikoliv těleso. Destroy navíc zruší případnou skupinu a zneplatní socket; opakovaně true. |
| JoltSocket.get_transform | JoltSocket.get_transform() | Světový transform/undefined; is_valid Boolean ownera a světa; is_connected ověří také živý constraint, nikoliv jen uloženého kandidáta. |
| JoltSocket.is_connected | JoltSocket.is_connected() | Světový transform/undefined; is_valid Boolean ownera a světa; is_connected ověří také živý constraint, nikoliv jen uloženého kandidáta. |
| JoltSocket.is_valid | JoltSocket.is_valid() | Světový transform/undefined; is_valid Boolean ownera a světa; is_connected ověří také živý constraint, nikoliv jen uloženého kandidáta. |
| JoltSocket.set_enabled | JoltSocket.set_enabled(value) | Převede na Boolean a vymaže kandidáta, vrátí valid flag. Nevytváří ani automaticky neruší existující connection. |