public void Tick(IClientWorldAccessor world, float dt) { var time = DateTime.Now - _timeStarted; if (time >= _duration) { if (_currentLoop < _loop || _loop < 0) { _timeStarted = DateTime.Now; _currentLoop++; } else { Finish(world); } } else { (world as ClientMain).SetField("ShouldRender2DOverlays", true); long durationOfPoint = _duration.Milliseconds / (TempNodes.Count - 1); var currentPoint = Math.Min((int)(time.Milliseconds / durationOfPoint), TempNodes.Count - 2); var point1 = TempNodes[currentPoint]; var point2 = TempNodes[currentPoint + 1]; var percent = (time.Milliseconds % durationOfPoint) / (double)durationOfPoint; var newPoint = _cachedMode.GetPointBetween(point1, point2, percent, (double)time.Milliseconds / _duration.Milliseconds, _renderTickTime, _currentLoop == 0, _currentLoop == _loop); if (newPoint != null) { _cachedMode.ProcessPoint(newPoint); } } }