public InstancedMeshInfo MeshChunkBlocks(Vector3Int chunkIndex, ChunkLayer <Block> chunkLayer) { InstancedMeshInfo instancedMeshInfo = new InstancedMeshInfo(modelTypeCount); Chunk <Block> chunk = chunkLayer.GetChunk(chunkIndex); Vector3 chunkStart = chunkIndex.Multiply(chunkSettings.ChunkWorldLen); for (int x = 0; x < chunkSL; x++) { for (int y = 0; y < chunkSL; y++) { for (int z = 0; z < chunkSL; z++) { Vector3Int indexInChunk = new Vector3Int(x, y, z); Vector3 position = new Vector3(x, y, z) * chunkSettings.VoxelSize + chunkStart; Block block = chunk.GetVoxel(indexInChunk); TechnicalBlock technicalBlock = block.technicalBlock; if (technicalBlock != null) { instancedMeshInfo.AddModelInfos(technicalBlock.GetStaticMesh(), Matrix4x4.Translate(position) * technicalBlock.localTransform * Matrix4x4.Scale(Vector3.one * 0.5f)); } } } } return(instancedMeshInfo); }
/* */ public InstancedMeshInfo MeshChunkItems(Vector3Int chunkIndex, ChunkLayer <Block> chunkLayer) { InstancedMeshInfo instancedMeshInfo = new InstancedMeshInfo(modelTypeCount); Chunk <Block> chunk = chunkLayer.GetChunk(chunkIndex); Vector3 chunkStart = chunkIndex.Multiply(chunkSettings.ChunkWorldLen); for (int x = 0; x < chunkSL; x++) { for (int y = 0; y < chunkSL; y++) { for (int z = 0; z < chunkSL; z++) { Vector3Int indexInChunk = new Vector3Int(x, y, z); Vector3 position = new Vector3(x, y, z) * chunkSettings.VoxelSize + chunkStart; Block block = chunk.GetVoxel(indexInChunk); int blockType = block.blockType; TechnicalBlock technicalBlock = block.technicalBlock; if (technicalBlock != null) { TechnicalBlock.ModelInfo[] itemMeshes = technicalBlock.GetDynamicMesh(); for (int i = 0; i < itemMeshes.Length; i++) { if (itemMeshes[i].modelType != 0) { Matrix4x4 transform = itemMeshes[i].transform; transform = Matrix4x4.Translate(position) * transform; instancedMeshInfo.AddInstance(transform, itemMeshes[i].modelType); } } } } } } return(instancedMeshInfo); }
void DrawItemsMeshInfo(InstancedMeshInfo instancedMeshInfo) // chunk { for (int type = 0; type < instancedMeshInfo.types.Length; type++) { InstancedMeshInfoType instancedMeshInfoType = instancedMeshInfo.types[type]; DrawInstancedMeshInfoType(instancedMeshInfoType, itemMeshes[type], itemMaterials[type]); } }
public void MeshAllChunks_Items() { Vector3Int chunkLayerSLs = world.world.mainLayer.ChunkLayerSLs; worldRenderer.itemMeshInfos.Clear(); for (int x = 0; x < chunkLayerSLs.x; x++) { for (int y = 0; y < chunkLayerSLs.y; y++) { for (int z = 0; z < chunkLayerSLs.z; z++) { Vector3Int chunkIndex = new Vector3Int(x, y, z); InstancedMeshInfo instancedMeshInfo = chunkMesher.MeshChunkItems(chunkIndex, world.world.mainLayer); worldRenderer.itemMeshInfos.Add(chunkIndex, instancedMeshInfo); } } } }