use deckcraft_geom::Xfrm;
use deckcraft_geom::morph::{Fade, GeometryMorph};
use deckcraft_geom::preset::Geometry;
use deckcraft_model::{Geom, Shape, ShapeId};
use kurbo::Vec2;
use crate::shape_geometry;
#[derive(Clone, Debug, PartialEq)]
pub struct PathMorph {
pub id: ShapeId,
pub from: Geom,
pub from_box: Xfrm,
pub to_box: Xfrm,
pub t: f64,
}
fn ratio(now: f64, own: f64) -> f64 {
let r = now / own;
if own.abs() > 1e-9 && r.is_finite() {
r
} else {
1.0
}
}
pub(crate) fn geometry(pm: &PathMorph, s: &Shape, w: f64, h: f64) -> (Geometry, Vec<Fade>) {
let a = shape_geometry(
&Shape {
geom: pm.from.clone(),
..Shape::default()
},
pm.from_box.w,
pm.from_box.h,
);
let b = shape_geometry(s, pm.to_box.w, pm.to_box.h);
let scale = |x: Xfrm| Vec2::new(ratio(w, x.w), ratio(h, x.h));
GeometryMorph::new(&a, &b).at(pm.t, scale(pm.from_box), scale(pm.to_box))
}