use std::rc::Rc;
use crate::engine::d2::{
animation::AnimatedFloat,
asset::Asset,
sound::{Playback, Sound},
util::{Disposable, Value},
};
use super::BasicAsset;
#[derive(Clone)]
pub struct DummySound {
pub inner: Rc<BasicAsset<DummySound>>,
playback: Option<DummyPlayback>,
}
impl DummySound {
pub fn new() -> Self {
Self {
inner: Rc::new(BasicAsset::<DummySound>::new()),
playback: None,
}
}
fn copy_from(&self, asset: DummySound) {
}
fn on_disposed(&self) {
}
pub fn instance() -> DummySound {
unimplemented!()
}
}
impl AsRef<BasicAsset<DummySound>> for DummySound {
fn as_ref(&self) -> &BasicAsset<DummySound> {
self.inner.as_ref()
}
}
impl Sound for DummySound {
fn play(&self, volume: f32) -> Rc<dyn Playback> {
Rc::new(DummyPlayback::new(Rc::new(self.clone())))
}
fn play_with_loop(&self, volume: f32) -> Rc<dyn Playback> {
Rc::new(DummyPlayback::new(Rc::new(self.clone())))
}
fn duration(&self) -> f32 {
0.0
}
}
impl Asset for DummySound {
fn reload_count(&self) -> usize {
self.inner.reload_count()
}
}
impl Disposable for DummySound {
fn dispose(&self) {
self.inner.dispose()
}
}
#[derive(Clone)]
pub struct DummyPlayback {
pub volume: AnimatedFloat,
sound: Rc<dyn Sound>,
complete: Value<bool>,
}
impl DummyPlayback {
pub fn new(sound: Rc<dyn Sound>) -> Self {
Self {
sound,
volume: AnimatedFloat::new(0.0, None), complete: Value::<bool>::new(true, None),
}
}
pub fn set_paused(&self, paused: bool) {}
}
impl Playback for DummyPlayback {
fn sound(&self) -> Rc<dyn Sound> {
self.sound.clone()
}
fn volume(&self) -> AnimatedFloat {
self.volume.clone()
}
fn paused(&self) -> bool {
true
}
fn complete(&self) -> Value<bool> {
self.complete.clone()
}
fn position(&self) -> f32 {
0.0
}
fn set_complete(&self, val: Value<bool>) {
todo!()
}
fn set_paused(&self, val: bool) {
todo!()
}
fn set_volume(&self, val: AnimatedFloat) {
todo!()
}
fn set_position(&self, pos: f32) {
todo!()
}
}
impl Disposable for DummyPlayback {
fn dispose(&self) {
}
}