public static void testLineMesh()
    {
        Mesh mesh = MeshUtil.createSquareSideLineMesh(new IntVector2(0, 0), new IntVector2(100, 200), 15f);

        MeshUtil.saveSharedMeshAsset("testLinemesh", mesh);
    }
Exemplo n.º 2
0
    public static Mesh RemeshTest(Mesh inMesh, double fResScale = 1.0, int iterations = 50)
    {
        inMesh.Faces.ConvertQuadsToTriangles();
        DMesh3 mesh = inMesh.ToDMesh3();

        mesh.CheckValidity();
        AxisAlignedBox3d bounds = mesh.CachedBounds;

        // construct mesh projection target
        DMesh3 meshCopy = new DMesh3(mesh);

        meshCopy.CheckValidity();
        DMeshAABBTree3 tree = new DMeshAABBTree3(meshCopy);

        tree.Build();
        MeshProjectionTarget target = new MeshProjectionTarget()
        {
            Mesh    = meshCopy,
            Spatial = tree
        };

        // construct constraint set
        MeshConstraints cons = new MeshConstraints();

        //EdgeRefineFlags useFlags = EdgeRefineFlags.NoFlip | EdgeRefineFlags.NoCollapse;
        EdgeRefineFlags useFlags = EdgeRefineFlags.NoFlip;

        foreach (int eid in mesh.EdgeIndices())
        {
            double fAngle = MeshUtil.OpeningAngleD(mesh, eid);
            if (fAngle > 30.0)
            {
                cons.SetOrUpdateEdgeConstraint(eid, new EdgeConstraint(useFlags));
                Index2i ev      = mesh.GetEdgeV(eid);
                int     nSetID0 = (mesh.GetVertex(ev[0]).y > bounds.Center.y) ? 1 : 2;
                int     nSetID1 = (mesh.GetVertex(ev[1]).y > bounds.Center.y) ? 1 : 2;
                cons.SetOrUpdateVertexConstraint(ev[0], new VertexConstraint(true, nSetID0));
                cons.SetOrUpdateVertexConstraint(ev[1], new VertexConstraint(true, nSetID1));
            }
        }

        Remesher r = new Remesher(mesh);

        r.Precompute();
        r.SetExternalConstraints(cons);
        r.SetProjectionTarget(target);

        r.EnableFlips     = r.EnableSplits = r.EnableCollapses = true;
        r.MinEdgeLength   = 0.5 * fResScale;
        r.MaxEdgeLength   = 1.0 * fResScale;
        r.EnableSmoothing = true;
        r.SmoothSpeedT    = 0.5;

        try
        {
            for (int k = 0; k < iterations; ++k)
            {
                r.BasicRemeshPass();
                // mesh.CheckValidity();
            }
        }
        catch
        {
            // ignore
        }

        return(mesh.ToRhinoMesh());
    }
