void Update()
        {
            if (_lineCircle == null)
            {
                return;
            }

            //every [interval] frames...
            if (Time.frameCount % Interval != 0 || Pause)
            {
                return;
            }

            if (OscillateTimespan)
            {
                _timeSpanOscillationT += Time.deltaTime * 2f * Mathf.PI / TimeSpanOscillationPeriod;

                var lastFrontEdge   = _lineCircle.Pattern.TimeSpan + _lineCircle.Pattern.TimeOffset;
                var oscillationLerp = 0.5f - 0.5f * Mathf.Cos(_timeSpanOscillationT);

                //Update Timespan
                _lineCircle.Pattern.TimeSpan = Mathf.Lerp(
                    Mathf.Lerp(0f, _lineCircle.Pattern.MaxTimePossible, MaxTimeLerp),
                    _lineCircle.Pattern.MaxTimePossible,
                    oscillationLerp);

                //If we've finished an oscillation period, shuffle to the next pattern
                if (_timeSpanOscillationT >= Mathf.PI * 2f)
                {
                    if (_hasShuffler && _shuffler.DoAutoShuffle)
                    {
                        _shuffler.NextPattern();
                    }
                }

                //Ensure that the front-facing edge is exactly on a line
                _lineCircle.Pattern.TimeSpan -= _lineCircle.Pattern.TimeSpan % _lineCircle.Pattern.TimeStep;
                var desiredFrontEdge = lastFrontEdge + _lineCircle.Pattern.TimeStep * Count;
                if (!float.IsNaN(desiredFrontEdge) && !float.IsNaN(_lineCircle.Pattern.TimeSpan))
                {
                    _lineCircle.Pattern.TimeOffset = desiredFrontEdge - _lineCircle.Pattern.TimeSpan;
                }
                //LineCircle.Pattern.TimeOffset += LineCircle.Pattern.TimeStep * Count; //increase time offset
            }
            else
            {
                if (StepOffset)
                {
                    _lineCircle.Pattern.TimeOffset += _lineCircle.Pattern.TimeStep * Count;
                }

                //increase draw count
                if (!StepCount)
                {
                    return;
                }

                if (_lineCircle.Pattern.TimeSpan >= _lineCircle.Pattern.MaxTimePossible)
                {
                    _lineCircle.Pattern.TimeSpan    = _lineCircle.Pattern.MaxTimePossible;
                    _lineCircle.Pattern.TimeOffset += _lineCircle.Pattern.TimeStep * Count;
                }
                else
                {
                    _lineCircle.Pattern.TimeSpan += _lineCircle.Pattern.TimeStep * Count;
                }
            }
        }