Struct Wrapped2D

Source
pub struct Wrapped2D<T, const X: u32, const Y: u32>(Vec2D<T>);
Expand description

A 2D vector wrapper with fixed-size wrapping capabilities.

This struct is generic over a numeric type T and two constants X and Y, which represent the fixed size of the 2D wrapping area.

§Type Parameters

  • T - Any numeric type that implements the Fixed trait.
  • X - The maximum bound for the x-axis.
  • Y - The maximum bound for the y-axis.

Tuple Fields§

§0: Vec2D<T>

Implementations§

Source§

impl<T, const X: u32, const Y: u32> Wrapped2D<T, X, Y>
where T: Fixed,

Source

pub fn wrap_around_map(&self) -> Self

Wraps the coordinates of the vector around the bounds defined by X and Y.

§Returns

A new Wrapped2D instance with its coordinates wrapped within the bounds.

Source

pub fn wrap_coordinate(value: T, max_value: T) -> T

Wraps a single coordinate value around a maximum value.

§Arguments
  • value - The coordinate value to be wrapped.
  • max_value - The maximum bound for the coordinate.
§Returns

The wrapped coordinate value.

Methods from Deref<Target = Vec2D<T>>§

Source

pub fn abs(&self) -> T

Computes the magnitude (absolute value) of the vector.

§Returns

The magnitude of the vector as a scalar of type T.

Source

pub fn abs_sq(&self) -> T

Source

pub fn round(&self) -> Self

Source

pub fn round_to_2(&self) -> Self

Source

pub fn floor(&self) -> Self

Source

pub fn to(&self, other: &Self) -> Self

Creates a vector pointing from the current vector (self) to another vector (other).

§Arguments
  • other - The target vector.
§Returns

A new vector representing the direction from self to other.

Source

pub fn project_overboundary_fw(&self, dir: &Self) -> Self

Source

pub fn project_overboundary_bw(&self, dir: &Self) -> Self

Source

pub fn unwrapped_to(&self, other: &Self) -> Self

Computes an “unwrapped” vector pointing from the current vector (self) to another vector (other).

This method considers potential wrapping around a 2D map (based on the map size) and calculates the smallest vector that connects self to other. The wrapping allows for efficient navigation across boundaries.

§Arguments
  • other - The target vector to which the direction is computed.
§Returns

A Vec2D representing the shortest unwrapped direction from self to other.

Source

pub fn unwrap_all(&self) -> [Self; 9]

Source

pub fn unwrapped_to_top_right(&self, other: &Self) -> Self

Source

pub fn unwrapped_to_bottom_right(&self, other: &Self) -> Self

Source

fn get_projected_in_range( &self, to: &Self, range: (&[i8], &[i8]), ) -> Vec<(Self, I64F64)>

Source

pub fn perp_unit_to(&self, other: &Self) -> Self

Computes a perpendicular unit vector pointing to another vector (other).

The direction of the perpendicular vector depends on whether self is clockwise or counterclockwise to other.

§Arguments
  • other - The target vector to compare directions with.
§Returns

A unit Vec2D perpendicular to self pointing towards other. Returns a zero vector if self and other are collinear.

Source

pub fn perp_unit(&self, clockwise: bool) -> Self

Computes a perpendicular unit vector to the current vector.

The direction of the perpendicular vector depends on the clockwise parameter.

§Arguments
  • clockwise - A boolean indicating the direction. true for clockwise, false for counterclockwise.
§Returns

A normalized perpendicular Vec2D.

Source

pub fn flip_unit(&self) -> Self

Computes a flipped collinear unit vector to the current vector.

This is equivalent to rotating the vector 180 degrees.

§Returns

A normalized flipped collinear Vec2D.

Source

pub fn is_clockwise_to(&self, other: &Self) -> Option<bool>

Determines whether the current vector is clockwise relative to another vector (other).

This is determined using the cross product:

  • Some(true) if self is clockwise to other.
  • Some(false) if self is counterclockwise to other.
  • None if self and other are collinear.
§Arguments
  • other - The vector to compare relative direction with.
§Returns

An Option<bool> indicating the relative direction.

Source

pub fn angle_to(&self, other: &Self) -> T

Computes the angle (in degrees) between the current vector and another vector (other).

The method calculates the cosine of the angle using the dot product, clamps it to the valid range of [-1, 1], and then computes the angle in degrees.

§Arguments
  • other - The target vector to compute the angle to.
§Returns

The angle in degrees as a scalar of type T.

Source

pub fn is_eq_signum(&self, other: &Self) -> bool

Source

pub fn euclid_distance(&self, other: &Self) -> T

Computes the Euclidean distance between the current vector and another vector.

§Arguments
  • other - The other vector to compute the distance to.
§Returns

The Euclidean distance as a scalar of type T.

Source

pub fn euclid_distance_sq(&self, other: &Self) -> T

Computes the Euclidean distance squared.

§Arguments
  • other - The other vector to compute the distance to.
§Returns

The Euclidean distance squared as a scalar of type T.

Source

pub fn x(&self) -> T

Returns the x-component of the vector.

§Returns

The x value of type T.

Source

pub fn y(&self) -> T

Returns the y-component of the vector.

§Returns

The y value of type T.

Source

pub fn get(&self, axis: VecAxis) -> T

Source

pub fn is_zero(&self) -> bool

Source

pub fn wrap_around_map(&self) -> Self

Wraps the vector around a predefined 2D map.

This method ensures the vector’s coordinates do not exceed the boundaries of the map defined by map_size(). If coordinates go beyond these boundaries, they are wrapped to remain within valid values.

Source

pub fn wraps(&self) -> WrapDirection

Source

pub fn wrap_by(&self, dir: &WrapDirection) -> Self

Trait Implementations§

Source§

impl<T, const X: u32, const Y: u32> Deref for Wrapped2D<T, X, Y>

Source§

fn deref(&self) -> &Self::Target

Dereferences the Wrapped2D wrapper to access its inner Vec2D value.

§Returns

A reference to the inner Vec2D.

Source§

type Target = Vec2D<T>

The resulting type after dereferencing.

Auto Trait Implementations§

§

impl<T, const X: u32, const Y: u32> Freeze for Wrapped2D<T, X, Y>
where T: Freeze,

§

impl<T, const X: u32, const Y: u32> RefUnwindSafe for Wrapped2D<T, X, Y>
where T: RefUnwindSafe,

§

impl<T, const X: u32, const Y: u32> Send for Wrapped2D<T, X, Y>
where T: Send,

§

impl<T, const X: u32, const Y: u32> Sync for Wrapped2D<T, X, Y>
where T: Sync,

§

impl<T, const X: u32, const Y: u32> Unpin for Wrapped2D<T, X, Y>
where T: Unpin,

§

impl<T, const X: u32, const Y: u32> UnwindSafe for Wrapped2D<T, X, Y>
where T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<Src, Dst> LosslessTryInto<Dst> for Src
where Dst: LosslessTryFrom<Src>,

Source§

fn lossless_try_into(self) -> Option<Dst>

Performs the conversion.
Source§

impl<Src, Dst> LossyInto<Dst> for Src
where Dst: LossyFrom<Src>,

Source§

fn lossy_into(self) -> Dst

Performs the conversion.
Source§

impl<T> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.
§

impl<T> ErasedDestructor for T
where T: 'static,

§

impl<T> MaybeSendSync for T