Skip to main content

plasma_prp/animation/
ag_master.rs

1//! plAGMasterMod — manages animation instances with blend weights.
2//!
3//! C++ ref: plAnimation/plAGMasterMod.h/.cpp, plAGModifier.h/.cpp, plAGAnimInstance.h/.cpp
4
5use crate::core::uoid::Uoid;
6
7/// A running animation instance attached to a master mod.
8#[derive(Debug, Clone)]
9pub struct AGAnimInstance {
10    pub anim_key: Uoid,
11    pub anim_name: String,
12    pub blend_weight: f32,
13    pub speed: f32,
14    pub current_time: f32,
15    pub is_attached: bool,
16}
17
18impl Default for AGAnimInstance {
19    fn default() -> Self {
20        Self {
21            anim_key: Uoid::invalid(),
22            anim_name: String::new(),
23            blend_weight: 1.0,
24            speed: 1.0,
25            current_time: 0.0,
26            is_attached: false,
27        }
28    }
29}
30
31/// Parsed plAGMasterMod data.
32#[derive(Debug, Clone)]
33pub struct AGMasterModData {
34    pub self_key: Option<Uoid>,
35    pub group_name: String,
36    pub is_grouped: bool,
37    pub is_grouped_master: bool,
38    /// Private animation keys.
39    pub private_anims: Vec<Uoid>,
40}
41
42impl Default for AGMasterModData {
43    fn default() -> Self {
44        Self {
45            self_key: None,
46            group_name: String::new(),
47            is_grouped: false,
48            is_grouped_master: false,
49            private_anims: Vec::new(),
50        }
51    }
52}
53
54/// Parsed plAGModifier data — per-channel target.
55#[derive(Debug, Clone)]
56pub struct AGModifierData {
57    pub self_key: Option<Uoid>,
58    pub channel_name: String,
59    pub auto_apply: bool,
60    pub enabled: bool,
61}
62
63impl Default for AGModifierData {
64    fn default() -> Self {
65        Self {
66            self_key: None,
67            channel_name: String::new(),
68            auto_apply: true,
69            enabled: true,
70        }
71    }
72}