49 lines
1.5 KiB
Rust
49 lines
1.5 KiB
Rust
use bevy::prelude::*;
|
|
|
|
pub struct AudioSystemPlugin;
|
|
|
|
impl Plugin for AudioSystemPlugin {
|
|
fn build(&self, app: &mut App) {
|
|
app.init_resource::<AudioAssets>()
|
|
.add_startup_system(load_audio);
|
|
}
|
|
}
|
|
|
|
#[derive(Default)]
|
|
pub struct AudioAssets {
|
|
pub notes: [Handle<AudioSource>; 3],
|
|
pub reverb_notes: [Handle<AudioSource>; 3],
|
|
pub warp_notes: [Handle<AudioSource>; 3],
|
|
}
|
|
|
|
pub fn play_audio(
|
|
audio_set: &[Handle<AudioSource>; 3],
|
|
audio: &Res<Audio>,
|
|
color: Vec4,
|
|
volume: f32,
|
|
) {
|
|
for i in 0..3 {
|
|
audio.play_with_settings(
|
|
audio_set[i].clone(),
|
|
PlaybackSettings::ONCE.with_volume(color[i] * volume),
|
|
);
|
|
}
|
|
}
|
|
|
|
fn load_audio(mut audio_assets: ResMut<AudioAssets>, asset_server: Res<AssetServer>) {
|
|
audio_assets.notes[0] = asset_server.load::<AudioSource, &str>("sound/notes/a5.ogg");
|
|
audio_assets.notes[1] = asset_server.load::<AudioSource, &str>("sound/notes/cs6.ogg");
|
|
audio_assets.notes[2] = asset_server.load::<AudioSource, &str>("sound/notes/e6.ogg");
|
|
|
|
audio_assets.reverb_notes[0] =
|
|
asset_server.load::<AudioSource, &str>("sound/reverb_notes/a5.ogg");
|
|
audio_assets.reverb_notes[1] =
|
|
asset_server.load::<AudioSource, &str>("sound/reverb_notes/cs6.ogg");
|
|
audio_assets.reverb_notes[2] =
|
|
asset_server.load::<AudioSource, &str>("sound/reverb_notes/e6.ogg");
|
|
|
|
audio_assets.warp_notes[0] = asset_server.load::<AudioSource, &str>("sound/warp_notes/a5.ogg");
|
|
audio_assets.warp_notes[1] = asset_server.load::<AudioSource, &str>("sound/warp_notes/cs6.ogg");
|
|
audio_assets.warp_notes[2] = asset_server.load::<AudioSource, &str>("sound/warp_notes/e6.ogg");
|
|
}
|