public void StartInterpolating() { if (CurrentState == InterpolatorState.Uninitialized) { CurrentState = InterpolatorState.WaitingFirstFrame; } }
private void SetStateAndRemove(T newState) { if (newState != null) { CurrentState = InterpolatorState.Interpolating; PastState = newState; _time = PastState.TimeStamp(); _frames.Remove(newState); } }
private void PickPastState() { if (CurrentState == InterpolatorState.Uninitialized) { return; } var newPastState = _frames.FirstOrDefault().Key; if (CurrentState == InterpolatorState.WaitingFirstFrame) { if (_frames.Count >= FrameBufferSize) { SetStateAndRemove(newPastState); } return; } if (_targetState == null && (_time - PastState.TimeStamp() > MaxTimeUntilJump || _frames.Count < FrameBufferSize)) { PastState = default(T); CurrentState = InterpolatorState.WaitingFirstFrame; return; } if (_targetState == null) { return; } while (newPastState != null && newPastState.TimeStamp() <= _targetState.TimeStamp()) { _frames.Remove(newPastState); newPastState = _frames.FirstOrDefault().Key; } }