#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum Spot {
TopLeft(i32, i32),
Feet(i32, i32),
}
impl Spot {
pub fn top_left(self, (w, h): (i32, i32)) -> (i32, i32) {
match self {
Spot::TopLeft(x, y) => (x, y),
Spot::Feet(x, floor_y) => (x - (w + 1) / 2, floor_y - h),
}
}
pub fn in_units(self, k: i32) -> Spot {
let d = |v: i32| v.div_euclid(k);
match self {
Spot::TopLeft(x, y) => Spot::TopLeft(d(x), d(y)),
Spot::Feet(x, y) => Spot::Feet(d(x), d(y)),
}
}
pub fn in_pixels(self, k: i32) -> Spot {
match self {
Spot::TopLeft(x, y) => Spot::TopLeft(x * k, y * k),
Spot::Feet(x, y) => Spot::Feet(x * k, y * k),
}
}
}