Pomocné skripty · Penetrace těles

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.

MetodaVracíKontrakt
tip.is_valid()BoolPř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)BoolPoprvé 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)BoolSloučí 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()BoolExplicitně 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 codePoslední diagnostický reject. Není to historie všech kandidátů ani stav relationship.
tip.get_info()Struct / undefinedAktuální konfigurace, state, reject a pole relationship handles. Snapshot s neplatným world/handlem není dostupný.
tip.get_relationship()JoltPenetrationRelationship / undefinedPrvní aktuální relationship. Při více cílech neznamená automaticky nejhlubší ani poslední zásah.
tip.get_relationships()ArrayVš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.

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

GML
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íkSignaturaKontrakt operace
JoltPenetrator.configureJoltPenetrator.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_infoJoltPenetrator.get_info()Snapshot konfigurace/stavu se schema:1; pro připravený tip handle:0, relationships:[], Idle. undefined při chybě.
JoltPenetrator.get_reject_reasonJoltPenetrator.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_relationshipJoltPenetrator.get_relationship()Aktuální živé wrappery vztahů / první z nich. Bez vztahu [] / undefined. Nejde o dokončenou historii, tu čti z Body.
JoltPenetrator.get_relationshipsJoltPenetrator.get_relationships()Aktuální živé wrappery vztahů / první z nich. Bez vztahu [] / undefined. Nejde o dokončenou historii, tu čti z Body.
JoltPenetrator.is_validJoltPenetrator.is_valid()Boolean; platný neaktivní builder může mít handle 0. Zničený host/svět či odstraněný tip neplatný.
JoltPenetrator.removeJoltPenetrator.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_gapJoltPenetrator.set_capture_gap(value)Boolean setter přes configure; respektuje busy stav. (0, 0.005] m, default 0.001.
JoltPenetrator.set_capture_modelJoltPenetrator.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_overlapJoltPenetrator.set_capture_overlap(value)Boolean setter přes configure; respektuje busy stav. (0, 0.03] m, default 0.02.
JoltPenetrator.set_contact_assistedJoltPenetrator.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_toleranceJoltPenetrator.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_enabledJoltPenetrator.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_axisJoltPenetrator.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_positionJoltPenetrator.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_maskJoltPenetrator.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_angleJoltPenetrator.set_max_angle(value)Boolean setter přes configure; respektuje busy stav. 0 <= úhel <90°, default 20.
JoltPenetrator.set_max_capture_axial_speedJoltPenetrator.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_insertionJoltPenetrator.set_max_insertion(value)Boolean setter přes configure; respektuje busy stav. Kladná délka m, default 0.5.
JoltPenetrator.set_max_simultaneous_penetrationsJoltPenetrator.set_max_simultaneous_penetrations(value)Boolean setter přes configure; respektuje busy stav. Celé 1..32, default 1.
JoltPenetrator.set_probe_lengthJoltPenetrator.set_probe_length(value)Boolean setter přes configure; respektuje busy stav. (0, 1] m, builder default 0.05.
JoltPenetrator.set_probe_radiusJoltPenetrator.set_probe_radius(value)Boolean setter přes configure; respektuje busy stav. [0, 0.1] m, default 0.
JoltPenetrator.set_rearm_separationJoltPenetrator.set_rearm_separation(value)Boolean setter přes configure; respektuje busy stav. (0, 1] m, builder default 0.01.
JoltPenetrator.set_tip_surface_toleranceJoltPenetrator.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.