Beispiel #1
0
        private void EnforceMode(int _index)
        {
            int index1 = (_index + 1) / 3;

            Spline.ControlPointMode mode = this.modes[index1];
            if (mode == Spline.ControlPointMode.Free || !this.isLooped && (index1 == 0 || index1 == this.modes.Count - 1))
            {
                return;
            }
            int index2 = index1 * 3;
            int index3;
            int index4;

            if (_index <= index2)
            {
                index3 = index2 - 1;
                if (index3 < 0)
                {
                    index3 = this.points.Count - 2;
                }
                index4 = index2 + 1;
                if (index4 >= this.points.Count - 2)
                {
                    index4 = 1;
                }
            }
            else
            {
                index3 = index2 + 1;
                if (index3 >= this.points.Count)
                {
                    index3 = 1;
                }
                index4 = index2 - 1;
                if (index4 < 0)
                {
                    index4 = this.points.Count - 2;
                }
            }
            Vector3 point   = this.points[index2];
            Vector3 vector3 = Vector3.op_Subtraction(point, this.points[index3]);

            if (mode == Spline.ControlPointMode.Aligned)
            {
                vector3 = Vector3.op_Multiply(((Vector3) ref vector3).get_normalized(), Vector3.Distance(point, this.points[index4]));
            }
            this.points[index4] = Vector3.op_Addition(point, vector3);
        }
Beispiel #2
0
        public void SetMode(int _index, Spline.ControlPointMode _mode)
        {
            int index = (_index + 1) / 3;

            this.modes[index] = _mode;
            if (this.isLooped)
            {
                if (index == 0)
                {
                    this.modes[this.modes.Count - 1] = _mode;
                }
                else if (index == this.modes.Count - 1)
                {
                    this.modes[0] = _mode;
                }
            }
            this.EnforceMode(_index);
            this.hasChanged = true;
        }
    void DrawSelectedPointInspector()
    {
        GUILayout.Label("Selected Point");
        EditorGUI.BeginChangeCheck();
        Vector3 point = EditorGUILayout.Vector3Field("Position", spline.GetControlPoint(selectedIndex));

        if (EditorGUI.EndChangeCheck())
        {
            Undo.RecordObject(spline, "Move Point");
            EditorUtility.SetDirty(spline);
            spline.SetControlPoint(selectedIndex, point);
        }
        EditorGUI.BeginChangeCheck();
        Spline.ControlPointMode mode = (Spline.ControlPointMode)EditorGUILayout.EnumPopup("Mode", spline.GetControlPointMode(selectedIndex));
        if (EditorGUI.EndChangeCheck())
        {
            Undo.RecordObject(spline, "Change Point Mode");
            spline.SetControlPointMode(selectedIndex, mode);
            EditorUtility.SetDirty(spline);
        }
    }
