‹›
Pomocné skripty · Penetrace těles

Více Tipů a targetů

Jeden nástroj může mít několik Tipů a jeden Tip může mít několik současných targetů.

Každý Tip má samostatné enabled, mask a kapacitu. Relationship vždy patří právě jednomu Tipu a jednomu targetu. Existující kanály na stejném penetratoru musí být směrově slučitelné; více Tipů neznamená automatické povolení nezávislých os.

Více targetů na jednom Tipu#

GML
tip = jolt_penetrator_tip(penetrator, {
    local_position: { x: 0, y: 0, z: -0.4 },
    local_axis: { x: 0, y: 0, z: -1 },
    capture_model: 2,
    max_simultaneous_penetrations: 3,
    max_insertion: 0.6
});

// Read every connection, not just the first one.
var relationships = tip.get_relationships();
for (var i = 0; i < array_length(relationships); ++i) {
    var snapshot = relationships[i].get_snapshot();
    if (is_struct(snapshot)) {
        show_debug_message(string(snapshot.target_handle) + ": " + string(snapshot.depth));
    }
}

Každý target samostatně registrujte a vhodně rozmístěte. Každé spojení má vlastní vstupní bod, odpor a efektivní max_depth. Odpor více targetů působí společně. Samotné zvýšení kapacity nezaručuje průnik přes první target ani dostatečnou délku nástroje.

Dva hroty na jednom čele#

GML
var fork = jolt_box_create_dynamic(0, 0, 1.6, 0.10, 0.10, 0.80, { mass: 1 });
var tips = [];
for (var side = -1; side <= 1; side += 2) {
    array_push(tips, jolt_penetrator_tip(fork, {
        local_position: { x: side * 0.03, y: 0, z: -0.4 },
        local_axis: { x: 0, y: 0, z: -1 },
        capture_model: 2
    }));
}

Každý vrácený Tip ověřte přes is_struct. Dva body na čele plného Boxu ilustrují více logických hrotů; samy nevyříznou tvar vidlice do collideru. Kolizní geometrie musí odpovídat zamýšlenému nástroji a podporovaným tvarům.

Filtrování kategorií#

GML
// Keep the other material settings in your own full configuration.
jolt_penetration_target(wood, { category_bits: 1, forward_force: 5, backward_force: 10 });
jolt_penetration_target(foam, { category_bits: 2, forward_force: 1, backward_force: 2 });

// Configure only while the Tip is free and not rearming.
tip.configure({ mask: 1 | 2 });

Category mask funguje navíc ke kolizním vrstvám a group filtrům. Pokud pár nemůže běžně kolidovat, penetrace nepřepíše vaši kolizní politiku. Prázdný průnik mask vrátí MaskMismatch. IncompatibleChannel označuje neslučitelnou osu; IncompatibleConstraint konflikt s existujícím uživatelským constraintem penetratoru.