use super::Empty;
use crate::assets::loadable::sprite::SpritePivot;
pub trait Pivot: Sized {
fn default_or_value(self) -> Pivoting;
fn pivot_value(
self,
source_x: SpritePivot,
source_y: SpritePivot,
) -> (SpritePivot, SpritePivot);
}
#[doc(hidden)]
#[derive(Copy, Clone, Default)]
pub struct Pivoting {
x: SpritePivot,
y: SpritePivot,
}
impl Pivoting {
pub(crate) const fn new(x: SpritePivot, y: SpritePivot) -> Self {
Self { x, y }
}
}
impl Pivot for Pivoting {
#[inline]
fn default_or_value(self) -> Self {
self
}
#[inline(always)]
fn pivot_value(
self,
_source_x: SpritePivot,
_source_y: SpritePivot,
) -> (SpritePivot, SpritePivot) {
(self.x, self.y)
}
}
impl Pivot for Empty {
#[inline]
fn default_or_value(self) -> Pivoting {
Pivoting::new(SpritePivot::default(), SpritePivot::default())
}
#[inline]
fn pivot_value(
self,
source_x: SpritePivot,
source_y: SpritePivot,
) -> (SpritePivot, SpritePivot) {
(source_x, source_y)
}
}