use bevy::prelude::*;
#[derive(Resource, Deref)]
struct SoundEffect {
handle: Handle<AudioSource>,
}
impl FromWorld for SoundEffect {
fn from_world(world: &mut World) -> Self {
let asset_server = world.resource::<AssetServer>();
SoundEffect {
handle: asset_server.load("sounds/breakout_collision.ogg"),
}
}
}
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.init_resource::<SoundEffect>()
.add_systems(Startup, setup)
.add_systems(Update, keyboard_event)
.run();
}
fn setup(mut commands: Commands) {
commands.spawn(Camera2d);
commands.spawn((
Text::new("Press Space to play the sound effect."),
Node {
position_type: PositionType::Absolute,
bottom: px(12),
left: px(12),
..default()
},
));
}
fn keyboard_event(
keyboard_input: Res<ButtonInput<KeyCode>>,
sound_effect: Res<SoundEffect>,
mut commands: Commands,
) {
if keyboard_input.just_pressed(KeyCode::Space) {
commands.spawn((
AudioPlayer::new(sound_effect.clone()),
PlaybackSettings::DESPAWN,
));
}
}