From 16c97bda23689cf783e788a3ef6927af52aed1a6 Mon Sep 17 00:00:00 2001 From: Zicklag Date: Thu, 1 Dec 2022 14:32:39 -0600 Subject: [PATCH] Add Stand-in Grenade Fuse Sound --- assets/map/elements/item/grenade/fuse.ogg | Bin 0 -> 9182 bytes .../item/grenade/grenade.element.yaml | 2 +- src/assets.rs | 15 +++++++++++---- src/map/elements/grenade.rs | 18 +++++++++++++++++- src/metadata/map.rs | 3 +++ 5 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 assets/map/elements/item/grenade/fuse.ogg diff --git a/assets/map/elements/item/grenade/fuse.ogg b/assets/map/elements/item/grenade/fuse.ogg new file mode 100644 index 0000000000000000000000000000000000000000..1d3007e825fad40da8f3a5824c1b1f7865db0854 GIT binary patch literal 9182 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 literal 0 HcmV?d00001 diff --git a/assets/map/elements/item/grenade/grenade.element.yaml b/assets/map/elements/item/grenade/grenade.element.yaml index ae776c6e0c..fc36419068 100644 --- a/assets/map/elements/item/grenade/grenade.element.yaml +++ b/assets/map/elements/item/grenade/grenade.element.yaml @@ -11,7 +11,7 @@ builtin: !Grenades explosion_frames: 12 explosion_fps: 8 explosion_sound: ./explosion.ogg - + fuse_sound: ./fuse.ogg body_size: [18, 18] grab_offset: [-7, -6] body_offset: [0, 2] diff --git a/src/assets.rs b/src/assets.rs index eb8e290580..3fb511d934 100644 --- a/src/assets.rs +++ b/src/assets.rs @@ -423,6 +423,8 @@ impl AssetLoader for MapElementMetaLoader { explosion_atlas_handle, explosion_sound, explosion_sound_handle, + fuse_sound, + fuse_sound_handle, .. } => { for (atlas, atlas_handle) in [ @@ -433,10 +435,15 @@ impl AssetLoader for MapElementMetaLoader { *atlas_handle = AssetHandle::new(path.clone(), handle.typed()); dependencies.push(path); } - let (sound_path, sound_handle) = - get_relative_asset(load_context, self_path, explosion_sound); - dependencies.push(sound_path); - *explosion_sound_handle = sound_handle.typed(); + for (sound, handle) in [ + (explosion_sound, explosion_sound_handle), + (fuse_sound, fuse_sound_handle), + ] { + let (sound_path, sound_handle) = + get_relative_asset(load_context, self_path, sound); + dependencies.push(sound_path); + *handle = sound_handle.typed(); + } } } diff --git a/src/map/elements/grenade.rs b/src/map/elements/grenade.rs index 5f3a815c22..bc16a9cd8d 100644 --- a/src/map/elements/grenade.rs +++ b/src/map/elements/grenade.rs @@ -1,3 +1,5 @@ +use std::time::Duration; + use super::*; pub struct GrenadePlugin; @@ -22,6 +24,7 @@ impl Default for IdleGrenade { pub struct LitGrenade { /// The entity ID of the map element that spawned the grenade spawner: Entity, + fuse_sound: Handle, age: f32, } @@ -29,6 +32,7 @@ impl Default for LitGrenade { fn default() -> Self { Self { spawner: crate::utils::invalid_entity(), + fuse_sound: default(), age: 0.0, } } @@ -131,6 +135,7 @@ fn update_idle_grenades( >, mut ridp: ResMut, element_assets: ResMut>, + effects: Res>, ) { let mut items = grenades.iter_mut().collect::>(); items.sort_by_key(|x| x.0.id()); @@ -148,7 +153,13 @@ fn update_idle_grenades( ) in items { let meta = element_assets.get(meta_handle).unwrap(); - let BuiltinElementKind::Grenades { grab_offset, atlas_handle, throw_velocity, .. } = &meta.builtin else { + let BuiltinElementKind::Grenades { + grab_offset, + atlas_handle, + throw_velocity, + fuse_sound_handle, + .. + } = &meta.builtin else { unreachable!(); }; @@ -198,6 +209,7 @@ fn update_idle_grenades( .insert(body.clone()) .insert(LitGrenade { spawner: grenade.spawner, + fuse_sound: effects.play(fuse_sound_handle.clone_weak()).handle(), ..default() }) .insert(KinematicBody { @@ -252,6 +264,7 @@ fn update_lit_grenades( element_assets: ResMut>, player_inputs: Res, effects: Res>, + mut audio_instances: ResMut>, ) { let mut items = grenades.iter_mut().collect::>(); items.sort_by_key(|x| x.0.id()); @@ -276,6 +289,9 @@ fn update_lit_grenades( if grenade.age >= *fuse_time { if player_inputs.is_confirmed { effects.play(explosion_sound_handle.clone_weak()); + audio_instances + .get_mut(&grenade.fuse_sound) + .map(|x| x.stop(AudioTween::linear(Duration::from_secs_f32(0.1)))); } // Despawn the grenade diff --git a/src/metadata/map.rs b/src/metadata/map.rs index 0dc4d741ce..7b0aaf7a16 100644 --- a/src/metadata/map.rs +++ b/src/metadata/map.rs @@ -221,6 +221,9 @@ pub enum BuiltinElementKind { explosion_sound: String, #[serde(skip)] explosion_sound_handle: Handle, + fuse_sound: String, + #[serde(skip)] + fuse_sound_handle: Handle, /// The time in seconds before a grenade explodes fuse_time: f32, #[serde(default)]