コード例 #1
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);
    }
コード例 #2
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);
    }