示例#1
0
    private SliceMeshData FaceDataWest(Slice slice, int x, float y, int z, SliceMeshData meshData)
    {
        int sliceXOffset = -(Map.XZOffset * Map.VoxelsInXZ);
        int sliceYOffset = -Map.YOffset;
        int sliceZOffset = -(Map.XZOffset * Map.VoxelsInXZ);

        meshData.AddVertex(new Vector3(x - 0.5f + sliceXOffset, y - 0.5f + sliceYOffset, z + 0.5f + sliceZOffset));
        meshData.AddVertex(new Vector3(x - 0.5f + sliceXOffset, y + 0.5f + Map.VoxelFloorHeight + sliceYOffset, z + 0.5f + sliceZOffset));
        meshData.AddVertex(new Vector3(x - 0.5f + sliceXOffset, y + 0.5f + Map.VoxelFloorHeight + sliceYOffset, z - 0.5f + sliceZOffset));
        meshData.AddVertex(new Vector3(x - 0.5f + sliceXOffset, y - 0.5f + sliceYOffset, z - 0.5f + sliceZOffset));
        meshData.AddQuadTris();
        meshData.uvs.AddRange(FaceUVs());
        return(meshData);
    }
示例#2
0
    // ----- Rendering
    private SliceMeshData FaceDataUp(Slice slice, int x, float y, int z, SliceMeshData meshData, bool IsUndiscovered = false)
    {
        int sliceXOffset = -(Map.XZOffset * Map.VoxelsInXZ);
        int sliceYOffset = -Map.YOffset;
        int sliceZOffset = -(Map.XZOffset * Map.VoxelsInXZ);

        meshData.AddVertex(new Vector3(x - 0.5f + sliceXOffset, y + 0.5f + Map.VoxelFloorHeight + sliceYOffset, z + 0.5f + sliceZOffset));
        meshData.AddVertex(new Vector3(x + 0.5f + sliceXOffset, y + 0.5f + Map.VoxelFloorHeight + sliceYOffset, z + 0.5f + sliceZOffset));
        meshData.AddVertex(new Vector3(x + 0.5f + sliceXOffset, y + 0.5f + Map.VoxelFloorHeight + sliceYOffset, z - 0.5f + sliceZOffset));
        meshData.AddVertex(new Vector3(x - 0.5f + sliceXOffset, y + 0.5f + Map.VoxelFloorHeight + sliceYOffset, z - 0.5f + sliceZOffset));
        meshData.AddQuadTris();
        meshData.uvs.AddRange(FaceUVs(IsUndiscovered, true)); // true == IsTop
        return(meshData);
    }
示例#3
0
    public SliceMeshData BuildMesh(SliceMeshData.Type meshType)
    {
        SliceMeshData sliceMeshData = new SliceMeshData();

        for (int x = 0; x < Map.VoxelsInXZ; x++)
        {
            for (int z = 0; z < Map.VoxelsInXZ; z++)
            {
                sliceMeshData = Voxels[x, z].AddToSliceMeshData(this, x, z, sliceMeshData, meshType);
            }
        }

        return(sliceMeshData);
    }
    // Visualize the mesh handed to it by Map
    public void RenderMesh(SliceMeshData meshData)
    {
        MeshFilter.mesh.Clear();
        MeshFilter.mesh.vertices  = meshData.verts.ToArray();
        MeshFilter.mesh.triangles = meshData.tris.ToArray();
        MeshFilter.mesh.uv        = meshData.uvs.ToArray();
        MeshFilter.mesh.RecalculateNormals();

        MeshCollider.sharedMesh = null;
        Mesh mesh = new Mesh();

        mesh.vertices  = meshData.cVerts.ToArray();
        mesh.triangles = meshData.cTris.ToArray();
        mesh.RecalculateNormals();
        MeshCollider.sharedMesh = mesh;
    }
示例#5
0
    public SliceMeshData AddToSliceMeshData(Slice slice, int x, int z, SliceMeshData sliceMeshData, SliceMeshData.Type meshType, bool colliderToo = true)
    {
        if (IsTransparent())
        {
            return(sliceMeshData);                 // Transparent, don't draw faces.  Later modify for gas/liquid.
        }
        sliceMeshData.useRenderDataForCollider = colliderToo;
        float y             = slice.Y * Map.VoxelFloorHeight;
        Voxel neighborVoxel = null;

        if (meshType == SliceMeshData.Type.Sides)
        {
            neighborVoxel = slice.GetVoxel(slice.X + x, slice.Y, slice.Z + z + 1);
            if (neighborVoxel == null || neighborVoxel.IsTransparent())
            {
                sliceMeshData = FaceDataNorth(slice, x, y, z, sliceMeshData);
            }

            neighborVoxel = slice.GetVoxel(slice.X + x, slice.Y, slice.Z + z - 1);
            if (neighborVoxel == null || neighborVoxel.IsTransparent())
            {
                sliceMeshData = FaceDataSouth(slice, x, y, z, sliceMeshData);
            }

            neighborVoxel = slice.GetVoxel(slice.X + x + 1, slice.Y, slice.Z + z);
            if (neighborVoxel == null || neighborVoxel.IsTransparent())
            {
                sliceMeshData = FaceDataEast(slice, x, y, z, sliceMeshData);
            }

            neighborVoxel = slice.GetVoxel(slice.X + x - 1, slice.Y, slice.Z + z);
            if (neighborVoxel == null || neighborVoxel.IsTransparent())
            {
                sliceMeshData = FaceDataWest(slice, x, y, z, sliceMeshData);
            }

            if (Map.DrawSliceBottoms) // Default: false - never seen by player.
            {
                neighborVoxel = slice.GetVoxel(slice.X + x, slice.Y - 1, slice.Z + z);
                if (neighborVoxel == null || neighborVoxel.IsTransparent())
                {
                    sliceMeshData = FaceDataDown(slice, x, y, z, sliceMeshData);
                }
            }
        }
        if (meshType == SliceMeshData.Type.Top)
        {
            neighborVoxel = slice.GetVoxel(slice.X + x, slice.Y + 1, slice.Z + z);
            if (neighborVoxel == null || neighborVoxel.IsTransparent() || Map.InDebugMode)
            {
                sliceMeshData = FaceDataUp(slice, x, y, z, sliceMeshData);
            }
            else if (neighborVoxel != null && !neighborVoxel.IsTransparent())
            {
                sliceMeshData = FaceDataUp(slice, x, y, z, sliceMeshData, true);
            }
        }
        if (meshType == SliceMeshData.Type.Liquids)
        {
            // Not much to do here yet...
        }

        return(sliceMeshData);
    }