live2d_parser/cubism_v1/moc/
affines.rs

1use 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}