Struct ruscii::spatial::Vec2

source ·
pub struct Vec2 {
    pub x: i32,
    pub y: i32,
}
Expand description

Represents a two-dimensional spatial vector.

It is generally used as a position vector, representing a point on the Canvas. In the terminal, the origin is (by default) set at the top-left corner with y increasing downwards, i.e., counting from top to bottom.

At times, it is also used as a size. The differences are shown in the example below.

Example

let mut canvas = Canvas::new(
    Vec2::xy(20, 20),  // (20, 20) is used as a size here.
    &VisualElement::default()
);
let a = Vec2::xy(20, 20);  // (20, 20) is used as a position here
let b = Vec2::xy(19, 19);  // and (19, 19) as a position here.

assert!(canvas.contains(b));  // b is a valid point on the Canvas.
assert!(!canvas.contains(a));  // The bottom-right corner is actually (19, 19).

Fields§

§x: i32§y: i32

Implementations§

source§

impl Vec2

source

pub fn zero() -> Vec2

Constructs a Vec2 representing (0, 0).

source

pub fn xy<T1: ToPrimitive, T2: ToPrimitive>(x: T1, y: T2) -> Vec2

Constructs a Vec2 with the given x- and y-coordinates.

source

pub fn x<T: ToPrimitive>(x: T) -> Vec2

Constructs a Vec2 with the given x-coordinate and a y-coordinate of 0.

source

pub fn y<T: ToPrimitive>(y: T) -> Vec2

Constructs a Vec2 with the given y-coordinate and an x-coordinate of 0.

source

pub fn clear(&mut self)

Sets the Vec2 object to (0, 0).

Trait Implementations§

source§

impl Add<Vec2> for Vec2

§

type Output = Vec2

The resulting type after applying the + operator.
source§

fn add(self, other: Vec2) -> Vec2

Performs the + operation. Read more
source§

impl AddAssign<Vec2> for Vec2

source§

fn add_assign(&mut self, other: Vec2)

Performs the += operation. Read more
source§

impl Clone for Vec2

source§

fn clone(&self) -> Vec2

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Vec2

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for Vec2

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: ToPrimitive> Div<T> for Vec2

§

type Output = Vec2

The resulting type after applying the / operator.
source§

fn div(self, scalar: T) -> Vec2

Performs the / operation. Read more
source§

impl Div<Vec2> for Vec2

§

type Output = Vec2

The resulting type after applying the / operator.
source§

fn div(self, other: Vec2) -> Vec2

Performs the / operation. Read more
source§

impl<T: ToPrimitive> DivAssign<T> for Vec2

source§

fn div_assign(&mut self, scalar: T)

Performs the /= operation. Read more
source§

impl DivAssign<Vec2> for Vec2

source§

fn div_assign(&mut self, other: Vec2)

Performs the /= operation. Read more
source§

impl From<Direction> for Vec2

source§

fn from(value: Direction) -> Self

Converts a Direction to a unit-length Vec2 in that direction.

Because terminal coordinates begin at the top line, vertical directions are inverted compared to what you may expect. More information in the example. For Direction::None, a zero Vec2 is returned.

Example

In the terminal, y increases going downward from the top. Therefore, Direction::Up is a negative vector and Direction::Down is a positive vector.

let up = Vec2::from(Direction::Up);
let down = Vec2::from(Direction::Down);

assert_eq!(up, Vec2::y(-1));
assert_eq!(down, Vec2::y(1));
source§

impl Hash for Vec2

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<T> Index<Vec2> for Vec<Vec<T>>

source§

fn index(&self, index: Vec2) -> &Self::Output

Allows indexing by a Vec2 for an arbitrary nested Vec.

let vec = vec![vec![1, 2], vec![3, 4], vec![5, 6]];
let point = Vec2::xy(1, 1);
assert_eq!(vec[point], 4)
§

type Output = T

The returned type after indexing.
source§

impl<T> IndexMut<Vec2> for Vec<Vec<T>>

source§

fn index_mut(&mut self, index: Vec2) -> &mut Self::Output

Performs the mutable indexing (container[index]) operation. Read more
source§

impl<T: ToPrimitive> Mul<T> for Vec2

§

type Output = Vec2

The resulting type after applying the * operator.
source§

fn mul(self, scalar: T) -> Vec2

Performs the * operation. Read more
source§

impl Mul<Vec2> for Vec2

§

type Output = Vec2

The resulting type after applying the * operator.
source§

fn mul(self, other: Vec2) -> Vec2

Performs the * operation. Read more
source§

impl<T: ToPrimitive> MulAssign<T> for Vec2

source§

fn mul_assign(&mut self, scalar: T)

Performs the *= operation. Read more
source§

impl MulAssign<Vec2> for Vec2

source§

fn mul_assign(&mut self, other: Vec2)

Performs the *= operation. Read more
source§

impl Neg for Vec2

§

type Output = Vec2

The resulting type after applying the - operator.
source§

fn neg(self) -> Vec2

Performs the unary - operation. Read more
source§

impl PartialEq<Vec2> for Vec2

source§

fn eq(&self, other: &Vec2) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Sub<Vec2> for Vec2

§

type Output = Vec2

The resulting type after applying the - operator.
source§

fn sub(self, other: Vec2) -> Vec2

Performs the - operation. Read more
source§

impl SubAssign<Vec2> for Vec2

source§

fn sub_assign(&mut self, other: Vec2)

Performs the -= operation. Read more
source§

impl TryFrom<Vec2> for Direction

source§

fn try_from(value: Vec2) -> Result<Self, Self::Error>

Converts a Vec2 to a Direction.

Because terminal coordinates begin at the top line, vertical directions are inverted compared to what you may expect. For more information, see the example.

Errors

If the given value is not orthogonal, i.e., one of the components is not zero, TryFromVec2Error is returned.

Examples

In the terminal, y increases going downward from the top. Therefore, Direction::Up is a negative vector and Direction::Down is a positive vector.

let negative_y = Direction::try_from(Vec2::y(-1)).unwrap();
let positive_y = Direction::try_from(Vec2::y(1)).unwrap();

assert_eq!(negative_y, Direction::Up);
assert_eq!(positive_y, Direction::Down);

Passing non-orthogonal vectors, that is, vectors that are neither parallel to the x- or y-axis will result in an error.

Direction::try_from(Vec2::xy(1, 1)).unwrap();  // panics!
§

type Error = TryFromVec2Error

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

impl Copy for Vec2

source§

impl Eq for Vec2

source§

impl StructuralEq for Vec2

source§

impl StructuralPartialEq for Vec2

Auto Trait Implementations§

§

impl RefUnwindSafe for Vec2

§

impl Send for Vec2

§

impl Sync for Vec2

§

impl Unpin for Vec2

§

impl UnwindSafe for Vec2

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

const: unstable · source§

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

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

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

const: unstable · 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> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

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

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

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

Performs the conversion.
source§

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

§

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

The type returned in the event of a conversion error.
const: unstable · source§

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

Performs the conversion.