Example #1
0
    public static bool showLoopToggle(ref DistanceValueList distanceValueList, DistanceValueType distanceValueType)
    {
        if (distanceValueList == null)
        {
            return(false);
        }

        List <DistanceValue> distanceValue = distanceValueList.values;

        // show the loop option if the last distance has an end
        if (distanceValue != null && distanceValue.Count > 0 && distanceValue[distanceValue.Count - 1].useEndDistance)
        {
            bool loop = GUILayout.Toggle(distanceValueList.loop, string.Format("Loop {0}", getPluralName(distanceValueType)));
            if (distanceValueList.loop != loop)
            {
                distanceValueList.loop = loop;
                return(true);
            }
        }
        else if (distanceValueList.loop)
        {
            distanceValueList.loop = false;
            return(true);
        }
        return(false);
    }
Example #2
0
    public static bool showAddNewValue(ref DistanceValueList distanceProbabilityList, ref DistanceValueList noOccurDistanceProbabilityList)
    {
        if (addNewValue)
        {
            noOccurrenceProbability = GUILayout.SelectionGrid((noOccurrenceProbability ? 1 : 0), probTypeStrings, 2) == 1;

            DistanceValueList list = (noOccurrenceProbability ? noOccurDistanceProbabilityList : distanceProbabilityList);
            if (showAddValueOptions(ref list, DistanceValueType.Probability))
            {
                return(true);
            }
        }

        if (!addNewValue && GUILayout.Button("New Probability"))
        {
            noOccurrenceProbability = false;
            useEndDistance          = false;
            startDistance           = 0;
            startValue  = 1;
            endDistance = 0;
            endValue    = 1;
            addError    = "";
            addNewValue = true;
        }

        return(false);
    }
    public override void OnInspectorGUI()
    {
        AppearanceProbability appearanceProbability = ((AppearanceProbability)target);

        DistanceValueList occurProbabilities = appearanceProbability.occurProbabilities;

        GUILayout.Label("Occur Probabilities", "BoldLabel");
        if (DistanceValueListInspector.showLoopToggle(ref occurProbabilities, DistanceValueType.Probability))
        {
            appearanceProbability.occurProbabilities = occurProbabilities;
            EditorUtility.SetDirty(target);
        }
        DistanceValueListInspector.showDistanceValues(ref occurProbabilities, DistanceValueType.Probability);

        DistanceValueList noOccurProbabilities = appearanceProbability.noOccurProbabilities;

        GUILayout.Label("No Occur Probabilities", "BoldLabel");
        if (DistanceValueListInspector.showLoopToggle(ref noOccurProbabilities, DistanceValueType.Probability))
        {
            appearanceProbability.noOccurProbabilities = noOccurProbabilities;
            EditorUtility.SetDirty(target);
        }
        DistanceValueListInspector.showDistanceValues(ref noOccurProbabilities, DistanceValueType.Probability);

        if (DistanceValueListInspector.showAddNewValue(ref occurProbabilities, ref noOccurProbabilities))
        {
            appearanceProbability.occurProbabilities   = occurProbabilities;
            appearanceProbability.noOccurProbabilities = noOccurProbabilities;
            EditorUtility.SetDirty(target);
        }
    }