Exemplo n.º 3
0
        private void RebuildItemGrid(int focused)
        {
            bool ItemFound = false;

            for (int y = 0; y < ItemGridDimensions.y; y++)
            {
                for (int x = 0; x < ItemGridDimensions.x; x++)
                {
                    // Find the item and mesh
                    int  i    = x + y * (int)ItemGridDimensions.x;
                    Item Item = Inventory.Drive.GetItemAt(x + y * (int)ItemGridDimensions.x);
                    if (Item != null && (!ItemGridContainedItems.ContainsKey(i) || ItemGridContainedItems[i] != Item))
                    {
                        // Clear cell
                        for (int j = 0; j < ItemGridCells[i].childCount; j++)
                        {
                            DestroyImmediate(ItemGridCells[i].GetChild(j).gameObject);
                        }

                        // Add new item
                        GameObject ItemObject = PrefabDB.Create(Item.ModelID, ItemGridCells[i]);
                        MeshUtil.SetMaterial(ItemObject, ItemGridHologramMaterial);
                        ItemGridContainedItems[i] = Item;
                    }
                    else if (Item == null && ItemGridContainedItems.ContainsKey(i))
                    {
                        for (int j = 0; j < ItemGridCells[i].childCount; j++)
                        {
                            Destroy(ItemGridCells[i].GetChild(j).gameObject);
                        }
                        ItemGridContainedItems.Remove(i);
                    }

                    // Set the base scale and spin status
                    float Scale    = 0.13f;
                    bool  Spinning = false;

                    if (focused == i || ItemGridSelectedIndex == i)
                    {
                        // Item is selected or hovered, animate
                        Scale    = 0.16f;
                        Spinning = true;
                    }

                    if (ItemGridSelectedIndex == i)
                    {
                        // Set preview information
                        if (ItemGridCells[i].childCount > 0)
                        {
                            SetPreviewItem(Item);
                        }
                        TextTextureProperties NameProps        = ItemNameText.TextProperties;
                        TextTextureProperties DescriptionProps = ItemDescriptionText.TextProperties;
                        if (Item != null)
                        {
                            NameProps.Text        = Item.Name;
                            DescriptionProps.Text = Item.Description;
                            ItemFound             = true;
                        }
                        else
                        {
                            NameProps.Text        = "";
                            DescriptionProps.Text = "";
                        }
                        ItemNameText.SetTextProperties(NameProps);
                        ItemDescriptionText.SetTextProperties(DescriptionProps);

                        // Move selector
                        if ((ItemGridSelector.position - ItemGridCells[i].position).magnitude < 0.01f)
                        {
                            ItemGridSelector.position = ItemGridCells[i].position;
                        }
                        else
                        {
                            ItemGridSelector.position =
                                Vector3.Lerp(ItemGridSelector.position,
                                             ItemGridCells[i].position, 10f * Time.deltaTime);
                        }
                        Vector3 NewRot = ItemGridSelector.localEulerAngles;
                        NewRot.z = 0;
                        ItemGridSelector.localEulerAngles = NewRot;
                    }

                    if (!Spinning)
                    {
                        // Not selected, reset rotation
                        if (ItemGridCells[i].childCount > 0)
                        {
                            Transform ItemTransform = ItemGridCells[i].GetChild(0);
                            ItemTransform.LookAt(Camera.transform);
                            Vector3 NewRot = ItemTransform.localEulerAngles;
                            NewRot.z  = 0;
                            NewRot.y += 90;
                            ItemTransform.localEulerAngles = NewRot;
                        }
                    }

                    // Update spinning status and scaling
                    ItemGridCells[i].GetComponent <Spinner>().Spinning = Spinning;
                    if (ItemGridCells[i].childCount > 0)
                    {
                        FixMeshScaling(ItemGridCells[i].GetChild(0), Scale);
                    }
                }
            }

            // Hide the selector if nothing is selected
            ItemGridSelector.gameObject.SetActive(ItemGridSelectedIndex >= 0);

            // Clean up the preview screen if there was no item
            if (!ItemFound)
            {
                SetPreviewItem(null);
                TextTextureProperties NameProps        = ItemNameText.TextProperties;
                TextTextureProperties DescriptionProps = ItemDescriptionText.TextProperties;
                NameProps.Text        = "";
                DescriptionProps.Text = "";
                ItemNameText.SetTextProperties(NameProps);
                ItemDescriptionText.SetTextProperties(DescriptionProps);
                PreviewVisibility = Mathf.Lerp(PreviewVisibility, 0f, 10f * Time.deltaTime);
            }
            else
            {
                PreviewVisibility = Mathf.Lerp(PreviewVisibility, 1f, 10f * Time.deltaTime);
            }
        }
