update method

void update(
  1. double dt,
  2. String? hitNodeId
)

Call each frame with the currently gazed node ID (or null).

Implementation

void update(double dt, String? hitNodeId) {
  if (hitNodeId != _gazeTargetId) {
    // Gaze changed target
    if (_gazeTargetId != null) onGazeExit?.call(_gazeTargetId!);
    _gazeTargetId = hitNodeId;
    _gazeTimer = 0;
    _selected = false;
    dwellProgress = 0;
    if (hitNodeId != null) onGazeEnter?.call(hitNodeId);
    return;
  }

  if (hitNodeId == null) {
    dwellProgress = 0;
    return;
  }

  _gazeTimer += dt;
  dwellProgress = (_gazeTimer / dwellDuration).clamp(0, 1);

  if (dwellProgress >= 1.0 && !_selected) {
    _selected = true;
    onDwellSelect?.call(hitNodeId);
  }
}