8 releases
0.2.3 | Sep 5, 2023 |
---|---|
0.2.2 | Sep 4, 2023 |
0.2.1 | Aug 19, 2023 |
0.1.5 | Aug 12, 2023 |
0.1.3 | Mar 18, 2023 |
#953 in Data structures
51 downloads per month
Used in 4 crates
(2 directly)
13KB
260 lines
grids
Crate
This crate provides a simple and flexible 2D grid data structure mainly intended for grid based games.
If you need a matrix this is not the right crate.
Features
- Flexible grid creation.
- Cloning sub-sections of the grid based on rectangular bounds.
- Pasting one grid into another at a specified offset.
- Many convenient iterators with/without coordinates in various types.
- Clamped access methods to ensure coordinates remain within grid boundaries.
- Support for serialization and deserialization via
serde
feature. - Uses
glam
and allows indexing withIVec2/UVec2
for extra convenience.
Example Usage
Here's a simple example showcasing the usage of the crate:
let mut grid = Grid::new(3, 2, 0); // A 3x2 grid filled with zeros.
grid[(0, 1)] = 5;
// Accessing using glam::IVec2.
assert_eq!(grid[glam::IVec2::new(1, 0)], 0);
// Accessing using glam::UVec2.
assert_eq!(grid[glam::UVec2::new(0, 1)], 5);
// Converting grid to a Vec.
assert_eq!(
grid.into_iter_values().collect::<Vec<_>>(),
vec![0, 0, 0, 5, 0, 0]
);
Dependencies
~4MB
~122K SLoC