use bevy::{math::IVec2, prelude::Component};
use lettuces::cell::Cell;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use std::fmt::{Display, Formatter};
#[cfg(feature = "reflect")]
use bevy::ecs::reflect::ReflectMapEntities;
#[cfg(feature = "reflect")]
use bevy::prelude::{Reflect, ReflectComponent};
#[derive(Default, Eq, Hash, PartialEq, Copy, Clone, Debug, Component)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "reflect", derive(Reflect))]
#[cfg_attr(feature = "reflect", reflect(Component, Hash))]
pub struct ChunkPos(Cell);
impl ChunkPos {
pub fn new(x: i32, y: i32) -> ChunkPos {
Self(Cell { x, y })
}
pub fn x(&self) -> i32 {
self.0.x
}
pub fn y(&self) -> i32 {
self.0.y
}
}
impl From<IVec2> for ChunkPos {
fn from(value: IVec2) -> Self {
Self(Cell {
x: value.x,
y: value.y,
})
}
}
impl From<(usize, usize)> for ChunkPos {
fn from(value: (usize, usize)) -> Self {
Self(Cell {
x: value.0 as i32,
y: value.1 as i32,
})
}
}
impl Display for ChunkPos {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
f.write_str(&format!("x:{}, y:{}", self.0.x, self.0.y))
}
}