public static VoxelHandle FindFirstVisibleVoxelOnRayEx(
            ChunkData Data,
            Vector3 Start,
            Vector3 End,
            bool SelectEmpty,
            Func <VoxelHandle, bool> FilterPredicate)
        {
            if (FilterPredicate == null)
            {
                FilterPredicate = v => v.IsValid && !v.IsEmpty;
            }

            var prev = VoxelHandle.InvalidHandle;

            foreach (var coordinate in MathFunctions.FastVoxelTraversal(Start, End))
            {
                var voxel = new VoxelHandle(Data, coordinate);

                if (voxel.IsValid && voxel.IsVisible && FilterPredicate(voxel))
                {
                    if (SelectEmpty)
                    {
                        return(prev);
                    }
                    else
                    {
                        return(voxel);
                    }
                }

                prev = voxel;
            }

            return(VoxelHandle.InvalidHandle);
        }
Ejemplo n.º 2
0
        public static bool DoesRayHitSolidVoxel(ChunkData Data, Vector3 Start, Vector3 End)
        {
            foreach (var coordinate in MathFunctions.FastVoxelTraversal(Start, End))
            {
                var voxel = new VoxelHandle(Data, coordinate);
                if (voxel.IsValid && !voxel.IsEmpty)
                {
                    return(true);
                }
            }

            return(false);
        }
        public static VoxelHandle FindFirstVisibleVoxelOnRay(
            ChunkData Data,
            Vector3 Start,
            Vector3 End)
        {
            foreach (var coordinate in MathFunctions.FastVoxelTraversal(Start, End))
            {
                var voxel = new VoxelHandle(Data, coordinate);

                if (voxel.IsValid && voxel.IsVisible && !voxel.IsEmpty)
                {
                    return(voxel);
                }
            }

            return(VoxelHandle.InvalidHandle);
        }