Pomocné skripty · Sockets

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#

Syntax
jolt_socket(body, polarity, type, options=undefined)

Základní options#

FieldDefaultVý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.
enabledtrueZda se socket může účastnit matching a group podmínek.
search_distance0.5Maximální vzdálenost hledání; pár používá menší hodnotu obou endpointů.
position_tolerance0.01Povolená vzdálenost pro spojení bez attraction.
rotation_tolerance5°Povolený nejkratší úhlový rozdíl quaternionů; 180 ignoruje orientaci.
cooldown0.25 sDoba blokování obou endpointů po disconnectu.
connection_typefixedRecept male socketu: fixed, hinge, point nebo swing_twist.
collisiontrueZachová nebo potlačí kolizi pouze mezi spojenou dvojicí bodies.
max_force / max_torqueundefinedVolitelné 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}.

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

ČlenPoužití
id, body, polarity, compatibility_typeIdentita a vlastnictví socketu.
candidateAktuálně vybraný protějšek, nebo undefined.
connectionSdílený JoltSocketConnection po spojení, jinak undefined.
groupJoltSocketGroup 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íkSignaturaKontrakt operace
jolt_socketjolt_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.destroyJoltSocket.destroy()Boolean; disconnect zruší connection a spustí cooldown, nikoliv těleso. Destroy navíc zruší případnou skupinu a zneplatní socket; opakovaně true.
JoltSocket.disconnectJoltSocket.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_transformJoltSocket.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_connectedJoltSocket.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_validJoltSocket.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_enabledJoltSocket.set_enabled(value)Převede na Boolean a vymaže kandidáta, vrátí valid flag. Nevytváří ani automaticky neruší existující connection.