Exemplo n.º 4
0
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        public virtual void Build(IHoverboardPanelState pPanelState,
                                  IHoverboardLayoutState pLayoutState, IBaseItemState pItemState,
                                  IItemVisualSettings pSettings)
        {
            vPanelState  = pPanelState;
            vLayoutState = pLayoutState;
            vItemState   = pItemState;
            vSettings    = (ItemVisualSettingsStandard)pSettings;
            vSliderItem  = (ISliderItem)vItemState.Item;
            vTicks       = new GameObject[vSliderItem.Ticks];

            vWidth     = UiItem.Size * vSliderItem.Width;
            vHeight    = UiItem.Size * vSliderItem.Height;
            vIsVert    = (vHeight > vWidth);
            vGrabW     = 1;
            vZeroValue = (0 - vSliderItem.RangeMin) / (vSliderItem.RangeMax - vSliderItem.RangeMin);

            gameObject.transform.SetParent(gameObject.transform, false);
            gameObject.transform.localPosition = new Vector3(vWidth / 2, 0, vHeight / 2f);
            gameObject.transform.localRotation = Quaternion.AngleAxis((vIsVert ? 90 : 0), Vector3.up);

            if (vIsVert)                 //swap dimensions here + rotate graphics later
            {
                float tempW = vWidth;
                vWidth  = vHeight;
                vHeight = tempW;
            }

            vSlideX0 = (vGrabW - vWidth) / 2;
            vSlideW  = vWidth - vGrabW;

            ////

            vHiddenRect = new UiHoverMeshRectBg(gameObject);
            vHiddenRect.UpdateSize(vWidth, vHeight);

            var trackObj = new GameObject("Track");

            trackObj.transform.SetParent(gameObject.transform, false);
            trackObj.transform.localPosition = new Vector3(-vWidth / 2, 0, 0);

            vTrack         = new UiItemSliderTrackRenderer(trackObj);
            vTrackSegments = new ReadList <DisplayUtil.TrackSegment>();
            vTrackCuts     = new ReadList <DisplayUtil.TrackSegment>();

            ////

            if (vSliderItem.Ticks > 1)
            {
                Vector3 quadScale   = new Vector3(UiHoverMeshRect.SizeInset * 2, 0.36f, 0.1f);
                float   percPerTick = 1 / (float)(vSliderItem.Ticks - 1);

                vTickMeshBuilder = new MeshBuilder();
                MeshUtil.BuildQuadMesh(vTickMeshBuilder);
                vTickMeshBuilder.Commit();
                vTickMeshBuilder.CommitColors(Color.clear);

                for (int i = 0; i < vSliderItem.Ticks; ++i)
                {
                    GameObject tickObj = new GameObject("Tick" + i);
                    tickObj.transform.SetParent(gameObject.transform, false);
                    tickObj.transform.localPosition = Vector3.right * (vSlideX0 + vSlideW * i * percPerTick);
                    tickObj.transform.localRotation = TickQuatRot;
                    tickObj.transform.localScale    = quadScale;
                    tickObj.AddComponent <MeshRenderer>();

                    MeshFilter tickFilt = tickObj.AddComponent <MeshFilter>();
                    tickFilt.sharedMesh = vTickMeshBuilder.Mesh;

                    vTicks[i] = tickObj;
                }
            }

            ////

            vGrabHold = new GameObject("GrabHold");
            vGrabHold.transform.SetParent(gameObject.transform, false);
            vGrabHold.transform.localRotation = Quaternion.Inverse(gameObject.transform.localRotation);

            var grabObj = new GameObject("Grab");

            grabObj.transform.SetParent(vGrabHold.transform, false);

            vGrab        = grabObj.AddComponent <UiItemSliderGrabRenderer>();
            vGrab.IsVert = vIsVert;
            vGrab.Build(vPanelState, vLayoutState, vItemState, vSettings);

            if (vIsVert)
            {
                vGrab.SetCustomSize(vHeight, vGrabW, false);
            }
            else
            {
                vGrab.SetCustomSize(vGrabW, vHeight, false);
            }

            ////

            vHoverHold = new GameObject("HoverHold");
            vHoverHold.transform.SetParent(gameObject.transform, false);

            var hoverObj = new GameObject("Hover");

            hoverObj.transform.SetParent(vHoverHold.transform, false);

            vHover = new UiHoverMeshRect(hoverObj, "Hover");
        }
