Tracking Decisions
Decisions are the unit of data in IMPACT. You represent each tracked moment with a component and fire it from your gameplay logic.
AruvrTrackImpact
Add Component → ARUVR → Track Impact. A single tracked decision point.
| Field | Description |
|---|---|
| Dp Guid | Stable identifier, auto-generated. Do not change after release — history is keyed on it. |
| Label | Human-readable description shown to trainers, e.g. “Valve closed in correct sequence”. |
| Competency | The competency this decision contributes to (from the linked program). |
| Polarity | Positive (correct), Negative (mistake), or Neutral (audit only). |
Methods:
Arm()— mark the decision as available; starts the latency clock. Optional but recommended.Fire()— record that the decision was made.
The positive/negative pair pattern
The most common setup places two trackers on one competency and fires whichever matches the outcome:
using UnityEngine;
using Aruvr.Sdk;
public class ExtinguisherChoice : MonoBehaviour
{
public AruvrTrackImpact correctChoice; // competency "Extinguisher Selection", Positive
public AruvrTrackImpact wrongChoice; // same competency, Negative
void OnEmergencyStarted()
{
// Both become available at the same moment — arm both so latency is measured from here.
correctChoice.Arm();
wrongChoice.Arm();
}
void OnExtinguisherPickedUp(bool isCorrectClass)
{
if (isCorrectClass) correctChoice.Fire();
else wrongChoice.Fire();
}
}
Firing from a UnityEvent (no code)
Arm() and Fire() are public, so you can wire them straight into a Button’s OnClick, a BNG
Grabbable event, an animation event, or any UnityEvent — drag the object in and select
AruvrTrackImpact → Fire().
AruvrAssignScore
Add Component → ARUVR → Assign Score. Awards points to a competency. The sign of the points sets the polarity (positive rewards, zero or negative penalises).
| Field | Description |
|---|---|
| Dp Guid | Stable identifier, auto-generated. |
| Label | Description shown in the dashboard, e.g. “Time bonus”. |
| Points | Amount to assign. Positive = reward; zero or negative = penalty. |
| Competency | The competency the score contributes to. |
Methods:
Arm()— starts the latency clock.Fire()— assigns the inspectorpoints.Fire(int amount)— assigns an explicit amount for this event.
public AruvrAssignScore timeBonus; // points = 20 in the inspector
void OnFinishedUnderPar() => timeBonus.Fire(); // +20
void OnFinishedFast(int s) => timeBonus.Fire(50 - s); // explicit amount
Firing without components
If you prefer not to place components, drive the tracker directly with your own decision-point GUID:
AruvrTracker.Instance.Experienced(dpGuid); // equivalent to Arm()
AruvrTracker.Instance.Track(dpGuid, new AruvrDpDescription
{
kind = "track_impact",
label = "Valve closed in correct sequence",
competency_id = 11,
polarity = "positive",
});
Tips
- Arm early. Call
Arm()when the decision first becomes possible, so latency reflects thinking time rather than travel time. - One clear label per decision. The label is what a reviewer reads in the dashboard.
- Keep the GUID stable. Never regenerate it after release.
