Example #1
0
 IEnumerator ClearRoutine()
 {
     _ready = false;
     if (usePathGeneratorInstance && overridePathGenerator != null)
     {
         Destroy(overridePathGenerator);
     }
     overridePathGenerator = null;
     while (isLoadingLevel)
     {
         yield return(null);
     }
     LevelSegment.ResetGenerationState();
     SegmentExtruder.instance.Stop();
     for (int i = 0; i < levels.Length; i++)
     {
         if (levels[i].remoteSequence && levels[i].isReady)
         {
             yield return(StartCoroutine(UnloadRemoteLevel(levels[i], ThreadPriority.High)));
         }
     }
     for (int i = 0; i < _segments.Count; i++)
     {
         _segments[i].DestroyImmediate();
     }
     ResourceManagement.UnloadResources();
     _segments.Clear();
     enteredLevel    = null;
     _enteredSegment = -1;
 }
Example #2
0
        IEnumerator StartRoutine()
        {
            _ready = false;
            _generationProgress = 0f;
            while (isLoadingLevel && !testMode)
            {
                yield return(null);
            }
            LevelSegment.ResetGenerationState();
            int count = 0;

            if (type == Type.Finite)
            {
                count = finiteSegmentsCount;
            }
            else
            {
                count = 1 + generateSegmentsAhead;
            }
            StartCoroutine(ProgressRoutine(count));
            for (int i = 0; i < count; i++)
            {
                CreateNextSegment();
                yield return(new WaitForSeconds(0.1f));
            }
            for (int i = 0; i < _segments.Count; i++)
            {
                while (_segments.Count > i && !_segments[i].extruded && _segments[i].type == LevelSegment.Type.Extruded)
                {
                    yield return(null);
                }
                if (type == Type.Finite)
                {
                    _segments[i].Activate();
                }
            }
            if (type == Type.Finite)
            {
                if (finiteLoop)
                {
                    _segments[_segments.Count - 1].next = _segments[0];
                    _segments[0].previous = _segments[_segments.Count - 1];
                }
            }
            _segments[0].Enter();
            while (LevelSegment.generationState != LevelSegment.GenerationState.Idle)
            {
                yield return(null);
            }
            _ready = true;
            if (onReady != null)
            {
                onReady();
            }
        }