mirror of
https://github.com/italicsjenga/agb.git
synced 2024-12-24 00:31:34 +11:00
Replace calls to rem_euclid with unknown denominator with simple &
This commit is contained in:
parent
fae71bfbca
commit
5513c8566f
|
@ -63,8 +63,8 @@ impl<'a> InfiniteScrolledMap<'a> {
|
|||
|
||||
let offset = self.current_pos - (x_start * 8, y_start * 8).into();
|
||||
let offset_scroll = (
|
||||
offset.x.rem_euclid(self.map.size().width() as i32 * 8) as u16,
|
||||
offset.y.rem_euclid(self.map.size().height() as i32 * 8) as u16,
|
||||
self.map.size().rem_euclid_width(offset.x) as u16,
|
||||
self.map.size().rem_euclid_height(offset.y) as u16,
|
||||
)
|
||||
.into();
|
||||
|
||||
|
@ -179,8 +179,8 @@ impl<'a> InfiniteScrolledMap<'a> {
|
|||
self.map.set_tile(
|
||||
vram,
|
||||
(
|
||||
(tile_x - self.offset.x).rem_euclid(size.width() as i32) as u16,
|
||||
(tile_y - self.offset.y).rem_euclid(size.height() as i32) as u16,
|
||||
size.rem_euclid_width(tile_x - self.offset.x) as u16,
|
||||
size.rem_euclid_height(tile_y - self.offset.y) as u16,
|
||||
)
|
||||
.into(),
|
||||
tileset,
|
||||
|
@ -190,8 +190,8 @@ impl<'a> InfiniteScrolledMap<'a> {
|
|||
|
||||
let current_scroll = self.map.scroll_pos();
|
||||
let new_scroll = (
|
||||
(current_scroll.x as i32 + difference.x).rem_euclid(size.width() as i32 * 8) as u16,
|
||||
(current_scroll.y as i32 + difference.y).rem_euclid(size.height() as i32 * 8) as u16,
|
||||
size.rem_euclid_width(current_scroll.x as i32 + difference.x) as u16,
|
||||
size.rem_euclid_height(current_scroll.y as i32 + difference.y) as u16,
|
||||
)
|
||||
.into();
|
||||
|
||||
|
|
|
@ -47,6 +47,14 @@ impl RegularBackgroundSize {
|
|||
pub(crate) fn num_tiles(&self) -> usize {
|
||||
(self.width() * self.height()) as usize
|
||||
}
|
||||
|
||||
pub(crate) fn rem_euclid_width(&self, x: i32) -> u32 {
|
||||
(x as u32) & (self.width() - 1)
|
||||
}
|
||||
|
||||
pub(crate) fn rem_euclid_height(&self, y: i32) -> u32 {
|
||||
(y as u32) & (self.height() - 1)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
|
||||
|
@ -88,3 +96,31 @@ impl TileSetting {
|
|||
self.0 & !((1 << 10) - 1)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
|
||||
#[test_case]
|
||||
fn rem_euclid_width_works(_gba: &mut crate::Gba) {
|
||||
use RegularBackgroundSize::*;
|
||||
|
||||
let sizes = [
|
||||
Background32x32,
|
||||
Background32x64,
|
||||
Background64x32,
|
||||
Background64x64,
|
||||
];
|
||||
|
||||
for size in sizes.iter() {
|
||||
let width = size.width() as i32;
|
||||
|
||||
assert_eq!(size.rem_euclid_width(8), 8);
|
||||
assert_eq!(size.rem_euclid_width(3 + width), 3);
|
||||
assert_eq!(size.rem_euclid_width(7 + width * 9), 7);
|
||||
|
||||
assert_eq!(size.rem_euclid_width(-8), size.width() - 8);
|
||||
assert_eq!(size.rem_euclid_width(-17 - width * 8), size.width() - 17);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue