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);
                }
            }
        }
    }