live2d_parser/cubism_v1/moc/
params.rs1use crate::{
2 cubism_v1::moc::{parts::Part, MocObject, MocReader, ObjectData},
3 L2Error,
4};
5use serde::{Deserialize, Serialize};
6use tracing::{debug, warn};
7
8#[derive(Debug)]
9pub struct ParameterList {
10 items: Vec<u32>,
11}
12
13#[derive(Debug, Serialize, Deserialize)]
14pub struct ParameterDefinition {
15 pub id: String,
17 pub min_value: f32,
19 pub max_value: f32,
21 pub default_value: f32,
23}
24
25impl MocObject for ParameterDefinition {
26 unsafe fn read_object(r: &MocReader) -> Result<ParameterDefinition, L2Error>
27 where
28 Self: Sized,
29 {
30 let max_value = r.read()?;
31 let min_value = r.read()?;
32 let default_value = r.read()?;
33 let name = r.read()?;
34 Ok(ParameterDefinition { id: name, min_value, max_value, default_value })
35 }
36}
37
38impl ObjectData {
39 pub fn as_parameters(self) -> Vec<ParameterDefinition> {
40 match self {
41 ObjectData::Parameter(p) => vec![p],
42 ObjectData::ObjectArray(v) => v.into_iter().map(|o| o.as_parameters()).flatten().collect(),
43 s => {
44 warn!("ObjectData::as_parameters() called on non-pivot object {s:?}");
45 vec![]
46 }
47 }
48 }
49}