live2d_parser/cubism_v1/moc/
deformers.rs

1use super::*;
2
3
4pub enum DeformerType {
5    Dummy = 0,
6    Rotation = 1,
7    CurvedSurface = 2,
8}
9
10#[derive(Debug, Serialize, Deserialize)]
11pub struct RotationDeformer {
12    pub id: String,
13    pub target_id: String,
14    pub pivots: Vec<Pivot>,
15    pub pivots_opacity: Vec<f32>,
16    pub affine: Vec<Affine>,
17}
18#[derive(Debug, Serialize, Deserialize)]
19pub struct CurvedSurfaceDeformer {
20    pub id: String,
21    pub target_id: String,
22    pub row: i32,
23    pub column: i32,
24    pub pivots: Vec<Pivot>,
25    pub opacities: Vec<f32>,
26}
27
28impl MocObject for RotationDeformer {
29    fn read_object(reader: &mut MocReader) -> Result<Self, L2Error>
30    where
31        Self: Sized,
32    {
33        let id = reader.read()?;
34        let target_id = reader.read()?;
35        // let x = reader.read_var()?;
36        tracing::warn!("rotate={}->{}", id, target_id);
37        let pivots: ObjectData = reader.read()?;
38        let affine: ObjectData = reader.read()?;
39        let opacities = if reader.version() >= 10 { reader.read()? } else { Vec::new() };
40        Ok(Self {
41            id,
42            target_id,
43            //
44            pivots: pivots.as_pivots(),
45            //
46            affine: affine.as_affine(),
47            pivots_opacity: opacities,
48        })
49    }
50}
51
52impl MocObject for CurvedSurfaceDeformer {
53    fn read_object(reader: &mut MocReader) -> Result<Self, L2Error>
54    where
55        Self: Sized,
56    {
57        let id = reader.read()?;
58        let target_id = reader.read()?;
59        warn!("curve={}->{}", id, target_id);
60        let row = reader.read()?;
61        let column = reader.read()?;
62        let pivots: ObjectData = reader.read()?;
63        let unknown: ObjectData = reader.read()?;
64        let opacities = if reader.version() >= 10 { reader.read()? } else { Vec::new() };
65        Ok(Self {
66            id,
67            target_id,
68            row,
69            column,
70            //
71            pivots: pivots.as_pivots(),
72            opacities,
73        })
74    }
75}