private void OnSequenceEntered(SegmentSequence sequence)
 {
     if (sequence.customPathGenerator != null)
     {
         LevelPathGenerator lastGenerator = currentPathGenerator;
         if (usePathGeneratorInstance)
         {
             overridePathGenerator = Instantiate(sequence.customPathGenerator);
         }
         else
         {
             overridePathGenerator = sequence.customPathGenerator;
         }
         overridePathGenerator.Continue(lastGenerator);
     }
     else if (overridePathGenerator != null)
     {
         pathGenerator.Continue(overridePathGenerator);
         if (usePathGeneratorInstance)
         {
             Destroy(overridePathGenerator);
         }
         overridePathGenerator = null;
     }
 }
 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;
 }
Exemple #3
0
        public override void OnBeforeGeneration(LevelPathGenerator generator)
        {
            base.OnBeforeGeneration(generator);
            if (!(generator is RandomPathGenerator))
            {
                return;
            }
            RandomPathGenerator randomGenerator = (RandomPathGenerator)generator;

            if (setYaw)
            {
                randomGenerator.SetTargetYaw(targetYaw);
            }
            if (setPitch)
            {
                randomGenerator.SetTargetPitch(targetPitch);
            }
            if (setRoll)
            {
                randomGenerator.SetTargetRoll(targetRoll);
            }

            if (setYawStep)
            {
                randomGenerator.SetYawStep(yawStep);
            }
            if (setPitchStep)
            {
                randomGenerator.SetPitchStep(pitchStep);
            }
            if (setRollStep)
            {
                randomGenerator.SetRollStep(rollStep);
            }
        }