Example #4
0
    private static int addValue(ref DistanceValueList distanceValueList)
    {
        if (startDistance >= endDistance && useEndDistance)
        {
            return(1);
        }

        List <DistanceValue> distanceValue;

        if (distanceValueList == null)
        {
            distanceValue = new List <DistanceValue>();
        }
        else
        {
            distanceValue = distanceValueList.values;
        }

        // add the value to the correct spot
        int insertIndex = 0;

        for (; insertIndex < distanceValue.Count; ++insertIndex)
        {
            // error if the current probability is overlapping an existing probability or within it
            if (useEndDistance && ((startDistance < distanceValue[insertIndex].startDistance && endDistance > distanceValue[insertIndex].startDistance) ||
                                   (startDistance > distanceValue[insertIndex].startDistance && endDistance < distanceValue[insertIndex].endDistance) ||
                                   (startDistance <distanceValue[insertIndex].endDistance && endDistance> distanceValue[insertIndex].endDistance) ||
                                   (!distanceValue[insertIndex].useEndDistance && endDistance > distanceValue[insertIndex].startDistance)) ||
                (!distanceValue[insertIndex].useEndDistance && startDistance > distanceValue[insertIndex].startDistance) ||
                (!useEndDistance && startDistance < distanceValue[insertIndex].endDistance))
            {
                return(2);
            }

            // two probabilities can't ignore the end distance
            if (!useEndDistance && !distanceValue[insertIndex].useEndDistance)
            {
                return(3);
            }

            // found our place
            if (useEndDistance && endDistance <= distanceValue[insertIndex].startDistance)
            {
                break;
            }
        }

        if (distanceValueList == null)
        {
            distanceValueList = new DistanceValueList(new DistanceValue(startDistance, startValue, endDistance, endValue, useEndDistance));
        }
        else
        {
            distanceValue.Insert(insertIndex, new DistanceValue(startDistance, startValue, endDistance, endValue, useEndDistance));
            distanceValueList.values = distanceValue;
        }

        return(0);
    }
    public static bool showAddNewValue(ref DistanceValueList distanceValueList, DistanceValueType distanceValueType)
    {
        if (addNewValue) {
            if (showAddValueOptions(ref distanceValueList, distanceValueType))
                return true;
        }

        if (!addNewValue && GUILayout.Button(string.Format("New {0}", Enum.GetName(typeof(DistanceValueType), (int)distanceValueType)))) {
            addError = "";
            addNewValue = true;
        }

        return false;
    }
Example #6
0
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        SectionSelection sectionSelection = (SectionSelection)target;

        if (sectionSelection.sectionSelectionType == SectionSelectionType.None)
        {
            return;
        }

        bool probabilityType = false;

        if (sectionSelection.sectionSelectionType == SectionSelectionType.ProbabilityRandom ||
            sectionSelection.sectionSelectionType == SectionSelectionType.ProbabilityLoop)
        {
            GUILayout.Label("Active Sections", "BoldLabel");
            int start = EditorGUILayout.IntField("Start Section", sectionSelection.startSection);
            if (start != sectionSelection.startSection)
            {
                sectionSelection.startSection = start;
            }
            int end = EditorGUILayout.IntField("End Section", sectionSelection.endSection);
            if (end != sectionSelection.endSection)
            {
                sectionSelection.endSection = end;
            }
            probabilityType = true;
        }

        GUILayout.Label(string.Format("Section Change {0}", probabilityType ? "Probability" : ""), "BoldLabel");
        DistanceValueList sectionList = sectionSelection.sectionList;

        if (DistanceValueListInspector.showLoopToggle(ref sectionList, probabilityType ? DistanceValueType.Probability : DistanceValueType.Section))
        {
            sectionSelection.sectionList = sectionList;
            EditorUtility.SetDirty(target);
        }
        DistanceValueListInspector.showDistanceValues(ref sectionList, probabilityType ? DistanceValueType.Probability : DistanceValueType.Section);

        if (DistanceValueListInspector.showAddNewValue(ref sectionList, probabilityType ? DistanceValueType.Probability : DistanceValueType.Section))
        {
            sectionSelection.sectionList = sectionList;
            EditorUtility.SetDirty(target);
        }
    }
Example #7
0
    public void Start()
    {
        infiniteObjectHistory = InfiniteObjectHistory.instance;

        // create a new section list for the platforms and scenes since their distances are different
        if (sectionSelectionType == SectionSelectionType.Linear) {
            platformSectionList = new DistanceValueList(sectionList.loop);
            platformSectionList.values = sectionList.values;
            platformSectionList.init();

            sceneSectionList = new DistanceValueList(sectionList.loop);
            sceneSectionList.values = sectionList.values;
            sceneSectionList.init();
        } else {
            sectionList.init();
        }
    }
