use crate::prelude::*;
pub type Playback <'element> =
Widget <'element, ControllerComponent, ModelComponent, Sfx>;
pub fn new (sound : Option <Sound>) -> Element {
log::trace!("new...");
let view = {
use view::component::{sfx, Sfx};
let playback = sound.map (|id| (id, sfx::State::Ready));
view::Component::from (Sfx { playback }).into()
};
let out = Element::new (
"Playback".to_string(), Controller::default(), Model::default(), view);
log::trace!("...new");
out
}
pub fn play (
_ : &controls::button::Release,
_elements : &Tree <Element>,
node_id : &NodeId,
action_buffer : &mut Vec <(NodeId, Action)>
) {
log::trace!("play...");
action_buffer.push ((node_id.clone(), Action::ModifyView (
Box::new (|view : &mut View|{
use view::component::{sfx, Sfx};
let sfx = Sfx::try_ref_mut (&mut view.component).unwrap();
let (_, state) = sfx.playback.as_mut().unwrap();
*state = sfx::State::Play;
})
)));
log::trace!("...play");
}
pub fn loop_ (
_ : &controls::button::Release,
_elements : &Tree <Element>,
node_id : &NodeId,
action_buffer : &mut Vec <(NodeId, Action)>
) {
log::trace!("loop...");
action_buffer.push ((node_id.clone(), Action::ModifyView (
Box::new (|view : &mut View|{
use view::component::{sfx, Sfx};
let sfx = Sfx::try_ref_mut (&mut view.component).unwrap();
let (_, state) = sfx.playback.as_mut().unwrap();
*state = sfx::State::Loop;
})
)));
log::trace!("...loop");
}
pub fn ready (
_ : &controls::button::Release,
_elements : &Tree <Element>,
node_id : &NodeId,
action_buffer : &mut Vec <(NodeId, Action)>
) {
log::trace!("ready...");
action_buffer.push ((node_id.clone(), Action::ModifyView (
Box::new (|view : &mut View|{
use view::component::{sfx, Sfx};
let sfx = Sfx::try_ref_mut (&mut view.component).unwrap();
let (_, state) = sfx.playback.as_mut().unwrap();
*state = sfx::State::Ready;
})
)));
log::trace!("...ready");
}