Beispiel #1
0
        /// <summary>
        /// Returns faces that are visible for the voxel at the given index in the given volume.
        /// </summary>
        /// <returns>The faces for.</returns>
        /// <param name="volume">Volume.</param>
        /// <param name="voxel">Voxel.</param>
        public static IEnumerable<Face> VisibleFacesFor(VoxelContainer chunk, IntVector3 voxel)
        {
            var result = new List<Face>();
            var faceVector = new IntVector3(voxel);

            if (chunk.GetVoxel(voxel).Weight > 0)
            {
                faceVector.Y += 1;
                if (chunk.GetVoxel(faceVector).Weight <= 0)
                    result.Add(Face.Top);

                faceVector.Y -= 2;
                if (chunk.GetVoxel(faceVector).Weight <= 0)
                    result.Add(Face.Bottom);

                faceVector.Y += 1;
                faceVector.X -= 1;
                if (chunk.GetVoxel(faceVector).Weight <= 0)
                    result.Add(Face.Left);

                faceVector.X += 2;
                if (chunk.GetVoxel(faceVector).Weight <= 0)
                    result.Add(Face.Right);

                faceVector.X -= 1;
                faceVector.Z -= 1;
                if (chunk.GetVoxel(faceVector).Weight <= 0)
                    result.Add(Face.Front);

                faceVector.Z += 2;
                if (chunk.GetVoxel(faceVector).Weight <= 0)
                    result.Add(Face.Back);
            }

            return result;
        }
Beispiel #2
0
 public abstract Mesh GenerateMesh(VoxelContainer data, IntVector3 start, IntVector3 end);