audio.rs (985B)
1 use crate::actions::Actions; 2 use crate::loading::AudioAssets; 3 use crate::GameState; 4 use bevy::prelude::*; 5 use bevy_kira_audio::{Audio, AudioPlugin}; 6 7 pub struct InternalAudioPlugin; 8 9 // This plugin is responsible to control the game audio 10 impl Plugin for InternalAudioPlugin { 11 fn build(&self, app: &mut App) { 12 app.add_plugin(AudioPlugin) 13 .add_system_set( 14 SystemSet::on_enter(GameState::Playing).with_system(start_audio.system()), 15 ) 16 .add_system_set( 17 SystemSet::on_update(GameState::Playing).with_system(control_flying_sound.system()), 18 ); 19 } 20 } 21 22 fn start_audio(audio_assets: Res<AudioAssets>, audio: Res<Audio>) { 23 audio.set_volume(0.3); 24 audio.play_looped(audio_assets.flying.clone()); 25 audio.pause(); 26 } 27 28 fn control_flying_sound(actions: Res<Actions>, audio: Res<Audio>) { 29 if actions.player_movement.is_some() { 30 audio.resume(); 31 } else { 32 audio.pause() 33 } 34 }