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

Download history 24/week @ 2024-07-21 50/week @ 2024-07-28 16/week @ 2024-08-04 23/week @ 2024-08-11 16/week @ 2024-08-18 12/week @ 2024-08-25 18/week @ 2024-09-01 19/week @ 2024-09-08 10/week @ 2024-09-15 27/week @ 2024-09-22 36/week @ 2024-09-29 2/week @ 2024-10-06 16/week @ 2024-10-13 8/week @ 2024-10-20 13/week @ 2024-10-27 14/week @ 2024-11-03

51 downloads per month
Used in 4 crates (2 directly)

MIT/Apache

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 with IVec2/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