use bevy::{
ecs::{component::Component, entity::Entity},
utils::HashMap,
};
use crate::{chunks::ChunkCoord, coords::calculate_chunk_coordinate, tiles::TileCoord};
#[derive(Component)]
pub struct TileMap<const N: usize = 2> {
chunks: HashMap<ChunkCoord<N>, Entity>,
chunk_size: usize,
}
impl<const N: usize> TileMap<N> {
pub(crate) fn with_chunk_size(chunk_size: usize) -> Self {
Self {
chunks: Default::default(),
chunk_size,
}
}
pub fn get_from_tile(&self, tile_c: TileCoord<N>) -> Option<Entity> {
let chunk_c = calculate_chunk_coordinate(tile_c.0, self.chunk_size);
self.chunks
.get::<ChunkCoord<N>>(&ChunkCoord::<N>(chunk_c))
.cloned()
}
pub fn get_from_chunk(&self, chunk_c: ChunkCoord<N>) -> Option<Entity> {
self.chunks.get::<ChunkCoord<N>>(&chunk_c).cloned()
}
pub fn get_chunks(&self) -> &HashMap<ChunkCoord<N>, Entity> {
&self.chunks
}
pub(crate) fn get_chunks_mut(&mut self) -> &mut HashMap<ChunkCoord<N>, Entity> {
&mut self.chunks
}
pub fn get_chunk_size(&self) -> usize {
self.chunk_size
}
}