Kolizní systém

Sensory / Triggery

Detekují překryvy a kontakty bez fyzické collision response.

Sensor zůstává běžným collision shape pro broad-phase filtering, contact events a raycasts, ale Jolt jej nepoužívá k odstrčení ani blokování jiných bodies.

High-Level API#

GML
body.set_sensor(enabled)
body.is_sensor()

Creation option#

GML
var trigger_layer = jolt_layer_create("Triggers");
var trigger = jolt_box_create_dynamic(0, 0, 2, 4, 4, 4, {
    sensor: true,
    layer: trigger_layer
});
trigger.set_user_data({kind:"DamageZone", damage:10});

Sdílená body option sensor má default false. set_sensor() stav mění za běhu a aktivuje non-Static bodies. is_sensor() vrací Boolean; native chyby zachytí high-level wrapper.

Chování sensoru#

VlastnostChování sensoru
Physical responseVypnutá
ENTER / STAY / EXIT contactsVznikají, dovolí-li dvojici layer filtering
Raycast hitJe zahrnut
Collision layersJsou respektovány
Motion typeSensorem může být Dynamic, Static i Kinematic shape

Čtení trigger events#

GML
jolt_update();

var events = trigger.get_collisions();
for (var i = 0; i < array_length(events); ++i) {
    var event = events[i];
    if (event.type == JOLT_COLLISION_ENTER) {
        show_debug_message("Entered trigger");
    }
}

Per-body event má sensor=true, pokud je sensorem kterýkoli účastník. World events zpřístupňují body_a_sensor a body_b_sensor odděleně.

Filtrování a vizualizace#

Sensor pair stále potřebuje povolenou kombinaci collision layers. Raycasts sensory automaticky nevylučují. Debug draw zobrazuje sensory pouze při zapnutém JOLT_DEBUG_SENSORS; samotné JOLT_DEBUG_SHAPES kreslí non-sensor bodies.

GML
jolt_debug_enable(true);
jolt_debug_set(JOLT_DEBUG_SENSORS, true);
jolt_debug_draw();

Low-Level / Advanced API#

Obě funkce používají číselné world/body handly. Setter vrací 1/0; getter vrací 1/0 a neplatné handly hlásí přes native error state.

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
JoltBody.is_sensorJoltBody.is_sensor()Setter Boolean úspěchu, getter Boolean (false i při chybě). Sensor detekuje překryvy bez běžné kontaktní odezvy.
JoltBody.set_sensorJoltBody.set_sensor(sensor)Setter Boolean úspěchu, getter Boolean (false i při chybě). Sensor detekuje překryvy bez běžné kontaktní odezvy.