card-game/src/music_player.rs
2026-01-30 23:39:10 +05:00

45 lines
1.2 KiB
Rust

use bevy::{audio::Volume, prelude::*};
use rand::random_range;
pub struct MusicPlayerPlugin;
impl Plugin for MusicPlayerPlugin {
fn build(&self, app: &mut App) {
app.add_systems(Startup, setup)
.add_systems(Update, try_play);
}
}
#[derive(Resource)]
struct Soundtrack(Vec<Handle<AudioSource>>);
#[derive(Component)]
struct MusicPlayer;
fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
commands.insert_resource(Soundtrack(vec![
asset_server.load("music/fostral.wav"),
asset_server.load("music/glorx.wav"),
asset_server.load("music/rocknrolldixie.wav"),
asset_server.load("music/whistler.wav"),
]));
commands.spawn(MusicPlayer);
}
fn try_play(
mut commands: Commands,
player: Option<Single<Entity, (With<MusicPlayer>, Without<AudioPlayer>)>>,
soundtrack: Res<Soundtrack>,
) {
if let Some(music_player) = player {
commands.entity(music_player.entity()).insert((
AudioPlayer::new(soundtrack.0[random_range(0..soundtrack.0.len())].clone()),
PlaybackSettings {
volume: Volume::Linear(0.2),
mode: bevy::audio::PlaybackMode::Remove,
..default()
},
));
}
}