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#
body.set_sensor(enabled)
body.is_sensor()Creation option#
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#
| Vlastnost | Chování sensoru |
|---|---|
| Physical response | Vypnutá |
| ENTER / STAY / EXIT contacts | Vznikají, dovolí-li dvojici layer filtering |
| Raycast hit | Je zahrnut |
| Collision layers | Jsou respektovány |
| Motion type | Sensorem může být Dynamic, Static i Kinematic shape |
Čtení trigger events#
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.
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ík | Signatura | Kontrakt operace |
|---|---|---|
| JoltBody.is_sensor | JoltBody.is_sensor() | Setter Boolean úspěchu, getter Boolean (false i při chybě). Sensor detekuje překryvy bez běžné kontaktní odezvy. |
| JoltBody.set_sensor | JoltBody.set_sensor(sensor) | Setter Boolean úspěchu, getter Boolean (false i při chybě). Sensor detekuje překryvy bez běžné kontaktní odezvy. |