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:

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:

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