--- a/rust/mapgen/src/lib.rs Mon Feb 03 15:03:26 2025 +0100
+++ b/rust/mapgen/src/lib.rs Mon Feb 03 15:25:28 2025 +0100
@@ -66,9 +66,8 @@
let mut texture = Vec2D::new(&land.size().size(), 0);
if let Some(land_sprite) = theme.land_texture() {
- for (row_index, (land_row, tex_row)) in land.rows().zip(texture.rows_mut()).enumerate()
+ for (sprite_row, (land_row, tex_row)) in land_sprite.rows().cycle().zip(land.rows().zip(texture.rows_mut()))
{
- let sprite_row = land_sprite.get_row(row_index % land_sprite.height() as usize);
let mut x_offset = 0;
while sprite_row.len() < land.width() - x_offset {
let copy_range = x_offset..x_offset + sprite_row.len();
--- a/rust/mapgen/src/theme.rs Mon Feb 03 15:03:26 2025 +0100
+++ b/rust/mapgen/src/theme.rs Mon Feb 03 15:25:28 2025 +0100
@@ -7,7 +7,7 @@
path::Path,
slice::{from_raw_parts, from_raw_parts_mut},
};
-
+use std::slice::ChunksExact;
use integral_geometry::Size;
use vec2d::Vec2D;
@@ -32,7 +32,7 @@
}
#[inline]
- pub fn rows(&self) -> impl DoubleEndedIterator<Item = &[u32]> {
+ pub fn rows(&self) -> ChunksExact<u32> {
self.pixels.rows()
}
--- a/rust/vec2d/src/lib.rs Mon Feb 03 15:03:26 2025 +0100
+++ b/rust/vec2d/src/lib.rs Mon Feb 03 15:25:28 2025 +0100
@@ -1,7 +1,7 @@
use integral_geometry::Size;
use std::{
ops::{Index, IndexMut},
- slice::SliceIndex,
+ slice::{ChunksExact, ChunksExactMut, SliceIndex},
};
#[derive(Debug, Clone)]
@@ -114,12 +114,12 @@
}
#[inline]
- pub fn rows(&self) -> impl DoubleEndedIterator<Item = &[T]> {
+ pub fn rows(&self) -> ChunksExact<'_, T> {
self.data.chunks_exact(self.width())
}
#[inline]
- pub fn rows_mut(&mut self) -> impl DoubleEndedIterator<Item = &mut [T]> {
+ pub fn rows_mut(&mut self) -> ChunksExactMut<'_, T> {
let width = self.width();
self.data.chunks_exact_mut(width)
}