use bevy::prelude::Component;
use std::{fmt::Debug, hash::Hash};
#[cfg(feature = "2D")]
pub use {hexagon_2d_cell::*, moore_2d_cell::*, neumann_2d_cell::*};
#[cfg(feature = "3D")]
pub use {moore_3d_cell::*, neumann_3d_cell::*};
#[cfg(feature = "2D")]
mod hexagon_2d_cell;
#[cfg(feature = "2D")]
mod moore_2d_cell;
#[cfg(feature = "3D")]
mod moore_3d_cell;
#[cfg(feature = "2D")]
mod neumann_2d_cell;
#[cfg(feature = "3D")]
mod neumann_3d_cell;
pub trait Cell: Clone + Component {
type Coordinates: Clone + Debug + Send + Sync + Eq + Hash;
#[must_use]
fn coords(&self) -> &Self::Coordinates;
#[must_use]
fn neighbor_coordinates(&self) -> impl ExactSizeIterator<Item = Self::Coordinates> + '_;
}