Example #8
0
    public static bool showAddNewValue(ref DistanceValueList distanceValueList, DistanceValueType distanceValueType)
    {
        if (addNewValue)
        {
            if (showAddValueOptions(ref distanceValueList, distanceValueType))
            {
                return(true);
            }
        }

        if (!addNewValue && GUILayout.Button(string.Format("New {0}", Enum.GetName(typeof(DistanceValueType), (int)distanceValueType))))
        {
            addError    = "";
            addNewValue = true;
        }

        return(false);
    }
Example #9
0
    public static void showDistanceValues(ref DistanceValueList distanceValueList, DistanceValueType distanceValueType)
    {
        if (distanceValueList == null)
        {
            return;
        }

        List <DistanceValue> distanceValue = distanceValueList.values;

        if (distanceValue.Count == 0)
        {
            GUILayout.Label(string.Format("No {0}", getPluralName(distanceValueType)));
            return;
        }

        for (int i = 0; i < distanceValue.Count; ++i)
        {
            GUILayout.BeginHorizontal();
            GUILayout.Label(string.Format("{0} {1}", Enum.GetName(typeof(DistanceValueType), (int)distanceValueType), (i + 1)));
            if (GUILayout.Button("Remove"))
            {
                distanceValue.RemoveAt(i);
                break;
            }
            GUILayout.EndHorizontal();
            if (distanceValue[i].useEndDistance)
            {
                GUILayout.Label(string.Format("  Distance {0} - {1}", distanceValue[i].startDistance, distanceValue[i].endDistance));
                if (distanceValueType != DistanceValueType.Section)
                {
                    GUILayout.Label(string.Format("  With {0} {1} - {2}", Enum.GetName(typeof(DistanceValueType), (int)distanceValueType).ToLower(), Math.Round(distanceValue[i].startValue, 2), Math.Round(distanceValue[i].endValue, 2)));
                }
                else
                {
                    GUILayout.Label(string.Format("  With {0} {1}", Enum.GetName(typeof(DistanceValueType), (int)distanceValueType).ToLower(), Math.Round(distanceValue[i].startValue, 2)));
                }
            }
            else
            {
                GUILayout.Label(string.Format("  Distance {0} - End", distanceValue[i].startDistance));
                GUILayout.Label(string.Format("  With {0} {1}", Enum.GetName(typeof(DistanceValueType), (int)distanceValueType).ToLower(), Math.Round(distanceValue[i].startValue, 2)));
            }
        }
    }
Example #10
0
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();

            PlayerController playerController = (PlayerController)target;

            GUILayout.Label("Forward Speeds", "BoldLabel");
            DistanceValueList forwardSpeedList = playerController.forwardSpeeds;

            if (DistanceValueListInspector.ShowLoopToggle(ref forwardSpeedList, DistanceValueType.Speed))
            {
                playerController.forwardSpeeds = forwardSpeedList;
                EditorUtility.SetDirty(target);
            }
            DistanceValueListInspector.ShowDistanceValues(ref forwardSpeedList, DistanceValueType.Speed);

            if (DistanceValueListInspector.ShowAddNewValue(ref forwardSpeedList, DistanceValueType.Speed))
            {
                playerController.forwardSpeeds = forwardSpeedList;
                EditorUtility.SetDirty(target);
            }
        }
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        InfiniteObjectGenerator infiniteObjectGenerator = (InfiniteObjectGenerator)target;

        GUILayout.Label("No Collidable Probabilities", "BoldLabel");
        DistanceValueList distanceProbabilityList = infiniteObjectGenerator.noCollidableProbability;

        if (DistanceValueListInspector.showLoopToggle(ref distanceProbabilityList, DistanceValueType.Probability))
        {
            infiniteObjectGenerator.noCollidableProbability = distanceProbabilityList;
            EditorUtility.SetDirty(target);
        }
        DistanceValueListInspector.showDistanceValues(ref distanceProbabilityList, DistanceValueType.Probability);

        if (DistanceValueListInspector.showAddNewValue(ref distanceProbabilityList, DistanceValueType.Probability))
        {
            infiniteObjectGenerator.noCollidableProbability = distanceProbabilityList;
            EditorUtility.SetDirty(target);
        }
    }
    public static bool showAddNewValue(ref DistanceValueList distanceProbabilityList, ref DistanceValueList noOccurDistanceProbabilityList)
    {
        if (addNewValue) {
            noOccurrenceProbability = GUILayout.SelectionGrid((noOccurrenceProbability ? 1 : 0), probTypeStrings, 2) == 1;

            DistanceValueList list = (noOccurrenceProbability ? noOccurDistanceProbabilityList : distanceProbabilityList);
            if (showAddValueOptions(ref list, DistanceValueType.Probability))
                return true;
        }

        if (!addNewValue && GUILayout.Button("New Probability")) {
            noOccurrenceProbability = false;
            useEndDistance = false;
            startDistance = 0;
            startValue = 1;
            endDistance = 0;
            endValue = 1;
            addError = "";
            addNewValue = true;
        }

        return false;
    }
