Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Use
Dir2
/Dir3
instead of Vec2
/Vec3
for Ray2d::new
/`Ray3d::n…
…ew` (#15735) # Objective The `new` constructors for our ray types currently take a `Vec2`/`Vec3` instead of a `Dir2`/`Dir3`. This is confusing and footgunny for several reasons. - Which one of these is the direction? You can't see it from the type. ```rust let ray = Ray2d::new(Vec2::X, Vec2::X); ``` - Many engines allow unnormalized rays, and this can affect ray cast results by scaling the time of impact. However, in Bevy, rays are *always* normalized despite what the input argument in this case implies, and ray cast results are *not* scaled. ```rust // The true ray direction is still normalized, unlike what you'd expect. let ray = Ray2d::new(Vec2::X, Vec2::new(5.0, 0.0, 0.0))); ``` These cases are what the direction types are intended for, and we should use them as such. ## Solution Use `Dir2`/`Dir3` in the constructors. ```rust let ray = Ray2d::new(Vec2::X, Dir2::X); ``` We *could* also use `impl TryInto<DirN>`, which would allow both vectors and direction types, and then panic if the input is not normalized. This could be fine for ergonomics in some cases, but especially for rays, I think it's better to take an explicit direction type here. --- ## Migration Guide `Ray2d::new` and `Ray3d::new` now take a `Dir2` and `Dir3` instead of `Vec2` and `Vec3` respectively for the ray direction.
- Loading branch information