Remove From implementations from the direction types (#10857)
				
					
				
			This removes the `From<Vec2/3>` implementations for the direction types. It doesn't seem right to have when it only works if the vector is nonzero and finite and produces NaN otherwise. Added `Direction2d/3d::new` which uses `Vec2/3::try_normalize` to guarantee it returns either a valid direction or `None`. This should make it impossible to create an invalid direction, which I think was the intention with these types.
This commit is contained in:
		
							parent
							
								
									2c5639e323
								
							
						
					
					
						commit
						83ee6de1da
					
				| @ -5,13 +5,14 @@ use crate::Vec2; | ||||
| #[derive(Clone, Copy, Debug)] | ||||
| pub struct Direction2d(Vec2); | ||||
| 
 | ||||
| impl From<Vec2> for Direction2d { | ||||
|     fn from(value: Vec2) -> Self { | ||||
|         Self(value.normalize()) | ||||
|     } | ||||
| impl Direction2d { | ||||
|     /// Create a direction from a finite, nonzero [`Vec2`].
 | ||||
|     ///
 | ||||
|     /// Returns `None` if the input is zero (or very close to zero), or non-finite.
 | ||||
|     pub fn new(value: Vec2) -> Option<Self> { | ||||
|         value.try_normalize().map(Self) | ||||
|     } | ||||
| 
 | ||||
| impl Direction2d { | ||||
|     /// Create a direction from a [`Vec2`] that is already normalized
 | ||||
|     pub fn from_normalized(value: Vec2) -> Self { | ||||
|         debug_assert!(value.is_normalized()); | ||||
|  | ||||
| @ -5,13 +5,14 @@ use crate::Vec3; | ||||
| #[derive(Clone, Copy, Debug)] | ||||
| pub struct Direction3d(Vec3); | ||||
| 
 | ||||
| impl From<Vec3> for Direction3d { | ||||
|     fn from(value: Vec3) -> Self { | ||||
|         Self(value.normalize()) | ||||
|     } | ||||
| impl Direction3d { | ||||
|     /// Create a direction from a finite, nonzero [`Vec3`].
 | ||||
|     ///
 | ||||
|     /// Returns `None` if the input is zero (or very close to zero), or non-finite.
 | ||||
|     pub fn new(value: Vec3) -> Option<Self> { | ||||
|         value.try_normalize().map(Self) | ||||
|     } | ||||
| 
 | ||||
| impl Direction3d { | ||||
|     /// Create a direction from a [`Vec3`] that is already normalized
 | ||||
|     pub fn from_normalized(value: Vec3) -> Self { | ||||
|         debug_assert!(value.is_normalized()); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 irate
						irate