advance method

  1. @override
double advance(
  1. double dt
)
override

Advances this controller's internal clock by dt, returning any leftover time once finished.

Implementation

@override
double advance(double dt) {
  assert(dt >= 0, 'Delta time cannot be negative.');
  var remaining = dt;

  if (!_reversed) {
    final step = math.min(remaining, _legDuration - _legElapsed);
    child.advance(step);
    _legElapsed += step;
    remaining -= step;

    if (_legElapsed < _legDuration) return 0;

    _reversed = true;
    _legElapsed = 0;
  }

  final step = math.min(remaining, _legDuration - _legElapsed);
  child.recede(step);
  _legElapsed += step;
  remaining -= step;

  if (_legElapsed >= _legDuration) _finished = true;

  return remaining;
}