Exemple #4
0
 public override void Continue(LevelPathGenerator previousGenerator)
 {
     base.Continue(previousGenerator);
     currentSegmentIndex = 0;
     CreateSpline();
     if (useRelativeCoordinates)
     {
         SetTRS();
     }
 }
 /// <summary>
 /// Logic for transfering internal data from the previous generator to the new one
 /// when changing path generators on-the-fly at runtime
 /// </summary>
 /// <param name="previousGenerator"></param>
 public virtual void Continue(LevelPathGenerator previousGenerator)
 {
     level       = previousGenerator.level;
     segment     = previousGenerator.segment;
     _isNewLevel = previousGenerator._isNewLevel;
     transform   = previousGenerator.transform;
     lastPoint   = previousGenerator.lastPoint;
     FloatingOrigin.onOriginOffset -= previousGenerator.OnOriginOffset;
     FloatingOrigin.onOriginOffset -= OnOriginOffset;
     FloatingOrigin.onOriginOffset += OnOriginOffset;
 }
        public void StartGeneration()
        {
            StopAllCoroutines();
            if (usePathGeneratorInstance)
            {
                if (overridePathGenerator != null)
                {
                    Destroy(overridePathGenerator);
                }
                if (pathGeneratorInstance != null)
                {
                    Destroy(pathGeneratorInstance);
                }
                pathGeneratorInstance = Instantiate(sharedPathGenerator);
            }
            overridePathGenerator = null;
            if (currentPathGenerator == null)
            {
                Debug.LogError("Level Generator " + name + " does not have a Path Generator assigned");
                return;
            }

            enteredLevel    = null;
            _enteredSegment = -1;
            segmentIndex    = 0;
            if (startLevel >= levels.Length)
            {
                startLevel = levels.Length - 1;
            }
            switch (levelIteration)
            {
            case LevelIteration.Ordered: levelChangeHandler = IncrementClamp; break;

            case LevelIteration.OrderedClamp: levelChangeHandler = IncrementClamp; break;

            case LevelIteration.OrderedLoop: levelChangeHandler = IncrementRepeat; break;

            case LevelIteration.Random: levelChangeHandler = RandomLevel; break;
            }
            levelIndex = startLevel;
            while (!levels[levelIndex].enabled)
            {
                levelIndex++;
                if (levelIndex >= levels.Length)
                {
                    break;
                }
            }
            LoadLevel(levels[levelIndex], true);
            currentPathGenerator.Initialize(this);
            StartCoroutine(StartRoutine());
        }
        public override void Continue(LevelPathGenerator previousGenerator)
        {
            base.Continue(previousGenerator);
            if (!(previousGenerator is HighLevelPathGenerator))
            {
                Quaternion lookRot = Quaternion.LookRotation(previousGenerator.lastPoint.tangent2 - previousGenerator.lastPoint.position, previousGenerator.lastPoint.normal);
                orientation = lookRot.eulerAngles;
                return;
            }
            HighLevelPathGenerator previousHighLevel = (HighLevelPathGenerator)previousGenerator;

            orientation = previousHighLevel.orientation;
            roll        = previousHighLevel.roll;
            lastPointHL = previousHighLevel.lastPointHL;
        }
 public virtual void OnBeforeGeneration(LevelPathGenerator generator)
 {
 }
 public override void Continue(LevelPathGenerator previousGenerator)
 {
     base.Continue(previousGenerator);
     continueOrientation = orientation;
 }
        private void OnGUI()
        {
            if (editor == null)
            {
                Close();
                return;
            }
            string name = sequence.name;

            name = EditorGUILayout.TextField("Name", name);
            if (name != sequence.name)
            {
                if (onWillChange != null)
                {
                    onWillChange();
                }
                sequence.name = name;
            }


            if (!sequence.isCustom)
            {
                SegmentSequence.Type type = sequence.type;
                type = (SegmentSequence.Type)EditorGUILayout.EnumPopup("Shuffle Type", type);
                if (type != sequence.type)
                {
                    if (onWillChange != null)
                    {
                        onWillChange();
                    }
                    sequence.type = type;
                }
                if (type == SegmentSequence.Type.Random)
                {
                    int spawnCount = sequence.spawnCount;
                    spawnCount = EditorGUILayout.IntField(new GUIContent("Spawn Count", "How many segments should this random sequence spawn? Zero will go on forever."), spawnCount);
                    if (spawnCount != sequence.spawnCount)
                    {
                        if (onWillChange != null)
                        {
                            onWillChange();
                        }
                        sequence.spawnCount = spawnCount;
                    }
                    bool preventRepeat = sequence.preventRepeat;
                    preventRepeat = EditorGUILayout.Toggle(new GUIContent("Prevent Repeating", "If true, the random algorithm will make sure not to spawn the same segment twice in a row."), preventRepeat);
                    if (preventRepeat != sequence.preventRepeat)
                    {
                        if (onWillChange != null)
                        {
                            onWillChange();
                        }
                        sequence.preventRepeat = preventRepeat;
                    }
                }
                else if (sequence.type == SegmentSequence.Type.Custom)
                {
                    SegmentShuffle customShuffle = sequence.customShuffle;
                    customShuffle = (SegmentShuffle)EditorGUILayout.ObjectField("Shuffle", customShuffle, typeof(SegmentShuffle), false);
                    if (customShuffle != sequence.customShuffle)
                    {
                        if (onWillChange != null)
                        {
                            onWillChange();
                        }
                        sequence.customShuffle = customShuffle;
                    }
                }
            }
            EditorGUILayout.Space();
            LevelPathGenerator pathGenerator = sequence.customPathGenerator;

            pathGenerator = (LevelPathGenerator)EditorGUILayout.ObjectField("Custom Path Generator", pathGenerator, typeof(LevelPathGenerator), false);
            if (pathGenerator != sequence.customPathGenerator)
            {
                if (onWillChange != null)
                {
                    onWillChange();
                }
                sequence.customPathGenerator = pathGenerator;
            }

            EditorGUILayout.Space();

            bool isCustom = sequence.isCustom;

            isCustom = EditorGUILayout.Toggle("Custom Sequence", isCustom);
            if (isCustom != sequence.isCustom)
            {
                if (onWillChange != null)
                {
                    onWillChange();
                }
                sequence.isCustom = isCustom;
            }

            if (isCustom)
            {
                CustomSequence customSequence = sequence.customSequence;
                customSequence = (CustomSequence)EditorGUILayout.ObjectField("Sequence Asset", customSequence, typeof(CustomSequence), false);
                if (customSequence != sequence.customSequence)
                {
                    if (onWillChange != null)
                    {
                        onWillChange();
                    }
                    sequence.customSequence = customSequence;
                }
                return;
            }
        }