1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
use bevy::{ecs::system::SystemParam, prelude::*, reflect::TypeUuid};
use kira::manager::AudioManager as KiraAudioManager;
use uuid::Uuid;
use super::*;
pub use kira::instance::{
InstanceLoopStart as LoopStart, InstanceSettings as PlaySoundSettings,
PauseInstanceSettings as PauseSoundSettings, ResumeInstanceSettings as ResumeSoundSettings,
StopInstanceSettings as StopSoundSettings,
};
#[derive(SystemParam)]
pub struct SoundController<'a> {
sound_event_writer: EventWriter<'a, SoundEvent>,
}
impl<'a> SoundController<'a> {
pub fn create_sound(&mut self, sound_data: &Handle<SoundData>) -> Sound {
let sound = Sound::new();
self.sound_event_writer
.send(SoundEvent::CreateSound(sound_data.clone(), sound));
sound
}
pub fn play_sound(&mut self, sound: Sound) {
self.play_sound_with_settings(sound, Default::default())
}
pub fn play_sound_with_settings(&mut self, sound: Sound, settings: PlaySoundSettings) {
self.sound_event_writer
.send(SoundEvent::PlaySound(sound, settings));
}
pub fn pause_sound(&mut self, sound: Sound) {
self.pause_sound_with_settings(sound, Default::default())
}
pub fn pause_sound_with_settings(&mut self, sound: Sound, settings: PauseSoundSettings) {
self.sound_event_writer
.send(SoundEvent::PauseSound(sound, settings));
}
pub fn resume_sound(&mut self, sound: Sound) {
self.resume_sound_with_settings(sound, Default::default())
}
pub fn resume_sound_with_settings(&mut self, sound: Sound, settings: ResumeSoundSettings) {
self.sound_event_writer
.send(SoundEvent::ResumeSound(sound, settings));
}
pub fn stop_sound(&mut self, sound: Sound) {
self.stop_sound_with_settings(sound, Default::default())
}
pub fn stop_sound_with_settings(&mut self, sound: Sound, settings: StopSoundSettings) {
self.sound_event_writer
.send(SoundEvent::StopSound(sound, settings));
}
}
#[derive(Debug, Clone, TypeUuid, Copy, PartialEq, Eq, Hash)]
#[uuid = "dee749dd-060d-40dd-b2ea-f675018dbfc4"]
pub struct Sound(Uuid);
impl Sound {
fn new() -> Self {
Self(Uuid::new_v4())
}
}
pub(crate) struct AudioManager(pub(crate) KiraAudioManager);
impl Default for AudioManager {
fn default() -> Self {
AudioManager(
KiraAudioManager::new(Default::default()).expect("Could not start audio manager"),
)
}
}