Stavy a události
Odlište průběžný stav od jednorázové události a reagujte až na skutečný vstup.
jolt_penetration_events() vrací struct {schema, dropped_total, events}, případně undefined. Čtení frontu vyprázdní. Jeden centrální consumer ji přečte po jolt_update a rozdělí výsledky audio, damage a dalším systémům; další consumer by dostal prázdné pole.
Veřejné stavy#
| JoltPenetrationState | Hodnota | Význam |
|---|---|---|
| Idle | 0 | Bez aktivního spojení a bez aktuální blokující situace. |
| Candidate | 1 | Tip čeká na vhodné podmínky u povrchu. |
| Penetrating | 2 | Skutečný vstup již nastal; relationship je v aktivním režimu penetrace. |
| Embedded | 3 | Odvozený stav po dostatečně klidném pobytu uvnitř materiálu, nikoli další pevný weld. |
| Extracting | 4 | Pohyb ven nebo fáze uvolňování. |
| AtLimit | 5 | Dosažení oblasti efektivního max_depth. |
| Blocked | 6 | Agregovaný stav Tipu při odmítnutí; čtěte reject_reason. |
| Ended | 7 | Ukončené relationship v koncovém event snapshotu. |
| Captured | 8 | Vytvořené relationship před actual entry; has_entered=false. |
Události#
| JoltPenetrationEvent | Hodnota | Kdy vzniká |
|---|---|---|
| Start | 1 | První skutečný entry tohoto relationship; snapshot má has_entered=true. |
| Embedded | 2 | Přechod do odvozeného embedded stavu. |
| ExtractionStart | 3 | Přechod do vytahování. Může nastat znovu po opětovném zasunutí v témže relationship. |
| Extracted | 4 | Úplné vytažení relationship, které mělo actual entry. |
| AtLimit | 5 | Přechod k hloubkovému limitu. |
| End | 6 | Ukončení z libovolného důvodu; při normálním vytažení následuje po Extracted. |
Koncové důvody#
| JoltPenetrationEndReason | Hodnota | Význam |
|---|---|---|
| Extracted | 1 | Úplné vytažení. |
| PenetratorDestroyed | 2 | Zničen penetrator body. |
| TargetDestroyed | 3 | Zničen target body. |
| TipRemoved | 4 | Explicitně odstraněn Tip. |
| WorldStopped | 5 | Ukončení světa; fronta se při teardown také čistí. |
| CaptureCancelled | 6 | Capture skončil před actual entry; nečekejte Start ani Extracted. |
Formát a zpracování#
Každá událost má sequence, type, end_reason a snapshot. sequence roste; end_reason je 0 u událostí bez koncového důvodu. Snapshot je samostatná kopie nativních dat relationship včetně handles, hloubky a geometrií; na rozdíl od rel.get_snapshot() neobsahuje GML target wrapper. Identifikujte target přes snapshot.target_handle a vlastní registry.
Před tímto Step kódem inicializujte last_dropped=0 v Create. Události neupravujte jako způsob řízení simulace.
var batch = jolt_penetration_events();
if (is_struct(batch)) {
if (batch.dropped_total > last_dropped) {
show_debug_message("Penetration event loss detected");
}
last_dropped = batch.dropped_total;
for (var i = 0; i < array_length(batch.events); ++i) {
var event = batch.events[i];
var snapshot = event.snapshot;
switch (event.type) {
case JoltPenetrationEvent.Start:
show_debug_message("Entered " + string(snapshot.target_handle));
break;
case JoltPenetrationEvent.Extracted:
show_debug_message("Extracted " + string(snapshot.handle));
break;
case JoltPenetrationEvent.End:
show_debug_message("Ended: " + string(event.end_reason));
break;
}
}
}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_penetration_events | jolt_penetration_events() | Aktuální schema:1 snapshot events/metrik managed světa, undefined při neplatném světě/transportu; není příkaz změny fyziky. |