Exemple #1
0
    public WixelChunkMeshData BlockData(WixelChunk chunk, int x, int y, int z, WixelChunkMeshData meshData)
    {
        if (FaceInformation.Count == 0)
        {
            return(meshData);
        }

        // Programmer's Note
        // -----------------
        // int x/y/z is fine due to how this is being used.

        Vector3 worldPosition = new Vector3(x, y, z);

        meshData.useRenderDataForCol = true;

        if (!chunk.GetBlock(x, y + 1, z).IsSolid(WixelDirection.Down))
        {
            meshData = FaceData(WixelDirection.Up, chunk, worldPosition, meshData);
        }

        if (!chunk.GetBlock(x, y - 1, z).IsSolid(WixelDirection.Up))
        {
            meshData = FaceData(WixelDirection.Down, chunk, worldPosition, meshData);
        }

        if (!chunk.GetBlock(x, y, z + 1).IsSolid(WixelDirection.South))
        {
            meshData = FaceData(WixelDirection.North, chunk, worldPosition, meshData);
        }

        if (!chunk.GetBlock(x, y, z - 1).IsSolid(WixelDirection.North))
        {
            meshData = FaceData(WixelDirection.South, chunk, worldPosition, meshData);
        }

        if (!chunk.GetBlock(x + 1, y, z).IsSolid(WixelDirection.West))
        {
            meshData = FaceData(WixelDirection.East, chunk, worldPosition, meshData);
        }

        if (!chunk.GetBlock(x - 1, y, z).IsSolid(WixelDirection.East))
        {
            meshData = FaceData(WixelDirection.West, chunk, worldPosition, meshData);
        }

        return(meshData);
    }
Exemple #2
0
    // Sends the calculated mesh information
    // to the mesh and collision components
    private void RenderMesh(WixelChunkMeshData meshData)
    {
        Filter.mesh.Clear();
        Filter.mesh.vertices  = meshData.vertices.ToArray();
        Filter.mesh.triangles = meshData.triangles.ToArray();

        Filter.mesh.uv = meshData.uv.ToArray();
        Filter.mesh.RecalculateNormals();

        Collider.sharedMesh = null;

        Mesh mesh = new Mesh();

        mesh.vertices  = meshData.colVertices.ToArray();
        mesh.triangles = meshData.colTriangles.ToArray();
        mesh.RecalculateNormals();

        Collider.sharedMesh = mesh;
    }
Exemple #3
0
    private void UpdateChunk()
    {
        IsRendered = true;

        WixelChunkMeshData meshData = new WixelChunkMeshData();

        for (int x = 0; x < chunkSize; x++)
        {
            for (int y = 0; y < chunkSize; y++)
            {
                for (int z = 0; z < chunkSize; z++)
                {
                    var block = _blocks[x, y, z];
                    meshData = block.BlockData(this, x, y, z, meshData);
                }
            }
        }

        RenderMesh(meshData);
    }
Exemple #4
0
    private WixelChunkMeshData FaceData(WixelDirection direction, WixelChunk chunk, Vector3 worldPosition, WixelChunkMeshData meshData)
    {
        if (FaceInformation.Count == 0)
        {
            return(meshData);
        }

        WixelDirectionInformation faceInfo = GetInformationByDirection(direction);

        for (int i = 0; i < faceInfo.Vertices.Count; i++)
        {
            Vector3 vertexPosition = faceInfo.Vertices[i] * blockScale;
            Vector3 actualPosition = vertexPosition + worldPosition;

            meshData.AddVertex(actualPosition);
        }

        meshData.AddQuadTriangles();
        meshData.uv.AddRange(FaceUVs(direction));
        return(meshData);
    }