music player

This commit is contained in:
Rendo 2026-01-30 23:39:10 +05:00
commit e4b14d94ac
4 changed files with 48 additions and 11 deletions

Binary file not shown.

BIN
assets/music/whistler.wav Normal file

Binary file not shown.

View file

@ -1,10 +1,11 @@
use bevy::{audio::Volume, prelude::*}; use bevy::prelude::*;
mod animation; mod animation;
mod buttons; mod buttons;
mod card; mod card;
mod dev_tools; mod dev_tools;
mod grid; mod grid;
mod music_player;
mod turns; mod turns;
mod unit; mod unit;
@ -19,6 +20,7 @@ fn main() {
grid::GridPlugin, grid::GridPlugin,
turns::TurnSystemPlugin, turns::TurnSystemPlugin,
unit::UnitPlugin, unit::UnitPlugin,
music_player::MusicPlayerPlugin,
)) ))
.add_systems(Startup, setup) .add_systems(Startup, setup)
.run(); .run();
@ -26,7 +28,6 @@ fn main() {
fn setup(asset_server: Res<AssetServer>, mut commands: Commands) { fn setup(asset_server: Res<AssetServer>, mut commands: Commands) {
let background = asset_server.load::<Image>("sprites/field.png"); let background = asset_server.load::<Image>("sprites/field.png");
let music = asset_server.load("music/fostral.wav");
commands.spawn(Camera2d); commands.spawn(Camera2d);
@ -34,13 +35,4 @@ fn setup(asset_server: Res<AssetServer>, mut commands: Commands) {
Sprite::from_image(background), Sprite::from_image(background),
Transform::from_xyz(0., 0., -100.), Transform::from_xyz(0., 0., -100.),
)); ));
commands.spawn((
AudioPlayer::new(music),
PlaybackSettings {
volume: Volume::Linear(0.2),
mode: bevy::audio::PlaybackMode::Loop,
..default()
},
));
} }

45
src/music_player.rs Normal file
View file

@ -0,0 +1,45 @@
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()
},
));
}
}