Example #13
0
    private static bool showAddValueOptions(ref DistanceValueList distanceValueList, DistanceValueType distanceValueType)
    {
        useEndDistance = GUILayout.Toggle(useEndDistance, "Use End Distance");

        GUILayout.BeginHorizontal();
        GUILayout.Label("Start Distance", GUILayout.Width(100));
        startDistance = EditorGUILayout.IntField(startDistance);
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        GUILayout.Label(string.Format("{0}{1}", distanceValueType != DistanceValueType.Section ? "Start " : "", Enum.GetName(typeof(DistanceValueType), (int)distanceValueType)), GUILayout.Width(100));
        if (distanceValueType == DistanceValueType.Probability)
        {
            startValue = GUILayout.HorizontalSlider(startValue, 0, 1, GUILayout.Width(100));
            GUILayout.Label(Math.Round(startValue, 2).ToString());
        }
        else if (distanceValueType == DistanceValueType.Speed)
        {
            startValue = EditorGUILayout.FloatField(startValue);
        }
        else     // section
        {
            startValue = EditorGUILayout.IntField((int)startValue);
        }
        GUILayout.EndHorizontal();

        if (useEndDistance)
        {
            GUILayout.BeginHorizontal();
            GUILayout.Label("End Distance", GUILayout.Width(100));
            endDistance = EditorGUILayout.IntField(endDistance);
            GUILayout.EndHorizontal();

            if (distanceValueType != DistanceValueType.Section)
            {
                GUILayout.BeginHorizontal();
                GUILayout.Label(string.Format("End {0}", Enum.GetName(typeof(DistanceValueType), (int)distanceValueType)), GUILayout.Width(100));
                if (distanceValueType == DistanceValueType.Probability)
                {
                    endValue = GUILayout.HorizontalSlider(endValue, 0, 1, GUILayout.Width(100));
                    GUILayout.Label(Math.Round(endValue, 2).ToString());
                }
                else if (distanceValueType == DistanceValueType.Speed)
                {
                    endValue = EditorGUILayout.FloatField(endValue);
                }
                GUILayout.EndHorizontal();
            }
        }

        if (addError.Length > 0)
        {
            GUI.contentColor = Color.red;
            GUILayout.Label(addError);
            GUI.contentColor = Color.white;
        }

        GUILayout.BeginHorizontal();
        if (GUILayout.Button("Add"))
        {
            int error;
            if ((error = addValue(ref distanceValueList)) == 0)
            {
                addNewValue = false;
                return(true);
            }
            else
            {
                switch (error)
                {
                case 1:
                    addError = "Error: Start distance must be\ngreater than end distance";
                    break;

                case 2:
                    addError = string.Format("Error: The {0} distances overlap\na different set of {0} distances", Enum.GetName(typeof(DistanceValueType), (int)distanceValueType).ToLower());
                    break;

                case 3:
                    addError = string.Format("Error: Another {0} already exists\nwhich does not have the end distance set", Enum.GetName(typeof(DistanceValueType), (int)distanceValueType).ToLower());
                    break;

                default:
                    addError = "Unknown Error";
                    break;
                }
            }
        }

        if (GUILayout.Button("Cancel"))
        {
            addNewValue = false;
        }
        GUILayout.EndHorizontal();
        return(false);
    }
    public static void showDistanceValues(ref DistanceValueList distanceValueList, DistanceValueType distanceValueType)
    {
        if (distanceValueList == null)
            return;

        List<DistanceValue> distanceValue = distanceValueList.values;

        if (distanceValue.Count == 0) {
            GUILayout.Label(string.Format("No {0}", getPluralName(distanceValueType)));
            return;
        }

        for (int i = 0; i < distanceValue.Count; ++i) {
            GUILayout.BeginHorizontal();
            if (distanceValue[i].useEndDistance && distanceValueType != DistanceValueType.Section) {
                GUILayout.Label(string.Format("{0} {1} - {2}", Enum.GetName(typeof(DistanceValueType), (int)distanceValueType), Math.Round(distanceValue[i].startValue, 2), Math.Round(distanceValue[i].endValue, 2)));
            } else {
                GUILayout.Label(string.Format("{0} {1}", Enum.GetName(typeof(DistanceValueType), (int)distanceValueType), Math.Round(distanceValue[i].startValue, 2)));
            }
            if (GUILayout.Button("Remove")) {
                distanceValue.RemoveAt(i);
                break;
            }
            GUILayout.EndHorizontal();
            if (distanceValue[i].useEndDistance) {
                GUILayout.Label(string.Format("  Distance {0} - {1}", distanceValue[i].startDistance, distanceValue[i].endDistance));
            } else {
                GUILayout.Label(string.Format("  Distance {0} - End", distanceValue[i].startDistance));
            }
        }
    }
    private static int addValue(ref DistanceValueList distanceValueList)
    {
        if (startDistance >= endDistance && useEndDistance) {
            return 1;
        }

        List<DistanceValue> distanceValue;
        if (distanceValueList == null) {
            distanceValue = new List<DistanceValue>();
        } else {
            distanceValue = distanceValueList.values;
        }

        // add the value to the correct spot
        int insertIndex = 0;
        for (; insertIndex < distanceValue.Count; ++insertIndex) {

            // error if the current probability is overlapping an existing probability or within it
            if (useEndDistance && ((startDistance < distanceValue[insertIndex].startDistance && endDistance > distanceValue[insertIndex].startDistance) ||
                (startDistance > distanceValue[insertIndex].startDistance && endDistance < distanceValue[insertIndex].endDistance) ||
                (startDistance < distanceValue[insertIndex].endDistance && endDistance > distanceValue[insertIndex].endDistance) ||
                (!distanceValue[insertIndex].useEndDistance && endDistance > distanceValue[insertIndex].startDistance)) ||
                (!distanceValue[insertIndex].useEndDistance && startDistance > distanceValue[insertIndex].startDistance) ||
                (!useEndDistance && startDistance < distanceValue[insertIndex].endDistance)) {
                    return 2;
            }

            // two probabilities can't ignore the end distance
            if (!useEndDistance && !distanceValue[insertIndex].useEndDistance) {
                return 3;
            }

            // found our place
            if (useEndDistance && endDistance <= distanceValue[insertIndex].startDistance) {
                break;
            }
        }

        if (distanceValueList == null) {
            distanceValueList = new DistanceValueList(new DistanceValue(startDistance, startValue, endDistance, endValue, useEndDistance));
        } else {
            distanceValue.Insert(insertIndex, new DistanceValue(startDistance, startValue, endDistance, endValue, useEndDistance));
            distanceValueList.values = distanceValue;
        }

        return 0;
    }
    public static bool showLoopToggle(ref DistanceValueList distanceValueList, DistanceValueType distanceValueType)
    {
        if (distanceValueList == null)
            return false;

        List<DistanceValue> distanceValue = distanceValueList.values;

        // show the loop option if the last distance has an end
        if (distanceValue != null && distanceValue.Count > 0 && distanceValue[distanceValue.Count - 1].useEndDistance) {
            bool loop = GUILayout.Toggle(distanceValueList.loop, string.Format("Loop {0}", getPluralName(distanceValueType)));
            if (distanceValueList.loop != loop ) {
                distanceValueList.loop = loop;
                return true;
            }
            if (loop) {
                GUILayout.BeginHorizontal();
                GUILayout.Label(string.Format("Loop Back To {0}", Enum.GetName(typeof(DistanceValueType), (int)distanceValueType)), GUILayout.Width(130));
                float loopBackToValue = EditorGUILayout.FloatField(distanceValueList.loopBackToValue);
                GUILayout.EndHorizontal();

                if (distanceValueList.loopBackToValue != loopBackToValue) {
                    distanceValueList.loopBackToValue = loopBackToValue;
                return true;
                }
            }
        } else if (distanceValueList.loop) {
            distanceValueList.loop = false;
            return true;
        }
        return false;
    }
    private static bool showAddValueOptions(ref DistanceValueList distanceValueList, DistanceValueType distanceValueType)
    {
        useEndDistance = GUILayout.Toggle(useEndDistance, "Use End Distance");

        GUILayout.BeginHorizontal();
        GUILayout.Label("Start Distance", GUILayout.Width(100));
        startDistance = EditorGUILayout.IntField(startDistance);
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        GUILayout.Label(string.Format("{0}{1}", distanceValueType != DistanceValueType.Section ? "Start " : "", Enum.GetName(typeof(DistanceValueType), (int)distanceValueType)), GUILayout.Width(100));
        if (distanceValueType == DistanceValueType.Probability) {
            startValue = GUILayout.HorizontalSlider(startValue, 0, 1, GUILayout.Width(100));
            GUILayout.Label(Math.Round(startValue, 2).ToString());
        } else if (distanceValueType == DistanceValueType.Speed) {
            startValue = EditorGUILayout.FloatField(startValue);
        } else { // section
            startValue = EditorGUILayout.IntField((int)startValue);
        }
        GUILayout.EndHorizontal();

        if (useEndDistance) {
            GUILayout.BeginHorizontal();
            GUILayout.Label("End Distance", GUILayout.Width(100));
            endDistance = EditorGUILayout.IntField(endDistance);
            GUILayout.EndHorizontal();

            if (distanceValueType != DistanceValueType.Section) {
                GUILayout.BeginHorizontal();
                GUILayout.Label(string.Format("End {0}", Enum.GetName(typeof(DistanceValueType), (int)distanceValueType)), GUILayout.Width(100));
                if (distanceValueType == DistanceValueType.Probability) {
                    endValue = GUILayout.HorizontalSlider(endValue, 0, 1, GUILayout.Width(100));
                    GUILayout.Label(Math.Round(endValue, 2).ToString());
                } else if (distanceValueType == DistanceValueType.Speed) {
                    endValue = EditorGUILayout.FloatField(endValue);
                }
                GUILayout.EndHorizontal();
            } else {
                endValue = startValue;
            }
        }

        if (addError.Length > 0) {
            GUI.contentColor = Color.red;
            GUILayout.Label(addError);
            GUI.contentColor = Color.white;
        }

        GUILayout.BeginHorizontal();
        if (GUILayout.Button("Add")) {
            int error;
            if ((error = addValue(ref distanceValueList)) == 0) {
                addNewValue = false;
                return true;
            } else {
                switch (error) {
                    case 1:
                        addError = "Error: Start distance must be\ngreater than end distance";
                        break;
                    case 2:
                        addError = string.Format("Error: The {0} distances overlap\na different set of {0} distances", Enum.GetName(typeof(DistanceValueType), (int)distanceValueType).ToLower());
                        break;
                    case 3:
                        addError = string.Format("Error: Another {0} already exists\nwhich does not have the end distance set", Enum.GetName(typeof(DistanceValueType), (int)distanceValueType).ToLower());
                        break;
                    default:
                        addError = "Unknown Error";
                        break;
                }
            }
        }

        if (GUILayout.Button("Cancel")) {
            addNewValue = false;
        }
        GUILayout.EndHorizontal();
        return false;
    }