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); }
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); }