Esempio n. 1
0
    /// <summary>
    /// Converts a direction into a vector
    /// </summary>
    private Vector3 DirToVector(Direction dir)
    {
        switch (dir)
        {
        case Direction.Top:
            return(Vector3.up);

        case Direction.Bottom:
            return(Vector3.down);

        case Direction.Left:
            return(Vector3.left);

        case Direction.Right:
            return(Vector3.right);

        case Direction.Forward:
            return(Vector3.forward);

        case Direction.Back:
            return(Vector3.back);
        }

        return(Vector3.zero);
    }
Esempio n. 2
0
    /// <summary>
    /// Generates the associated quad for a particular direction and position
    /// </summary>
    private void GenerateFace(int x, int y, int z, Vector3 pos, Direction dir)
    {
        // Sets the associated vertices for a particular face
        switch (dir)
        {
        case Direction.Top:
            vertices[vertexCount++].Set(pos.x, pos.y, pos.z + Voxel.VoxelSize);
            vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y, pos.z + Voxel.VoxelSize);
            vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y, pos.z);
            vertices[vertexCount++].Set(pos.x, pos.y, pos.z);
            break;

        case Direction.Bottom:
            vertices[vertexCount++].Set(pos.x, pos.y - Voxel.VoxelSize, pos.z);
            vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y - Voxel.VoxelSize, pos.z);
            vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y - Voxel.VoxelSize, pos.z + Voxel.VoxelSize);
            vertices[vertexCount++].Set(pos.x, pos.y - Voxel.VoxelSize, pos.z + Voxel.VoxelSize);
            break;

        case Direction.Left:
            vertices[vertexCount++].Set(pos.x, pos.y - Voxel.VoxelSize, pos.z + Voxel.VoxelSize);
            vertices[vertexCount++].Set(pos.x, pos.y, pos.z + Voxel.VoxelSize);
            vertices[vertexCount++].Set(pos.x, pos.y, pos.z);
            vertices[vertexCount++].Set(pos.x, pos.y - Voxel.VoxelSize, pos.z);
            break;

        case Direction.Right:
            vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y - Voxel.VoxelSize, pos.z);
            vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y, pos.z);
            vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y, pos.z + Voxel.VoxelSize);
            vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y - Voxel.VoxelSize, pos.z + Voxel.VoxelSize);
            break;

        case Direction.Forward:
            vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y - Voxel.VoxelSize, pos.z + Voxel.VoxelSize);
            vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y, pos.z + Voxel.VoxelSize);
            vertices[vertexCount++].Set(pos.x, pos.y, pos.z + Voxel.VoxelSize);
            vertices[vertexCount++].Set(pos.x, pos.y - Voxel.VoxelSize, pos.z + Voxel.VoxelSize);
            break;

        case Direction.Back:
            vertices[vertexCount++].Set(pos.x, pos.y - Voxel.VoxelSize, pos.z);
            vertices[vertexCount++].Set(pos.x, pos.y, pos.z);
            vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y, pos.z);
            vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y - Voxel.VoxelSize, pos.z);
            break;
        }

        // Set normals
        for (int i = vertexCount - 4; i < vertexCount; i++)
        {
            Vector3 vDir = DirToVector(dir);
            normals[i].Set(vDir.x, vDir.y, vDir.z);
        }

        // Set UVs
        uvs[vertexCount - 4].Set(colourCoordinates[Voxels[x][y][z] - 1].x, 0f);
        uvs[vertexCount - 3].Set(colourCoordinates[Voxels[x][y][z] - 1].y, 0f);
        uvs[vertexCount - 2].Set(colourCoordinates[Voxels[x][y][z] - 1].x, 1f);
        uvs[vertexCount - 1].Set(colourCoordinates[Voxels[x][y][z] - 1].y, 1f);
    }