live2d_parser/cubism_v1/moc/
affines.rs1use super::*;
2
3#[derive(Debug, Serialize, Deserialize)]
4pub struct Affine {
5 pub origin_x: f32,
6 pub origin_y: f32,
7 pub scale_x: f32,
8 pub scale_y: f32,
9 pub rotation: f32,
10 pub reflect_x: bool,
11 pub reflect_y: bool,
12}
13
14
15impl MocObject for Affine {
16 fn read_object(reader: &mut MocReader) -> Result<Self, L2Error>
17 where
18 Self: Sized,
19 {
20 let origin_x = reader.read()?;
21 let origin_y = reader.read()?;
22 let scale_x = reader.read()?;
23 let scale_y = reader.read()?;
24 let rotation = reader.read()?;
25 let reflect_x = if reader.version() >= 10 { reader.read()? } else { false };
26 let reflect_y = if reader.version() >= 10 { reader.read()? } else { false };
27 Ok(Affine { origin_x, origin_y, scale_x, scale_y, rotation, reflect_x, reflect_y })
28 }
29}
30
31impl ObjectData {
32 pub fn as_affine(self) -> Vec<Affine> {
33 match self {
34 ObjectData::Null => Vec::new(),
35 ObjectData::Affine(o) => vec![o],
36 ObjectData::ObjectArray(o) => o.into_iter().map(|o| o.as_affine()).flatten().collect(),
37 s => {
38 warn!("ObjectData::as_affine() called on non-pivot object {s:?}");
39 vec![]
40 }
41 }
42 }
43}