gled_model/asset/animation/
config.rs1pub mod float_value;
2
3use float_value::FloatValue;
4use serde::{Deserialize, Serialize};
5
6use crate::{
7 collection::Collections,
8 sound::trigger_ref::{CollectSoundTriggers, SoundLevels, SoundTriggerSet},
9};
10
11#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
12#[serde(default)]
13pub struct AnimationConfig {
14 pub(crate) u32_0: u32,
15 pub(crate) u32_1: u32,
16 pub(crate) u32_2: u32,
17 pub float_0: FloatValue,
18 pub float_1: FloatValue,
19 pub float_2: FloatValue,
20 pub float_3: FloatValue,
21 pub float_4: FloatValue,
22 pub float_5: FloatValue,
23}
24
25impl AnimationConfig {
26 pub fn write_data(
27 &self,
28 data: &mut [u8],
29 beat_progression: f32,
30 collections: &Collections,
31 sound_data: &dyn SoundLevels,
32 ) {
33 data[0..4].copy_from_slice(&self.u32_0.to_le_bytes());
34 data[4..8].copy_from_slice(&self.u32_1.to_le_bytes());
35 data[8..12].copy_from_slice(&self.u32_2.to_le_bytes());
36 for (index, value) in self.floats().into_iter().enumerate() {
37 let start = 12 + index * 4;
38 data[start..start + 4].copy_from_slice(
39 &value
40 .value(beat_progression, collections, sound_data)
41 .to_le_bytes(),
42 );
43 }
44 }
45
46 pub fn floats(&self) -> [&FloatValue; 6] {
48 [
49 &self.float_0,
50 &self.float_1,
51 &self.float_2,
52 &self.float_3,
53 &self.float_4,
54 &self.float_5,
55 ]
56 }
57
58 pub const fn size() -> usize {
59 36
60 }
61
62 pub fn u32(&mut self, index: usize) -> Option<&mut u32> {
63 Some(match index {
64 0 => &mut self.u32_0,
65 1 => &mut self.u32_1,
66 2 => &mut self.u32_2,
67 _ => return None,
68 })
69 }
70
71 pub fn float(&mut self, index: usize) -> Option<&mut FloatValue> {
72 Some(match index {
73 0 => &mut self.float_0,
74 1 => &mut self.float_1,
75 2 => &mut self.float_2,
76 3 => &mut self.float_3,
77 4 => &mut self.float_4,
78 5 => &mut self.float_5,
79 _ => return None,
80 })
81 }
82}
83
84impl CollectSoundTriggers for AnimationConfig {
85 fn collect_sound_triggers(&self, triggers: &mut SoundTriggerSet) {
86 for value in [
87 &self.float_0,
88 &self.float_1,
89 &self.float_2,
90 &self.float_3,
91 &self.float_4,
92 &self.float_5,
93 ] {
94 value.collect_sound_triggers(triggers);
95 }
96 }
97}