/// <summary> /// Regenerates the chunk without threading. /// </summary> public void regenerateChunk() { if (regenReq) { regenFlag = true; } else { MeshFactory.requestMesh(this); regenReq = true; } }
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); }
/// <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(); } }