Beispiel #4
0
        public void AddCurve(int _atIndex, Spline.ControlPointMode _defaultMode = Spline.ControlPointMode.Mirrored)
        {
            Vector3 point1     = this.points[_atIndex * 3];
            Vector3 point2     = this.points[(_atIndex + 1) * 3];
            Vector3 vector3_1  = Vector3.op_Multiply(Vector3.op_Addition(point1, point2), 0.5f);
            Vector3 vector3_2  = Vector3.op_Subtraction(point2, point1);
            Vector3 normalized = ((Vector3) ref vector3_2).get_normalized();

            this.points.InsertRange(_atIndex * 3 + 2, (IEnumerable <Vector3>) new Vector3[3]
            {
                Vector3.op_Subtraction(vector3_1, normalized),
                vector3_1,
                Vector3.op_Addition(vector3_1, normalized)
            });
            this.modes.Insert(_atIndex, _defaultMode);
            this.EnforceMode(_atIndex);
            if (this.isLooped)
            {
                this.points[this.points.Count - 1] = this.points[0];
                this.modes[this.modes.Count - 1]   = this.modes[0];
                this.EnforceMode(0);
            }
            this.hasChanged = true;
        }
        public override void OnInspectorGUI()
        {
            EditorGUI.BeginChangeCheck();

            if (ShowInspector)
            {
                EditorGUILayout.LabelField("General Settings", EditorStyles.boldLabel);
                EditorGUI.indentLevel++;
                //bool showEditor = EditorGUILayout.Toggle("Show Editor", spline.ShowEditor);
                isLooped = EditorGUILayout.Toggle("Looped", spline.IsLooped);
                evenDistribution = EditorGUILayout.Toggle("Evenly Spaced", spline.EvenPointDistribution);
                //int resolution = EditorGUILayout.IntSlider("Algorithm Resolution", spline.OutputResolution / 500, 1, 10) * 500;
                EditorGUI.indentLevel--;
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Scene Editor", EditorStyles.boldLabel);
                EditorGUI.indentLevel++;
                ShowEditor = EditorGUILayout.Toggle("Enabled", ShowEditor);
                ShowEditorInPlayMode = EditorGUILayout.Toggle("Show Play Mode", ShowEditorInPlayMode);
                EditorGUI.indentLevel--;
                EditorGUILayout.Space();
            }

            EditorGUILayout.LabelField("Point Editor", EditorStyles.boldLabel);
            EditorGUI.indentLevel++;
            if(selectedControl >= 0)
            {
                mode = (Spline.ControlPointMode)EditorGUILayout.EnumPopup("Control Mode", spline.GetMode(selectedControl - 1 / 3));
                controlPosition = EditorGUILayout.Vector3Field("Local Position", spline.GetPoint(selectedControl));

                GUI.enabled = ((0 != selectedControl) && (spline.Points.Length - 1) != selectedControl);
                if (GUILayout.Button("Delete Control"))
                {
                    Undo.RecordObject(spline, "Deleted Spline Point");

                    spline.RemoveCurve(selectedControl / 3);
                    selectedControl = -1;

                    EditorUtility.SetDirty(spline);
                }
                GUI.enabled = true;
            }
            else
            {
                if(selectedControl == -1)
                    EditorGUILayout.HelpBox("Root point is uneditable from this editor.", MessageType.Info);
                else
                    EditorGUILayout.HelpBox("Select a point to edit the spline.", MessageType.Info);
            }
            EditorGUI.indentLevel--;

            if (EditorGUI.EndChangeCheck())
            {
                spline.IsLooped = isLooped;
                spline.EvenPointDistribution = evenDistribution;

                if (selectedControl >= 0)
                    spline.SetPoint(selectedControl, controlPosition);

                spline.SetMode(selectedControl - 1 / 3, mode);
                SceneView.RepaintAll();
            }
        }
Beispiel #6
0
        public override void OnInspectorGUI()
        {
            EditorGUI.BeginChangeCheck();

            if (ShowInspector)
            {
                EditorGUILayout.LabelField("General Settings", EditorStyles.boldLabel);
                EditorGUI.indentLevel++;
                //bool showEditor = EditorGUILayout.Toggle("Show Editor", spline.ShowEditor);
                isLooped         = EditorGUILayout.Toggle("Looped", spline.IsLooped);
                evenDistribution = EditorGUILayout.Toggle("Evenly Spaced", spline.EvenPointDistribution);
                //int resolution = EditorGUILayout.IntSlider("Algorithm Resolution", spline.OutputResolution / 500, 1, 10) * 500;
                EditorGUI.indentLevel--;
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Scene Editor", EditorStyles.boldLabel);
                EditorGUI.indentLevel++;
                ShowEditor           = EditorGUILayout.Toggle("Enabled", ShowEditor);
                ShowEditorInPlayMode = EditorGUILayout.Toggle("Show Play Mode", ShowEditorInPlayMode);
                EditorGUI.indentLevel--;
                EditorGUILayout.Space();
            }

            EditorGUILayout.LabelField("Point Editor", EditorStyles.boldLabel);
            EditorGUI.indentLevel++;
            if (selectedControl >= 0)
            {
                mode            = (Spline.ControlPointMode)EditorGUILayout.EnumPopup("Control Mode", spline.GetMode(selectedControl - 1 / 3));
                controlPosition = EditorGUILayout.Vector3Field("Local Position", spline.GetPoint(selectedControl));

                GUI.enabled = ((0 != selectedControl) && (spline.Points.Length - 1) != selectedControl);
                if (GUILayout.Button("Delete Control"))
                {
                    Undo.RecordObject(spline, "Deleted Spline Point");

                    spline.RemoveCurve(selectedControl / 3);
                    selectedControl = -1;

                    EditorUtility.SetDirty(spline);
                }
                GUI.enabled = true;
            }
            else
            {
                if (selectedControl == -1)
                {
                    EditorGUILayout.HelpBox("Root point is uneditable from this editor.", MessageType.Info);
                }
                else
                {
                    EditorGUILayout.HelpBox("Select a point to edit the spline.", MessageType.Info);
                }
            }
            EditorGUI.indentLevel--;

            if (EditorGUI.EndChangeCheck())
            {
                spline.IsLooped = isLooped;
                spline.EvenPointDistribution = evenDistribution;

                if (selectedControl >= 0)
                {
                    spline.SetPoint(selectedControl, controlPosition);
                }

                spline.SetMode(selectedControl - 1 / 3, mode);
                SceneView.RepaintAll();
            }
        }