示例#1
0
 /// <summary>
 /// Regenerates the chunk without threading.
 /// </summary>
 public void regenerateChunk()
 {
     if (regenReq)
     {
         regenFlag = true;
     }
     else
     {
         MeshFactory.requestMesh(this);
         regenReq = true;
     }
 }
示例#2
0
        public Node(Node parent, Vector3 position, int subNodeID, int LOD, RenderType renderType)
        {
            densityChangeData = new DensityData();
            this.parent       = parent;
            this.position     = position;
            this.subNodeID    = subNodeID;
            this.LOD          = LOD;

            float chunkWidth = (NodeManager.LODSize[LOD] * NodeManager.nodeSize) / 2f;

            center = new Vector3(position.x + chunkWidth,
                                 position.y + chunkWidth,
                                 position.z + chunkWidth);

            setRenderType(renderType);

            if (parent != null && parent.permanent)
            {
                permanent = true;
            }

            NodeManager.nodeCount[LOD]++;

            float nWidth = NodeManager.LODSize[LOD] * NodeManager.nodeSize;

            chunkPos.x = (int)(center.x / nWidth);
            chunkPos.y = (int)(center.y / nWidth);
            chunkPos.z = (int)(center.z / nWidth);

            if (LOD == 0)
            {
                string dir = getDirectory();
                if (Directory.Exists(dir) && File.Exists(dir + "\\densities.txt"))
                {
                    MeshFactory.requestLoad(this);
                }
            }

            regenReq = true;
            MeshFactory.requestMesh(this);
        }
示例#3
0
        /// <summary>
        /// Called when a mesh has been generated
        /// </summary>
        /// <param name="mesh">Mesh data</param>
        public void setMesh(MeshData meshData)
        {
            densityData.setChangeData(densityChangeData);

            regenReq = false;
            if (regenFlag)
            {
                regenFlag = false;
                regenReq  = true;
                MeshFactory.requestMesh(this);
            }

            hasMesh = true;
            if (meshData.indexArray.Length == 0)
            {
                return;
            }

            if (chunk == null)
            {
                chunk = ChunkPool.getChunk();
                if (LOD > 2)
                {
                    chunk.transform.position = position - new Vector3(0f, (NodeManager.LODSize[LOD] / 2f), 0f);
                }
                else
                {
                    chunk.transform.position = position;
                }

                //chunk.GetComponent<MeshFilter>().mesh.subMeshCount = QuixelEngine.materials.Length;
                chunk.GetComponent <MeshRenderer>().materials = QuixelEngine.materials;
            }

            empty = false;
            Mesh mesh = new Mesh();

            mesh.subMeshCount = QuixelEngine.materials.Length;
            mesh.vertices     = meshData.triangleArray;

            for (int i = 0; i < QuixelEngine.materials.Length; i++)
            {
                if (meshData.indexArray[i].Length > 0)
                {
                    mesh.SetTriangles(meshData.indexArray[i], i);
                }
            }
            //mesh.triangles = meshData.indexArray;
            mesh.uv = meshData.uvArray;

            mesh.normals = meshData.normalArray;
            //mesh.RecalculateBounds();
            mesh.Optimize();

            chunk.GetComponent <MeshFilter>().mesh = mesh;

            if (LOD == 0 && collides)
            {
                chunk.GetComponent <MeshCollider>().sharedMesh = mesh;
            }
            meshData.dispose();

            renderCheck();
            switch (renderType)
            {
            case RenderType.BACK:
                if (chunk != null)
                {
                    chunk.layer = 9;
                }
                break;

            case RenderType.FRONT:
                if (chunk != null)
                {
                    chunk.layer = 8;
                }
                break;
            }
            if (parent != null)
            {
                parent.renderCheck();
            }
        }