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; } } }