‹›
Character

Character Sensors

Uses character body contacts to detect entry into and exit from trigger volumes.

Sensor contacts do not act as ordinary blocking geometry, but they appear in the character contact stream with sensor set to true. The high-level wrapper derives convenient one-update entry and exit events.

Preparing a sensor#

GML
var trigger = jolt_box_create_static(0, 8, 1, 4, 4, 2);
trigger.set_sensor(true);
trigger.set_user_data(obj_checkpoint);

Reading sensor transitions#

GML
jolt_update();

if (player.entered_sensor()) {
    var entered = player.get_sensor_enter_events();
}

if (player.exited_sensor()) {
    var exited = player.get_sensor_exit_events();
}

The arrays contain the same mapped contact structs as get_contacts(). Entry comes from an Added event and exit comes from Removed; inspect body, entity, position, and normal to identify the trigger.

Filtering only sensors#

GML
var contacts = player.get_contacts();
for (var i = 0; i < array_length(contacts); ++i) {
    var event = contacts[i];
    if (event.sensor) {
        // Trigger-specific handling.
    }
}

Collision layers still apply#

A sensor is visible to a character only when their encoded object layers are permitted to collide. Configure the body-layer matrix before debugging missing trigger events.

Verified operation contracts#

These contracts distinguish units, return values, errors and lifetime according to the current implementation. Check results: false, 0 and undefined can mean different things for different methods.

Symbol / ownerSignatureOperation contract
JoltCharacter.entered_sensorJoltCharacter.entered_sensor()Boolean event for the managed frame; read after jolt_update. The next managed frame begin clears it. Not persistent state (e.g. just_landed is not is_grounded).
JoltCharacter.exited_sensorJoltCharacter.exited_sensor()Boolean event for the managed frame; read after jolt_update. The next managed frame begin clears it. Not persistent state (e.g. just_landed is not is_grounded).
JoltCharacter.get_sensor_enter_eventsJoltCharacter.get_sensor_enter_events()Contact-event array: type, character, body, body_handle, body_valid, entity, sensor, position {x, y, z} m, normal, velocity {x, y, z} m/s. Read after jolt_update; sensors have separate enter/exit arrays. Not a persistent overlap list.
JoltCharacter.get_sensor_exit_eventsJoltCharacter.get_sensor_exit_events()Contact-event array: type, character, body, body_handle, body_valid, entity, sensor, position {x, y, z} m, normal, velocity {x, y, z} m/s. Read after jolt_update; sensors have separate enter/exit arrays. Not a persistent overlap list.