Exemple #1
0
        public VLSEdge(VLSBehaviour _parent, Vector3 _pointA, Vector3 _pointB)
        {
            pointA.position.Set(_pointA.x, _pointA.y, 0);
            pointB.position.Set(_pointB.x, _pointB.y, 0);

            CalculateNormal();
        }
Exemple #2
0
        protected void DrawEdgeEditor()
        {
            Vector3      positionAverage = Vector2.zero;
            VLSBehaviour obst            = (serializedObject.targetObject as VLSBehaviour);
            Transform    transform       = obst.gameObject.transform;
            float        guiSize         = HandleUtility.GetHandleSize(transform.position) * guiScale;

            Event   e             = Event.current;
            Vector3 mousePosition = HandleUtility.GUIPointToWorldRay(e.mousePosition).origin;

            Handles.DrawSolidDisc(obst.transform.position, -Vector3.forward, guiSize);
            if (Handles.Button(obst.transform.position, Quaternion.identity, guiSize * 1.5f, guiSize * 2, Handles.CircleCap))
            {
                selectedVertices.Clear();
                Tools.hidden = false;
                //Tools.current = prevTool;
            }

            serializedObject.Update();
            {
                if (e.control)
                {
                    Vector3 vPos  = new Vector3();
                    int     index = GetClosestEdgePointToPosition(mousePosition, guiSize * 2, ref vPos);
                    if (index >= 0)
                    {
                        if (Handles.Button(vPos, Quaternion.identity, guiSize, guiSize * 2, Handles.CircleCap))
                        {
                            obst.InsertLocalVertex(index, obst.transform.InverseTransformPoint(vPos));

                            selectedVertices.Clear();
                            selectedVertices.Add(index);

                            GUI.changed  = true;
                            Tools.hidden = true;
                        }
                    }
                }

                for (int i = 0; i < vertices.arraySize; i++)
                {
                    Vector3 position   = vertices.GetArrayElementAtIndex(i).vector3Value;
                    bool    isSelected = selectedVertices.Contains(i);

                    Handles.color = (isSelected) ? Color.green : Color.gray;
                    Handles.DrawSolidDisc(transform.TransformPoint(position), Vector3.forward, guiSize);

                    if (isSelected)
                    {
                        positionAverage += obst.LocalVertex(i);
                    }

                    if (Handles.Button(transform.TransformPoint(position), Quaternion.identity, guiSize, guiSize, Handles.CircleCap))
                    {
                        if (e.shift)
                        {
                            if (selectedVertices.Contains(i))
                            {
                                selectedVertices.Remove(i);
                            }
                            else
                            {
                                selectedVertices.Add(i);
                            }
                        }
                        else
                        {
                            selectedVertices.Clear();
                            selectedVertices.Add(i);
                        }

                        Tools.hidden = true;
                    }
                }

                if (selectedVertices.Count > 0)
                {
                    positionAverage /= selectedVertices.Count;

                    Vector3 tPos  = transform.TransformPoint(positionAverage);
                    Vector3 delta = Handles.PositionHandle(tPos, (Tools.pivotRotation == PivotRotation.Global) ? Quaternion.identity : obst.transform.rotation) - tPos;

                    for (int i = 0; i < selectedVertices.Count; i++)
                    {
                        obst.LocalVertex(selectedVertices[i], obst.LocalVertex(selectedVertices[i]) + transform.InverseTransformVector(delta));
                    }

                    if (e.isKey && (e.keyCode == KeyCode.Backspace))
                    {
                        for (int i = 0; i < selectedVertices.Count; i++)
                        {
                            obst.RemoveLocalVertex(selectedVertices[i]);
                        }

                        selectedVertices.Clear();
                        GUI.changed = true;
                    }
                }
            }
            serializedObject.ApplyModifiedProperties();
        }