Skip to content

Commit de0f496

Browse files
committed
fix the audio changes for bevy 0.11
1 parent 01a304e commit de0f496

File tree

2 files changed

+32
-26
lines changed

2 files changed

+32
-26
lines changed

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ exclude = [
2121
]
2222

2323
[dependencies]
24-
bevy = { version = "0.10.1", default-features = false, features = [
24+
bevy = { version = "0.11.3", default-features = false, features = [
2525
"bevy_audio",
2626
"bevy_gilrs",
2727
"bevy_gltf",
@@ -34,7 +34,7 @@ bevy = { version = "0.10.1", default-features = false, features = [
3434
"x11",
3535
"vorbis",
3636
] }
37-
bevy_prototype_lyon = "0.8"
37+
bevy_prototype_lyon = "0.9.0"
3838
ron = "0.8"
3939
serde = { version = "1.0", features = [ "derive" ] }
4040

src/audio.rs

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,10 @@
4848
//!
4949
5050
use crate::prelude::Engine;
51-
use bevy::{audio::AudioSink, prelude::*};
51+
use bevy::{
52+
audio::{AudioSink, PlaybackMode, Volume},
53+
prelude::*,
54+
};
5255
use std::{array::IntoIter, fmt::Debug};
5356

5457
#[derive(Default)]
@@ -70,7 +73,7 @@ impl Plugin for AudioManagerPlugin {
7073
pub struct AudioManager {
7174
sfx_queue: Vec<(String, f32)>,
7275
music_queue: Vec<Option<(String, f32)>>,
73-
playing: Option<Handle<AudioSink>>,
76+
playing: Option<Entity>,
7477
music_playing: bool,
7578
}
7679

@@ -227,46 +230,49 @@ impl From<MusicPreset> for String {
227230
}
228231
}
229232

233+
#[derive(Component)]
234+
struct Music;
235+
230236
/// The Bevy system that checks to see if there is any audio management that needs to be done.
231237
#[doc(hidden)]
232238
pub fn queue_managed_audio_system(
239+
mut commands: Commands,
240+
music_query: Query<(Entity, &AudioSink), With<Music>>,
233241
asset_server: Res<AssetServer>,
234-
audio: Res<Audio>,
235-
audio_sinks: Res<Assets<AudioSink>>,
236242
mut game_state: ResMut<Engine>,
237243
) {
238244
for (sfx, volume) in game_state.audio_manager.sfx_queue.drain(..) {
239245
let sfx_path = format!("audio/{}", sfx);
240-
let sfx_handle = asset_server.load(sfx_path.as_str());
241-
audio.play_with_settings(
242-
sfx_handle,
243-
PlaybackSettings {
244-
volume,
246+
commands.spawn(AudioBundle {
247+
source: asset_server.load(sfx_path.as_str()),
248+
settings: PlaybackSettings {
249+
mode: PlaybackMode::Despawn,
250+
volume: Volume::new_relative(volume),
245251
..Default::default()
246252
},
247-
);
253+
});
248254
}
249255
#[allow(clippy::for_loops_over_fallibles)]
250256
if let Some(item) = game_state.audio_manager.music_queue.drain(..).last() {
251257
// stop any music currently playing
252-
if let Some(sink_handle) = &game_state.audio_manager.playing {
253-
if let Some(sink) = audio_sinks.get(sink_handle) {
254-
sink.stop();
255-
}
258+
if let Ok((entity, music)) = music_query.get_single() {
259+
music.stop();
260+
commands.entity(entity).despawn();
256261
}
257262
// start the new music...if we have some
258263
if let Some((music, volume)) = item {
259264
let music_path = format!("audio/{}", music);
260-
let music_handle = asset_server.load(music_path.as_str());
261-
let sink_handle = audio_sinks.get_handle(audio.play_with_settings(
262-
music_handle,
263-
PlaybackSettings {
264-
repeat: true,
265-
volume,
266-
..Default::default()
267-
},
268-
));
269-
game_state.audio_manager.playing = Some(sink_handle);
265+
let entity = commands
266+
.spawn(AudioBundle {
267+
source: asset_server.load(music_path.as_str()),
268+
settings: PlaybackSettings {
269+
volume: Volume::new_relative(volume),
270+
mode: PlaybackMode::Loop,
271+
..Default::default()
272+
},
273+
})
274+
.id();
275+
game_state.audio_manager.playing = Some(entity);
270276
}
271277
}
272278
}

0 commit comments

Comments
 (0)