pub mod float_value;
use float_value::FloatValue;
use serde::{Deserialize, Serialize};
use crate::{
collection::Collections,
sound::trigger_ref::{CollectSoundTriggers, SoundLevels, SoundTriggerSet},
};
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
#[serde(default)]
pub struct AnimationConfig {
pub(crate) u32_0: u32,
pub(crate) u32_1: u32,
pub(crate) u32_2: u32,
pub float_0: FloatValue,
pub float_1: FloatValue,
pub float_2: FloatValue,
pub float_3: FloatValue,
pub float_4: FloatValue,
pub float_5: FloatValue,
}
impl AnimationConfig {
pub fn write_data(
&self,
data: &mut [u8],
beat_progression: f32,
collections: &Collections,
sound_data: &dyn SoundLevels,
) {
data[0..4].copy_from_slice(&self.u32_0.to_le_bytes());
data[4..8].copy_from_slice(&self.u32_1.to_le_bytes());
data[8..12].copy_from_slice(&self.u32_2.to_le_bytes());
data[12..16].copy_from_slice(
&self
.float_0
.value(beat_progression, collections, sound_data)
.to_le_bytes(),
);
data[16..20].copy_from_slice(
&self
.float_1
.value(beat_progression, collections, sound_data)
.to_le_bytes(),
);
data[20..24].copy_from_slice(
&self
.float_2
.value(beat_progression, collections, sound_data)
.to_le_bytes(),
);
data[24..28].copy_from_slice(
&self
.float_3
.value(beat_progression, collections, sound_data)
.to_le_bytes(),
);
data[28..32].copy_from_slice(
&self
.float_4
.value(beat_progression, collections, sound_data)
.to_le_bytes(),
);
data[32..36].copy_from_slice(
&self
.float_5
.value(beat_progression, collections, sound_data)
.to_le_bytes(),
);
}
pub const fn size() -> usize {
36
}
pub fn u32(&mut self, index: usize) -> Option<&mut u32> {
Some(match index {
0 => &mut self.u32_0,
1 => &mut self.u32_1,
2 => &mut self.u32_2,
_ => return None,
})
}
pub fn float(&mut self, index: usize) -> Option<&mut FloatValue> {
Some(match index {
0 => &mut self.float_0,
1 => &mut self.float_1,
2 => &mut self.float_2,
3 => &mut self.float_3,
4 => &mut self.float_4,
5 => &mut self.float_5,
_ => return None,
})
}
}
impl CollectSoundTriggers for AnimationConfig {
fn collect_sound_triggers(&self, triggers: &mut SoundTriggerSet) {
for value in [
&self.float_0,
&self.float_1,
&self.float_2,
&self.float_3,
&self.float_4,
&self.float_5,
] {
value.collect_sound_triggers(triggers);
}
}
}