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