bevy_mod_raycast 0.17.0

Ray Casting for the Bevy Engine.
Documentation
# 0.17.0

Raycasting is now 20-50% faster.

- Changed: updated to Bevy 0.13.
- Removed: This crate's `Ray3d` type has been replaced with Bevy's new `Ray3d` type.
  - Methods on `Ray3d` have been replaced with standalone functions.
  - This has resulted in a ~10% drop in performance in benchmarks.
- Changed: `Ray3d::from_transform` is now `ray_from_transform`
- Changed: `Ray3d::from_screenspace` is now `ray_from_screenspace`
- Changed: `Triangle` removed in favor of a simpler `[Vec3A; 3]`.

# 0.16.0

- Changed: updated to Bevy 0.12.
- Changed: plugin depends on bevy sub-crates (e.g. `bevy_ecs`) instead of `bevy` to reduce
  dependency count.

# 0.15.0

- Changed: immediate and deferred raycasting APIs organized into respective modules.
- Added: the `DefaultRaycastingPlugin` now builds a ray using the mouse cursor every frame and
  stores it in the `CursorRay` resource.
- Added: `RaycastMethod::Cursor` variant added to `RaycastSource` settings for the common use case
  of using the mouse cursor.
- Added: `debug_cast_ray` mirrors the `cast_ray` method, but handles debug drawing the ray and any
  intersections.
- Changed: removed unused `Reflect` derive from `RaycastSettings`. This struct is neither a resource
  nor a component.
- Changed: unified the look of debug gizmos across the immediate and deferred APIs.

# 0.14.1

- Changed: relaxed type bounds on the generic raycast set type parameter in `RaycastSource<T>` and
  `RaycastMesh<T>` to no longer require `Clone.`
- Added: substantially improved documentation.
- Fixed: plugin not building with `--no-default-features`.
- Fixed: `RaycastSource`'s visibility settings being ignored.

# 0.14.0

- Fixed: window scale factor not being considered for screenspace raycasts.

# 0.13.1

- Fixed: overly-strict query filter preventing raycasting 2d meshes.

# 0.13.0

- Changed: the immediate mode raycasting system param `Raycast` no longer requires a type parameter
  for a raycasting set. Instead, you can supply this constraint as a filter in `RaycastSettings`.
  This makes it possible to raycast any bevy mesh without any special components on cameras or
  meshes.
- Fixed: `SimplifiedMesh` and `RaycastSettings` added to the prelude.

# 0.12.0

- Changed: the `should_early_exit` boolean field  has been removed from `RaycastSettings` in favor
  of a more flexible closure `early_exit_test`. This early exit test is run on every entity to
  determine if it should block further entities from being hit. The previous behavior can be
  replicated by passing in a closure that ignores the input and returns a boolean, such as `&|_|
  true` instead of `true`.
- Added: raycasts can now apply a test to determine which entities to allow during a raycast by
  using the `filter` field on `RaycastSettings`.

# 0.11.0

- Changed: `Raycast::cast_ray` now accepts a `RaycastSettings` parameter.
- Added: entity visibility handling can now be configured using the `RaycastVisibility` field on
  `RaycastSettings` and `RaycastSource`:
  - `Ignore`: Completely ignore visibility checks. Hidden items can still be raycasted against.
  - `MustBeVisible`: Only raycast against entities that are visible in the hierarchy.
  - `MustBeVisibleAndInView`: Only raycast against entities that are visible in the hierarchy and
    visible to a camera or light. This is the same as setting the `should_frustum_cull` parameter of
    `cast_ray` to `true` in 0.10.

# 0.10.0

- Changed: `Raycast::cast_ray` is now a mutable query. The system param now stores allocated buffers
  in `Local`s to reuse allocated memory.
- Changed: parallel AABB culling now uses an unbounded channel to reduce time spent allocating a
  bounded channel when many entities are present.

# 0.9.0

- Added: `Raycast` system param allows immediate raycasting into the world using the `cast_ray`
  method.
- Removed the `Intersection` component. Intersection data can be found using
  `RaycastMesh::intersections()` and `RaycastSource::intersections()`.
- Changed: `Ray3d::from_screenspace` start from the near plane.
- Fixed: Raycasts do not hit bottoms of un-rotated `RayCastMesh`es.
- Changed: `DefaultPluginState` renamed to `RaycastPluginState`.

# 0.8.0

- Implement `Reflect` for `RaycastMesh`, `RaycastSource`, and `RaycastMethod`.
- Fix raycasting for non-indexed meshes.
- Update to bevy 0.10.

# 0.7.0

- All internal debug related code is now behind feature flags to enable running with
  `default_features = false`. 
- Renamed:
  - `RayCastSource` to `RaycastSource`
  - `RayCastMesh` to `RaycastMesh`
  - `RayCastMethod` to `RaycastMethod`
  - `RayCastSet` to `RaycastSet`
- Update method naming to be more consistent with the ecosystem:
  - `intersect_list()` -> `get_intersections()`
  - `intersect_top()` -> `get_nearest_intersection()`
  - `ray()` -> `get_ray()`
- Added `intersections()`, the counterpart to `get_intersections()`. This method returns an empty
  slice if there are no intersections, instead of an `Option`. The latter is useful if you want a
  guarantee that there is at least one intersection after unwrapping the `Option`.