use super::range::Scale;
use cubiomes_sys::Pos;
#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct BlockPosition {
pub x: i32,
pub z: i32,
}
impl BlockPosition {
#[must_use]
pub fn new(x: i32, z: i32) -> Self {
Self { x, z }
}
#[must_use]
pub fn from_scaled(x: i32, z: i32, scale: Scale) -> Self {
Self {
x: scale.unscale_coord(x),
z: scale.unscale_coord(z),
}
}
#[must_use]
pub fn as_scaled(&self, scale: Scale) -> (i32, i32) {
(scale.scale_coord(self.x), scale.scale_coord(self.z))
}
#[must_use]
pub fn scale_by_num(&self, scale: i32) -> (i32, i32) {
(self.x.div_euclid(scale), self.z.div_euclid(scale))
}
}
impl From<Pos> for BlockPosition {
fn from(value: Pos) -> Self {
Self {
x: value.x,
z: value.z,
}
}
}