From d238f4ec711920aacb1ee86611652eb95d79ea85 Mon Sep 17 00:00:00 2001 From: extrawurst Date: Wed, 26 Mar 2025 22:09:29 +0800 Subject: [PATCH] load head sounds via asset_loader --- src/loading_assets.rs | 2 ++ src/player.rs | 7 ++----- src/sounds.rs | 14 +++++++++++--- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/loading_assets.rs b/src/loading_assets.rs index 49d7024..8eba579 100644 --- a/src/loading_assets.rs +++ b/src/loading_assets.rs @@ -18,6 +18,8 @@ pub struct AudioAssets { pub cash: Handle, #[asset(path = "sfx/hit", collection(typed))] pub hit: Vec>, + #[asset(path = "sfx/heads", collection(mapped, typed))] + pub head: HashMap>, } #[derive(AssetCollection, Resource)] diff --git a/src/player.rs b/src/player.rs index b14d881..7d28773 100644 --- a/src/player.rs +++ b/src/player.rs @@ -10,6 +10,7 @@ use crate::{ heads_ui::HeadChanged, loading_assets::GameAssets, physics_layers::GameLayer, + sounds::PlaySound, tb_entities::SpawnPoint, }; use avian3d::{ @@ -266,11 +267,7 @@ fn update_head( let head_str = head_id_to_str(trigger.0); - //TODO: use asset loader - commands.spawn(( - AudioPlayer::new(asset_server.load(format!("sfx/heads/{}.ogg", head_str))), - PlaybackSettings::DESPAWN, - )); + commands.trigger(PlaySound::Head(head_str.to_string())); let mesh = asset_server .load(GltfAssetLabel::Scene(0).from_asset(format!("models/heads/{}.glb", head_str))); diff --git a/src/sounds.rs b/src/sounds.rs index 6e746f4..e05abf9 100644 --- a/src/sounds.rs +++ b/src/sounds.rs @@ -1,14 +1,14 @@ +use crate::loading_assets::AudioAssets; use bevy::prelude::*; -use crate::loading_assets::AudioAssets; - -#[derive(Event, Copy, Clone, Debug)] +#[derive(Event, Clone, Debug)] pub enum PlaySound { Hit, KeyCollect, Gun, Gate, CashCollect, + Head(String), } pub fn plugin(app: &mut App) { @@ -37,6 +37,14 @@ fn spawn_sounds( PlaySound::Gun => assets.gun.clone(), PlaySound::Gate => assets.gate.clone(), PlaySound::CashCollect => assets.cash.clone(), + PlaySound::Head(name) => { + let filename = format!("{}.ogg", name); + assets + .head + .get(filename.as_str()) + .expect(format!("invalid head '{}'", filename).as_str()) + .clone() + } }; commands.spawn((