Reference API Tipu
Veřejné settery a diagnostické metody objektu JoltPenetrator včetně chování při aktivaci a změnách.
Tip získáte přes jolt_penetrator_tip(body, config). Uložte si vrácený objekt, ověřte is_struct a při pozdější práci is_valid(). Nativní handle není GameMaker instance ID; jednotlivé hroty téhož body mají vlastní identity.
| Metoda | Vrací | Kontrakt |
|---|---|---|
| tip.is_valid() | Bool | Připravený nebo registrovaný Tip má platného vlastníka v aktuálním světě. Samotné true neznamená aktivaci. Zničení body nebo světa jej zneplatní. |
| tip.set_enabled(enabled) | Bool | Poprvé ověří a aktivuje připravený hrot, později povolí nové admission nebo je vypne. Existing relationships zůstávají do vytažení či odstranění; ostatní Tipy nejsou ovlivněné. |
| tip.configure(config) | Bool | Sloučí známé zadané položky s aktuální konfigurací. Vrací false při invalid config nebo Busy během engagement/rearm. Nezmění vlastníka body. |
| tip.remove() | Bool | Explicitně odstraní Tip, ukončí jeho relationships a uvolní jeho kolizní leases. Samotné body neničí. Opakované volání na odstraněném wrapperu je úspěšné. |
| tip.get_reject_reason() | Real / integer code | Poslední diagnostický reject. Není to historie všech kandidátů ani stav relationship. |
| tip.get_info() | Struct / undefined | Aktuální konfigurace, state, reject a pole relationship handles. Snapshot s neplatným world/handlem není dostupný. |
| tip.get_relationship() | JoltPenetrationRelationship / undefined | První aktuální relationship. Při více cílech neznamená automaticky nejhlubší ani poslední zásah. |
| tip.get_relationships() | Array | Všechny aktuální relationship wrappery; bez spojení vrátí []. Přežívající wrappery si zachovávají identitu. |
Před první aktivací je is_valid() platnost připraveného objektu; get_info() vrací handle=0, enabled=false a prázdné relationships. První set_enabled(true) ověří polohu špičky na povrchu. Chyba dovolí opravit nastavení a aktivaci zopakovat. Po registraci settery konfigurují ihned a respektují Busy během spojení/rearm.
tip.set_local_position(x, y, z);
tip.set_local_axis(x, y, z);
tip.set_max_angle(degrees);
tip.set_max_insertion(metres);
tip.set_max_simultaneous_penetrations(count);
tip.set_max_capture_axial_speed(speed);
tip.set_mask(bits);
tip.set_capture_model(model);
tip.set_probe_length(metres);
tip.set_probe_radius(metres);
tip.set_capture_gap(metres);
tip.set_capture_overlap(metres);
tip.set_tip_surface_tolerance(metres);
tip.set_rearm_separation(metres);
tip.set_contact_assisted(enabled);
tip.set_contact_tolerance(metres);
tip.set_enabled(true);Bezpečná změna a čtení#
if (is_struct(tip) && tip.is_valid()) {
if (!tip.set_max_angle(35)) {
show_debug_message(jolt_get_error_message());
}
var info = tip.get_info();
if (is_struct(info)) {
show_debug_message("Model: " + string(info.capture_model));
show_debug_message("Relationships: " + string(array_length(info.relationships)));
}
}Obsah get_info()#
Struct obsahuje schema=1, handle, body_handle, enabled, state, reject_reason, relationships a všechny aktuální konfigurační položky: mask, local_position, local_axis, max_angle, contact_tolerance, max_insertion, max_simultaneous_penetrations, max_capture_axial_speed, capture_model, contact_assisted, probe_length, probe_radius, capture_gap, capture_overlap, tip_surface_tolerance a rearm_separation. relationships je pole číselných handles; pro objekty volejte get_relationships().
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 |
|---|---|---|
| JoltPenetrator.configure | JoltPenetrator.configure(config) | Částečný config struct → Boolean. Neznámá/neplatná pole odmítá, místní vektory kopíruje. Živý engaged/rearming tip může odmítnout změnu jako busy; nezruší fyzický vztah kvůli změně nastavení. |
| JoltPenetrator.get_info | JoltPenetrator.get_info() | Snapshot konfigurace/stavu se schema:1; pro připravený tip handle:0, relationships:[], Idle. undefined při chybě. |
| JoltPenetrator.get_reject_reason | JoltPenetrator.get_reject_reason() | Číselný native důvod odmítnutí; připravený platný tip 0, neplatný připravený 18. Není to Boolean úspěchu. |
| JoltPenetrator.get_relationship | JoltPenetrator.get_relationship() | Aktuální živé wrappery vztahů / první z nich. Bez vztahu [] / undefined. Nejde o dokončenou historii, tu čti z Body. |
| JoltPenetrator.get_relationships | JoltPenetrator.get_relationships() | Aktuální živé wrappery vztahů / první z nich. Bez vztahu [] / undefined. Nejde o dokončenou historii, tu čti z Body. |
| JoltPenetrator.is_valid | JoltPenetrator.is_valid() | Boolean; platný neaktivní builder může mít handle 0. Zničený host/svět či odstraněný tip neplatný. |
| JoltPenetrator.remove | JoltPenetrator.remove() | Boolean; odstraní tip a ukončí jeho vztahy, obnoví dočasná omezení kolizí. Nezničí hosta. Připravený tip jen označí odstraněný. |
| JoltPenetrator.set_capture_gap | JoltPenetrator.set_capture_gap(value) | Boolean setter přes configure; respektuje busy stav. (0, 0.005] m, default 0.001. |
| JoltPenetrator.set_capture_model | JoltPenetrator.set_capture_model(value) | Boolean setter přes configure; respektuje busy stav. 0/1/2/3; Strict Predictive = 3, změnu prováděj před aktivací. |
| JoltPenetrator.set_capture_overlap | JoltPenetrator.set_capture_overlap(value) | Boolean setter přes configure; respektuje busy stav. (0, 0.03] m, default 0.02. |
| JoltPenetrator.set_contact_assisted | JoltPenetrator.set_contact_assisted(value) | Boolean setter přes configure; respektuje busy stav. Boolean/0/1, default true. Účinnost závisí na zvoleném capture modelu. |
| JoltPenetrator.set_contact_tolerance | JoltPenetrator.set_contact_tolerance(value) | Boolean setter přes configure; respektuje busy stav. Legacy tolerance (0, 0.1] m, default 0.02; u přímých options může sloužit jako fallback probe/rearm, explicitní nové hodnoty mají přednost. |
| JoltPenetrator.set_enabled | JoltPenetrator.set_enabled(enabled) | Boolean/0/1 vstup, Boolean výsledek. První true provede společnou validaci povrchu/osy a registraci; neúspěch zachová editovanou konfiguraci. False zastaví nové admission, nezruší stávající kanály. |
| JoltPenetrator.set_local_axis | JoltPenetrator.set_local_axis(x,y,z) | Boolean setter přes configure; respektuje busy stav. Místní směr průniku, konečný vektor délky 1e-5..1e19; native normalizuje. |
| JoltPenetrator.set_local_position | JoltPenetrator.set_local_position(x,y,z) | Boolean setter přes configure; respektuje busy stav. Místní XYZ bod vůči originu tělesa, konečné m. |
| JoltPenetrator.set_mask | JoltPenetrator.set_mask(value) | Boolean setter přes configure; respektuje busy stav. Celé uint32, default 4294967295; páruje category_bits cíle, není collision layer. |
| JoltPenetrator.set_max_angle | JoltPenetrator.set_max_angle(value) | Boolean setter přes configure; respektuje busy stav. 0 <= úhel <90°, default 20. |
| JoltPenetrator.set_max_capture_axial_speed | JoltPenetrator.set_max_capture_axial_speed(value) | Boolean setter přes configure; respektuje busy stav. >=0 m/s, default 0 (bez zadaného omezení). |
| JoltPenetrator.set_max_insertion | JoltPenetrator.set_max_insertion(value) | Boolean setter přes configure; respektuje busy stav. Kladná délka m, default 0.5. |
| JoltPenetrator.set_max_simultaneous_penetrations | JoltPenetrator.set_max_simultaneous_penetrations(value) | Boolean setter přes configure; respektuje busy stav. Celé 1..32, default 1. |
| JoltPenetrator.set_probe_length | JoltPenetrator.set_probe_length(value) | Boolean setter přes configure; respektuje busy stav. (0, 1] m, builder default 0.05. |
| JoltPenetrator.set_probe_radius | JoltPenetrator.set_probe_radius(value) | Boolean setter přes configure; respektuje busy stav. [0, 0.1] m, default 0. |
| JoltPenetrator.set_rearm_separation | JoltPenetrator.set_rearm_separation(value) | Boolean setter přes configure; respektuje busy stav. (0, 1] m, builder default 0.01. |
| JoltPenetrator.set_tip_surface_tolerance | JoltPenetrator.set_tip_surface_tolerance(value) | Boolean setter přes configure; respektuje busy stav. (0, 0.002] m, default 0.001; tolerance skutečného povrchu, ne náhrada chybné geometrie. |