diff --git a/agb/src/number.rs b/agb/src/number.rs index a30f93c..f3c6c94 100644 --- a/agb/src/number.rs +++ b/agb/src/number.rs @@ -94,21 +94,6 @@ pub struct Num(I); pub type FixedNum = Num; pub type Integer = Num; -pub fn change_base< - I: FixedWidthUnsignedInteger, - J: FixedWidthUnsignedInteger + Into, - const N: usize, - const M: usize, ->( - num: Num, -) -> Num { - if N < M { - Num(num.0.into() << (M - N)) - } else { - Num(num.0.into() >> (N - M)) - } -} - impl From for Num { fn from(value: I) -> Self { Num(value << N) @@ -232,6 +217,15 @@ impl Neg for Num { } impl Num { + pub fn change_base, const M: usize>(self) -> Num { + let n: J = self.0.into(); + if N < M { + Num(n << (M - N)) + } else { + Num(n >> (N - M)) + } + } + pub fn from_raw(n: I) -> Self { Num(n) } @@ -358,8 +352,8 @@ fn test_change_base(_gba: &mut super::Gba) { let two: Num = 2.into(); let three: Num = 3.into(); - assert_eq!(two + change_base(three), 5.into()); - assert_eq!(three + change_base(two), 5.into()); + assert_eq!(two + three.change_base(), 5.into()); + assert_eq!(three + two.change_base(), 5.into()); } #[test_case] @@ -511,6 +505,12 @@ impl From<(T, T)> for Vector2D { } } +impl Vector2D { + pub fn change_base>(self) -> Vector2D { + (self.x.into(), self.y.into()).into() + } +} + impl From> for Vector2D> { fn from(n: Vector2D) -> Self { Vector2D { @@ -525,6 +525,12 @@ pub struct Rect { pub size: Vector2D, } +impl Rect { + pub fn new(position: Vector2D, size: Vector2D) -> Self { + Rect { position, size } + } +} + impl Vector2D { pub fn new(x: T, y: T) -> Self { Vector2D { x, y }