예제 #1
0
        private void SortAndUpdate()
        {
            if (!Grid)
            {
                return;
            }

            if (!Grid.vertices[0].go)
            {
                InitGridIfNull();
            }

            UpdateLocalSpaceMousePosition();

            editedMesh.SortAround(collisionPosLocal, false);

            const float scaling = 16;

            Grid.selectedVertex.go.SetActive(false);
            Grid.pointedVertex.go.SetActive(false);

            for (var i = 0; i < verticesShowMax; i++)
            {
                Grid.vertices[i].go.SetActive(false);
            }

            if (!MeshTool.ShowVertices)
            {
                return;
            }

            var camTf = CurrentViewTransform();

            for (var i = 0; i < verticesShowMax; i++)
            {
                RaycastHit hit;

                if (editedMesh.meshPoints.Count <= i)
                {
                    continue;
                }

                var mark  = Grid.vertices[i];
                var point = editedMesh.meshPoints[i];

                var worldPos = point.WorldPos;
                var tmpScale = Vector3.Distance(worldPos, camTf.position) / scaling;

                if (point == editedMesh.PointedVertex)
                {
                    mark = Grid.pointedVertex; tmpScale *= 2;
                }
                else if (GetSelectedVertex() == editedMesh.meshPoints[i])
                {
                    mark      = Grid.selectedVertex;
                    tmpScale *= 1.5f;
                }

                var go = mark.go;
                var tf = go.transform;


                go.SetActive(true);
                tf.position   = worldPos;
                tf.rotation   = camTf.rotation;
                tf.localScale = new Vector3((editedMesh.IsInTriangleSet(point) ? 1.5f : 1) * tmpScale, tmpScale, tmpScale);

                var tmpRay = new Ray {
                    origin = camTf.position
                };

                tmpRay.direction = tf.position - tmpRay.origin;

                if (Physics.Raycast(tmpRay, out hit, 1000) && (!meshEditorIgnore.Contains(hit.transform.tag)))
                {
                    mark.go.SetActive(false);
                }

                mark.textm.color = SameTriangleAsPointed(point) ? Color.white : Color.gray;


                MeshTool.AssignText(mark, point);
            }
        }
예제 #2
0
        void SORT_AND_UPDATE_UI()
        {
            if (Grid == null)
            {
                return;
            }

            if (Grid.verts[0].go == null)
            {
                InitVertsIfNUll();
            }

            // if (_meshTool == MeshTool.vertices)
            //   DrowLinesAroundTargetPiece();

            UpdateLocalSpaceV3s();

            edMesh.SortAround(collisionPosLocal, false);

            float scaling = 16;

            Grid.selectedVertex.go.SetActiveTo(false);
            Grid.pointedVertex.go.SetActiveTo(false);

            for (int i = 0; i < vertsShowMax; i++)
            {
                Grid.verts[i].go.SetActiveTo(false);
            }

            if (MeshTool.ShowVertices)
            {
                for (int i = 0; i < vertsShowMax; i++)
                {
                    if (edMesh.meshPoints.Count > i)
                    {
                        MarkerWithText mrkr   = Grid.verts[i];
                        MeshPoint      vpoint = edMesh.meshPoints[i];

                        Vector3 worldPos = vpoint.WorldPos;
                        float   tmpScale;
                        tmpScale = Vector3.Distance(worldPos,
                                                    Transform.gameObject.TryGetCameraTransform().position) / scaling;

                        if (GetPointedVert() == vpoint)
                        {
                            mrkr = Grid.pointedVertex; tmpScale *= 2;
                        }
                        else if (GetSelectedVert() == edMesh.meshPoints[i])
                        {
                            mrkr      = Grid.selectedVertex;
                            tmpScale *= 1.5f;
                        }

                        mrkr.go.SetActiveTo(true);
                        mrkr.go.transform.position   = worldPos;
                        mrkr.go.transform.rotation   = Transform.gameObject.TryGetCameraTransform().rotation;
                        mrkr.go.transform.localScale = new Vector3((IsInTrisSet(vpoint) ? 1.5f : 1) * tmpScale, tmpScale, tmpScale);

                        Ray        tmpRay = new Ray();
                        RaycastHit hit;
                        tmpRay.origin    = Transform.gameObject.TryGetCameraTransform().position;
                        tmpRay.direction = mrkr.go.transform.position - tmpRay.origin;

                        if ((Physics.Raycast(tmpRay, out hit, 1000)) && (!PlaytimeToolComponent.MeshEditorIgnore.Contains(hit.transform.tag)))
                        {
                            mrkr.go.SetActiveTo(false);
                        }

                        if (SameTrisAsPointed(vpoint))
                        {
                            mrkr.textm.color = Color.white;
                        }
                        else
                        {
                            mrkr.textm.color = Color.gray;
                        }


                        MeshTool.AssignText(mrkr, vpoint);
                    }
                }
            }
        }