// Leave-one-out over the elements that touch a band, dumping raw RGBA each time. use sylpheed_formats::{pak, ui_layout}; fn main() { let mut a = std::env::args().skip(1); let pk = a.next().unwrap(); let bi: usize = a.next().unwrap().parse().unwrap(); let dir = a.next().unwrap(); let ar = pak::PakArchive::open(pk).unwrap(); let by = ar.read(&ar.entries()[bi]).unwrap(); let b = ui_layout::parse_build(&by).unwrap(); let o = ui_layout::ComposeOptions { backdrop: [0, 0, 0, 255], ..Default::default() }; let n = b.elements.len(); let base = ui_layout::compose(&b, &by, o, None); std::fs::write(format!("{dir}/base.raw"), &base.rgba).unwrap(); println!("canvas {}x{} elements {n}", base.width, base.height); for i in 0..n { let e = &b.elements[i]; let Some(kf) = e.rest() else { continue }; // only bother with elements whose rest pose can touch the band let mut v = vec![true; n]; v[i] = false; let c = ui_layout::compose(&b, &by, o, Some(&v)); std::fs::write(format!("{dir}/wo-{i}.raw"), &c.rgba).unwrap(); println!( "{i}\t{}\t{}\t({},{})\ta={}", e.name, e.sprite.clone().unwrap_or_default(), kf.x, kf.y, kf.fade >> 24 ); } }