emerald 0.3.214

A lite, fully featured 2D game engine.
Documentation
use crate::{audio::*, EmeraldError};
use std::collections::HashMap;

pub(crate) struct AudioEngine {
    mixers: HashMap<String, ThreadSafeMixer>,
}
impl AudioEngine {
    pub(crate) fn new() -> Self {
        AudioEngine {
            mixers: HashMap::new(),
        }
    }

    pub(crate) fn mixer<T: Into<String>>(
        &mut self,
        mixer_name: T,
    ) -> Result<&mut ThreadSafeMixer, EmeraldError> {
        let mixer_name: String = mixer_name.into();

        if !self.mixers.contains_key(&mixer_name) {
            self.mixers
                .insert(mixer_name.clone(), crate::audio::mixer::new_mixer()?);
        }

        if let Some(mixer) = self.mixers.get_mut(&mixer_name) {
            return Ok(mixer);
        }

        Err(EmeraldError::new(format!(
            "Error creating and/or retrieving the mixer: {:?}",
            mixer_name
        )))
    }

    pub(crate) fn post_update(&mut self) -> Result<(), EmeraldError> {
        for mixer in self.mixers.values_mut() {
            mixer.post_update()?;
        }

        Ok(())
    }

    pub(crate) fn clear(&mut self) -> Result<(), EmeraldError> {
        for mixer in self.mixers.values_mut() {
            mixer.clear()?;
        }

        self.mixers = HashMap::new();
        Ok(())
    }
}