Exemplo n.º 5
0
        public override void Init()
        {
            road       = AssetManager.LoadTexture(AssetManager.GetAppPath() + "\\textures\\road.jpg");
            roadCorner = AssetManager.LoadTexture(AssetManager.GetAppPath() + "\\textures\\road_corner.jpg");
            curbModel  = AssetManager.LoadModel(AssetManager.GetAppPath() + "\\models\\curb.obj");
            curbCorner = AssetManager.LoadModel(AssetManager.GetAppPath() + "\\models\\curb_corner.obj");

            Random rand = new Random();

            int xAmt = rand.Next(2, 7), zAmt = rand.Next(2, 7), scaleX = rand.Next(10, 30), scaleZ = rand.Next(10, 30);

            int offset = 3;

            AddRoadCorner(new Line(new Vector3f(0, 0, -2), new Vector3f(0, 0, 0)));

            for (int x = 0; x <= xAmt; x++)
            {
                for (int i = 0; i < zAmt; i++)
                {
                    AddRoad(new Line(new Vector3f(x * scaleX, 0, i * scaleZ), new Vector3f(x * scaleX, 0, (i + 1) * scaleZ - 2)));
                    AddRoadCorner(new Line(new Vector3f(x * scaleX, 0, (i + 1) * scaleZ - 2), new Vector3f(x * scaleX, 0, (i + 1) * scaleZ)));

                    if (x == 0)
                    {
                        // long bar
                        Node curb2 = (Node)curbModel.Clone();
                        tmpVec.Set(x * scaleX - 1, 0, (i + 1) * scaleZ - 1);
                        tmpVec.y = HeightRoad(tmpVec);
                        curb2.SetLocalTranslation(tmpVec);
                        curb2.SetLocalRotation(new Quaternion().SetFromAxis(Vector3f.UnitY, 180));
                        curb2.SetLocalScale(new Vector3f(1, 1, scaleZ));
                        curbNode.AddChild(curb2);
                    }
                    else if (x == (xAmt - 1))
                    {
                        Node curb2 = (Node)curbModel.Clone();
                        tmpVec.Set((x + 1) * scaleX + 1, 0, (i) * scaleZ - 1);
                        tmpVec.y = HeightRoad(tmpVec);
                        curb2.SetLocalTranslation(tmpVec);
                        curb2.SetLocalScale(new Vector3f(1, 1, scaleZ));
                        curbNode.AddChild(curb2);
                    }

                    Node curb0 = (Node)curbModel.Clone();
                    tmpVec.Set(x * scaleX + 1, 0, i * scaleZ + 1);
                    tmpVec.y = HeightRoad(tmpVec);
                    curb0.SetLocalTranslation(tmpVec);
                    curb0.SetLocalScale(new Vector3f(1, 1, scaleZ - offset - 1));
                    curbNode.AddChild(curb0);

                    Node curb1 = (Node)curbModel.Clone();
                    tmpVec.Set(x * scaleX - 1, 0, (i + 1) * scaleZ - offset);
                    tmpVec.y = HeightRoad(tmpVec);
                    curb1.SetLocalTranslation(tmpVec);
                    curb1.SetLocalRotation(new Quaternion().SetFromAxis(Vector3f.UnitY, 180));
                    curb1.SetLocalScale(new Vector3f(1, 1, scaleZ - offset - 1));
                    curbNode.AddChild(curb1);

                    if (x != 0)
                    {
                        Node curbCorner1 = (Node)curbCorner.Clone();
                        tmpVec.Set((x) * scaleX - 2, 0, (i + 1) * scaleZ - offset + 1);
                        tmpVec.y = HeightRoad(tmpVec);
                        curbCorner1.SetLocalTranslation(tmpVec);
                        curbCorner1.SetLocalRotation(new Quaternion().SetFromAxis(Vector3f.UnitY, 180 + 90));
                        curbNode.AddChild(curbCorner1);
                    }

                    if (x != xAmt)
                    {
                        Node curbCorner0 = (Node)curbCorner.Clone();
                        tmpVec.Set(x * scaleX + 2, 0, i * scaleZ);
                        tmpVec.y = HeightRoad(tmpVec);
                        curbCorner0.SetLocalTranslation(tmpVec);
                        curbCorner0.SetLocalRotation(new Quaternion().SetFromAxis(Vector3f.UnitY, 90));
                        curbNode.AddChild(curbCorner0);
                    }
                }
            }

            for (int z = 0; z <= zAmt; z++)
            {
                for (int i = 0; i < xAmt; i++)
                {
                    AddRoad(new Line(new Vector3f(i * scaleX + 1, 0, z * scaleZ - 1), new Vector3f((i + 1) * scaleX - 1, 0, z * scaleZ - 1)));
                    AddRoadCorner(new Line(new Vector3f((i + 1) * scaleX - 1, 0, z * scaleZ - 1), new Vector3f((i + 1) * scaleX + 1, 0, z * scaleZ - 1)));

                    // long pieces
                    if (z == 0)
                    {
                        // long bar
                        Node curb2 = (Node)curbModel.Clone();
                        tmpVec.Set(i * scaleX, 0, z * scaleZ - 2);
                        tmpVec.y = HeightRoad(tmpVec);
                        curb2.SetLocalTranslation(tmpVec);
                        curb2.SetLocalRotation(new Quaternion().SetFromAxis(Vector3f.UnitY, 180 + 90));
                        curb2.SetLocalScale(new Vector3f(scaleX, 1, 1));
                        curbNode.AddChild(curb2);
                    }
                    else if (z == (zAmt - 1))
                    {
                        Node curb2 = (Node)curbModel.Clone();
                        tmpVec.Set((i + 1) * scaleX, 0, (z + 1) * scaleZ);
                        tmpVec.y = HeightRoad(tmpVec);
                        curb2.SetLocalTranslation(tmpVec);
                        curb2.SetLocalRotation(new Quaternion().SetFromAxis(Vector3f.UnitY, 180 + 90 + 180));
                        curb2.SetLocalScale(new Vector3f(scaleX, 1, 1));
                        curbNode.AddChild(curb2);
                    }

                    Node curb0 = (Node)curbModel.Clone();
                    tmpVec.Set((i + 1) * scaleX - 2, 0, z * scaleZ);
                    tmpVec.y = HeightRoad(tmpVec);
                    curb0.SetLocalTranslation(tmpVec);
                    curb0.SetLocalRotation(new Quaternion().SetFromAxis(Vector3f.UnitY, 90));
                    curb0.SetLocalScale(new Vector3f(scaleX - offset - 1, 1, 1));
                    curbNode.AddChild(curb0);

                    Node curb1 = (Node)curbModel.Clone();
                    tmpVec.Set((i) * scaleX + offset - 1, 0, z * scaleZ - 2);
                    tmpVec.y = HeightRoad(tmpVec);
                    curb1.SetLocalTranslation(tmpVec);
                    curb1.SetLocalRotation(new Quaternion().SetFromAxis(Vector3f.UnitY, 180 + 90));
                    curb1.SetLocalScale(new Vector3f(scaleX - offset - 1, 1, 1));
                    curbNode.AddChild(curb1);

                    if (z != zAmt)
                    {
                        Node     curbCorner0 = (Node)curbCorner.Clone();
                        Vector3f curbVec1    = new Vector3f((i + 1) * scaleX - 1, 0, z * scaleZ + 1);
                        curbVec1.y = HeightRoad(curbVec1);
                        curbCorner0.SetLocalTranslation(curbVec1);
                        curbCorner0.SetLocalRotation(new Quaternion().SetFromAxis(Vector3f.UnitY, 180));
                        curbNode.AddChild(curbCorner0);
                    }
                    if (z != 0)
                    {
                        Node     curbCorner1 = (Node)curbCorner.Clone();
                        Vector3f curbVec1    = new Vector3f((i) * scaleX + offset - 2, 0, z * scaleZ - 3);
                        curbVec1.y = HeightRoad(curbVec1);
                        curbCorner1.SetLocalTranslation(curbVec1);
                        curbCorner1.SetLocalRotation(new Quaternion().SetFromAxis(Vector3f.UnitY, 360));
                        curbNode.AddChild(curbCorner1);
                    }
                }
            }

            Geometry roadMerged = new Geometry(MeshUtil.MergeMeshes(roadNode));
            Geometry curbMerged = new Geometry(MeshUtil.MergeMeshes(curbNode));

            rootNode.AddChild(curbMerged);

            roadMerged.Material.SetValue(Material.MATERIAL_CULLENABLED, false);
            roadMerged.Material.SetValue(Material.TEXTURE_DIFFUSE, road);
            roadMerged.Material.SetValue(Material.SHININESS, 0.0f);

            Geometry roadCornerMerged = new Geometry(MeshUtil.MergeMeshes(roadCornerNode));

            roadCornerMerged.Material.SetValue(Material.MATERIAL_CULLENABLED, false);
            roadCornerMerged.Material.SetValue(Material.TEXTURE_DIFFUSE, roadCorner);
            roadCornerMerged.Material.SetValue(Material.SHININESS, 0.0f);

            rootNode.AddChild(roadCornerMerged);
            rootNode.AddChild(roadMerged);

            /*
             *
             *          addroad(new line(new vector3f(0, 0, 0), new vector3f(0, 0, 10)));
             *          AddRoad(new Line(new Vector3f(0, 0, 10), new Vector3f(1, 0, 12)));
             *          AddRoad(new Line(new Vector3f(1, 0, 12), new Vector3f(5, 0, 12)));*/

            /*
             *
             * for (int x = 0; x < 16; x ++)
             * {
             *      AddRoad(new Line(new Vector3f((float)System.Math.Sin(x)*13, 0, (float)System.Math.Cos(x) * 13), new Vector3f((float)System.Math.Sin(x+1) * 13, 0, (float)System.Math.Cos(x+1) * 13)));
             * }
             */
            /*     AddRoad(new Line(new Vector3f(0, 0, 10), new Vector3f(-3, 0, 11)));
             *   AddRoad(new Line(new Vector3f(-3, 0, 11), new Vector3f(-4, 0, 12)));
             *   AddRoad(new Line(new Vector3f(-4, 0, 12), new Vector3f(-5, 0, 13)));
             *   AddRoad(new Line(new Vector3f(-5, 0, 13), new Vector3f(-6, 0, 14)));*/
            //    AddRoad(new Line(new Vector3f(0, 0, 10), new Vector3f(10, 0, 10)));

            /*  for (int i = 0; i < 4; i++)
             * {
             *    Line myline = new Line(lastLine.To, lastLine.To.Add(new Vector3f(rand.Next(-15, 15),0, rand.Next(-15, 15))));
             *    Geometry quad = new Geometry(QuadFromLine(myline));
             *    quad.Material.SetValue(Material.MATERIAL_CULLENABLED, false);
             *    quad.Material.SetValue(Material.TEXTURE_DIFFUSE, road);
             *    quad.Material.SetValue(Material.SHININESS, 0.0f);
             *    lastLine = myline;
             *
             *    rootNode.AddChild(quad);
             * }
             */
        }
    private static void ComputeDataRecursive(MeshSimplify root, GameObject gameObject, bool bRecurseIntoChildren, Simplifier.ProgressDelegate progress = null)
    {
        MeshSimplify meshSimplify = gameObject.GetComponent <MeshSimplify>();

        if (meshSimplify == null && root._generateIncludeChildren)
        {
            if (MeshUtil.HasValidMeshData(gameObject))
            {
                meshSimplify = gameObject.AddComponent <MeshSimplify>();
                meshSimplify.MeshSimplifyRoot = root;
                root.ListDependentChildren.Add(meshSimplify);
            }
        }

        if (meshSimplify != null)
        {
            if (IsRootOrBelongsToTree(meshSimplify, root))
            {
                meshSimplify.FreeData(false);

                MeshFilter meshFilter = meshSimplify.GetComponent <MeshFilter>();

                if (meshFilter != null && meshFilter.sharedMesh != null)
                {
                    if (meshFilter.sharedMesh.vertexCount > 0)
                    {
                        if (meshSimplify.OriginalMesh == null)
                        {
                            meshSimplify.OriginalMesh = meshFilter.sharedMesh;
                        }

                        Simplifier[] simplifiers = meshSimplify.GetComponents <Simplifier>();

                        for (int c = 0; c < simplifiers.Length; c++)
                        {
                            if (Application.isEditor && Application.isPlaying == false)
                            {
                                DestroyImmediate(simplifiers[c]);
                            }
                            else
                            {
                                Destroy(simplifiers[c]);
                            }
                        }

                        meshSimplify._meshSimplifier           = meshSimplify.gameObject.AddComponent <Simplifier>();
                        meshSimplify._meshSimplifier.hideFlags = HideFlags.HideInInspector;
                        meshSimplify.ConfigureSimplifier();

                        IEnumerator enumerator = meshSimplify._meshSimplifier.ProgressiveMesh(gameObject, meshSimplify.OriginalMesh, root.RelevanceSpheres, meshSimplify.name, progress);

                        while (enumerator.MoveNext())
                        {
                            if (Simplifier.Cancelled)
                            {
                                return;
                            }
                        }

                        if (Simplifier.Cancelled)
                        {
                            return;
                        }
                    }
                }
                else
                {
                    SkinnedMeshRenderer skin = meshSimplify.GetComponent <SkinnedMeshRenderer>();

                    if (skin != null)
                    {
                        if (skin.sharedMesh.vertexCount > 0)
                        {
                            if (meshSimplify.OriginalMesh == null)
                            {
                                meshSimplify.OriginalMesh = skin.sharedMesh;
                            }

                            Simplifier[] simplifiers = meshSimplify.GetComponents <Simplifier>();

                            for (int c = 0; c < simplifiers.Length; c++)
                            {
                                if (Application.isEditor && Application.isPlaying == false)
                                {
                                    DestroyImmediate(simplifiers[c]);
                                }
                                else
                                {
                                    Destroy(simplifiers[c]);
                                }
                            }

                            meshSimplify._meshSimplifier           = meshSimplify.gameObject.AddComponent <Simplifier>();
                            meshSimplify._meshSimplifier.hideFlags = HideFlags.HideInInspector;
                            meshSimplify.ConfigureSimplifier();

                            IEnumerator enumerator = meshSimplify._meshSimplifier.ProgressiveMesh(gameObject, meshSimplify.OriginalMesh, root.RelevanceSpheres, meshSimplify.name, progress);

                            while (enumerator.MoveNext())
                            {
                                if (Simplifier.Cancelled)
                                {
                                    return;
                                }
                            }

                            if (Simplifier.Cancelled)
                            {
                                return;
                            }
                        }
                    }
                }

                meshSimplify._dataDirty = false;
            }
        }

        if (bRecurseIntoChildren)
        {
            for (int nChild = 0; nChild < gameObject.transform.childCount; nChild++)
            {
                ComputeDataRecursive(root, gameObject.transform.GetChild(nChild).gameObject, bRecurseIntoChildren, progress);

                if (Simplifier.Cancelled)
                {
                    return;
                }
            }
        }
    }
Exemplo n.º 7
0
 ////////////////////////////////////////////////////////////////////////////////////////////////
 /*--------------------------------------------------------------------------------------------*/
 protected override void UpdateMesh(MeshType pType, MeshBuilder pMeshBuild, float pAmount = 1)
 {
     MeshUtil.BuildRectangleMesh(pMeshBuild, vMeshW, vMeshH, pAmount);
     pMeshBuild.Commit();
 }