mittens_engine/engine/ecs/component/
audio_gain.rs1use crate::engine::ecs::ComponentId;
2use crate::engine::ecs::component::Component;
3
4#[derive(Debug, Clone, Copy)]
5pub struct AudioGainComponent {
6 pub gain: f32,
7}
8
9impl AudioGainComponent {
10 pub fn new(gain: f32) -> Self {
11 Self { gain }
12 }
13}
14
15impl Default for AudioGainComponent {
16 fn default() -> Self {
17 Self { gain: 1.0 }
18 }
19}
20
21impl Component for AudioGainComponent {
22 fn name(&self) -> &'static str {
23 "audio_gain"
24 }
25
26 fn as_any(&self) -> &dyn std::any::Any {
27 self
28 }
29
30 fn as_any_mut(&mut self) -> &mut dyn std::any::Any {
31 self
32 }
33
34 fn init(&mut self, emit: &mut dyn crate::engine::ecs::SignalEmitter, component: ComponentId) {
35 emit.push_intent_now(
36 component,
37 crate::engine::ecs::IntentValue::AudioGraphDirtyImmediate {
38 component_ids: vec![component],
39 },
40 );
41 }
42
43 fn encode(&self) -> std::collections::HashMap<String, serde_json::Value> {
44 let mut map = std::collections::HashMap::new();
45 map.insert("gain".to_string(), serde_json::json!(self.gain));
46 map
47 }
48
49 fn decode(
50 &mut self,
51 data: &std::collections::HashMap<String, serde_json::Value>,
52 ) -> Result<(), String> {
53 if let Some(v) = data.get("gain") {
54 self.gain = serde_json::from_value(v.clone())
55 .map_err(|e| format!("Failed to decode gain: {e}"))?;
56 }
57 Ok(())
58 }
59}