Ejemplo n.º 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);
    }
        public static void ShowDistanceValues(ref DistanceValueList distanceValueList, DistanceValueType distanceValueType)
        {
            List<DistanceValue> distanceValue;

            if (distanceValueList == null || (distanceValue = distanceValueList.values) == null || 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));
                }
            }
        }
        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;
        }
Ejemplo n.º 4
0
    private static string getPluralName(DistanceValueType distanceValueType)
    {
        switch (distanceValueType)
        {
        case DistanceValueType.Probability:
            return("probabilities");

        case DistanceValueType.Speed:
            return("speeds");

        case DistanceValueType.Section:
            return("sections");
        }
        return("");
    }
Ejemplo n.º 5
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);
    }
Ejemplo n.º 6
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)));
            }
        }
    }
        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));
                    int loopBackToIndex = EditorGUILayout.IntField(distanceValueList.loopBackToIndex);
                    GUILayout.EndHorizontal();

                    if (distanceValueList.loopBackToIndex != loopBackToIndex)
                    {
                        distanceValueList.loopBackToIndex = loopBackToIndex;
                        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;
        }
 private static string GetPluralName(DistanceValueType distanceValueType)
 {
     switch (distanceValueType) {
         case DistanceValueType.Probability:
             return "probabilities";
         case DistanceValueType.Speed:
             return "speeds";
         case DistanceValueType.Section:
             return "sections";
     }
     return "";
 }
        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));
                    int loopBackToIndex = EditorGUILayout.IntField(distanceValueList.loopBackToIndex);
                    GUILayout.EndHorizontal();

                    if (distanceValueList.loopBackToIndex != loopBackToIndex) {
                        distanceValueList.loopBackToIndex = loopBackToIndex;
                        return true;
                    }
                }
            } else if (distanceValueList.loop) {
                distanceValueList.loop = false;
                return true;
            }
            return false;
        }
Ejemplo n.º 11
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);
    }
        private static int AddValue(ref DistanceValueList distanceValueList, DistanceValueType distanceValueType)
        {
            if (startDistance >= endDistance && useEndDistance) {
                return 1;
            }

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

            // 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;
                }
            }
            float startValue = 0;
            switch (distanceValueType) {
                case DistanceValueType.Probability:
                    startValue = startSliderValue;
                    break;
                case DistanceValueType.Speed:
                    startValue = startFloatValue;
                    break;
                case DistanceValueType.Section:
                    startValue = startIntValue;
                    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;
        }
        private static int AddValue(ref DistanceValueList distanceValueList, DistanceValueType distanceValueType)
        {
            if (startDistance >= endDistance && useEndDistance)
            {
                return(1);
            }

            List <DistanceValue> distanceValue = null;

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

            // 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;
                }
            }
            float startValue = 0;

            switch (distanceValueType)
            {
            case DistanceValueType.Probability:
                startValue = startSliderValue;
                break;

            case DistanceValueType.Speed:
                startValue = startFloatValue;
                break;

            case DistanceValueType.Section:
                startValue = startIntValue;
                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);
        }