diff --git a/Cargo.lock b/Cargo.lock index 64d7ad8..274639b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -242,7 +242,7 @@ dependencies = [ [[package]] name = "asteroids" -version = "0.6.0-dev1" +version = "0.6.0-dev2" dependencies = [ "bevy", "bevy-inspector-egui", diff --git a/Cargo.toml b/Cargo.toml index 6dade7b..b082e45 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "asteroids" -version = "0.6.0-dev1" +version = "0.6.0-dev2" edition = "2024" license = "AGPL-3.0-only" diff --git a/assets/explosionCrunch_004.ogg b/assets/explosionCrunch_004.ogg new file mode 100644 index 0000000..cdb1dc9 Binary files /dev/null and b/assets/explosionCrunch_004.ogg differ diff --git a/src/objects.rs b/src/objects.rs index fb03547..72cdf65 100644 --- a/src/objects.rs +++ b/src/objects.rs @@ -3,6 +3,7 @@ //! Asteroids, the player's ship, and such. use bevy::{ + audio::{AudioPlayer, PlaybackSettings}, camera::visibility::Visibility, ecs::{ component::Component, @@ -232,5 +233,11 @@ pub fn ship_impact_listener( // STEP 4: Respawn player (teleport them to the origin) player.0.translation = Vec3::ZERO; player.1.0 = Vec2::ZERO; + + // STEP 5: Play crash sound + commands.spawn(( + AudioPlayer::new(game_assets.wreck_sound()), + PlaybackSettings::ONCE, + )); } } diff --git a/src/resources.rs b/src/resources.rs index 5819775..fa2cfa2 100644 --- a/src/resources.rs +++ b/src/resources.rs @@ -1,7 +1,8 @@ //! All the resources for the game use bevy::{ - asset::{Assets, Handle}, + asset::{AssetServer, Assets, Handle}, + audio::AudioSource, ecs::{ resource::Resource, world::{FromWorld, World}, @@ -57,6 +58,7 @@ impl Default for WorldSize { pub struct GameAssets { meshes: [Handle; 5], materials: [Handle; 7], + sounds: [Handle; 1], } impl GameAssets { @@ -95,6 +97,10 @@ impl GameAssets { pub fn bullet(&self) -> (Handle, Handle) { (self.meshes[4].clone(), self.materials[6].clone()) } + + pub fn wreck_sound(&self) -> Handle { + self.sounds[0].clone() + } } impl FromWorld for GameAssets { @@ -122,6 +128,12 @@ impl FromWorld for GameAssets { world_materials.add(ASTEROID_SMALL_COLOR), world_materials.add(BULLET_COLOR), ]; - GameAssets { meshes, materials } + let loader = world.resource_mut::(); + let sounds = [loader.load("explosionCrunch_004.ogg")]; + GameAssets { + meshes, + materials, + sounds, + } } }