Sensory - coldrockgames/gml-raptor GitHub Wiki
Interfaces
ISensorfor general event-driven collision awareness.IRadarfor fast, lightweight proximity checks.ICollisionRadarfor precise, mask-based collision needs.
How to use:
sensor = {
radius: 300,
target_types: [StatefulObject],
on_enter: function(_collision) { ... }
};
implement(ISensor); // it's important to implement the interface after the configuration
radar = {
radius: 300,
target_types: [StatefulObject],
on_enter: function(_collision) { ... }
};
implement(IRadar);
cradar = {
radius: 300,
target_types: [StatefulObject],
on_enter: function(_collision) { ... }
};
implement(ICollisionRadar);
They can be used for:
- Enemy AI: Detect when a player or NPC enters a guard’s detection zone (
on_enter) and trigger pursuit. - Stealth Mechanics: Use
detail_modeto know exactly how close the player is and raise alerts gradually. - Power-ups or Collectibles: Detect when the player comes within range to highlight or attract items.
- Multiplayer/Allies: Show nearby team mates on a minimap or radar UI.
- Environmental Hazards: Trigger traps, turrets, or alarms when an object enters a danger zone.
Configuration
Each sensor is enriched with default properties:
is_enabled(bool): Whether the sensor is active. Default:true.interval(number): Update interval (steps between checks). Default:5.radius(number): Detection radius. Default:30.offset(array [x,y]): Position offset relative to the instance. Default:[0, 0].target_instances(array): Specific instances to detect.target_types(array): Object types to detect.
And there are a few more for ICollisionRadar:
-
exclude_myself(bool): Whether the radar should ignore its own instance during detection. Default:true. -
precise_collision_masks(bool):
If enabled, collisions use precise sprite masks (pixel-perfect).
If disabled, bounding boxes are used.
Default:false. -
order_instances(bool): Whether detected instances should be ordered by distance in the result list. Default:false.
Event Hooks
Sensors can define these optional callbacks for custom behavior:
on_enter(_collision)→ Runs when a new collision is detected.on_step(_collision)→ Runs each update while a collision persists.on_leave(_collision)→ Runs when a collision ends.
Collision Structs
When a sensor or radar detects a collision, it can return detailed information in a structured format if detail_mode is enabled. These structs typically include the following fields:
-
other(id)
The ID of the other instance that was detected by the sensor or radar. -
distance_other(number)
The distance between the sensor’s center and the detected instance.
for Sensors:
- distance_overlap (number): The overlap distance from both sensor radii (calculated as
r1 + r2 - distance_other).
for Radars:
distance_border(number)
The distance from the detected instance to the edge of the sensor or radar radius (calculated asradius - distance_other).
Sensory lifecycle
flowchart LR
A[Start Sensor Check] --> C{Sensor Enabled?}
C -- No --> R[Skip]
C -- Yes --> D[Perform Collision Check]
D --> E{Collision Detected?}
E -- No --> L[on_leave]
E -- Yes --> F{New Collision?}
F -- Yes --> G[on_enter]
F -- No --> H[on_step]
G --> U[Repeat check]
H --> U
L --> U
U --> A