live2d_parser/cubism_v1/moc/
deformers.rs1use 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 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 pivots: pivots.as_pivots(),
45 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 pivots: pivots.as_pivots(),
72 opacities,
73 })
74 }
75}