Skip to content

Commit 54d4e18

Browse files
bors[bot]zicklag
andauthored
Merge #500
500: Add Stand-in Grenade Fuse Sound r=zicklag a=zicklag bors merge Co-authored-by: Zicklag <[email protected]>
2 parents c657d14 + 16c97bd commit 54d4e18

File tree

5 files changed

+32
-6
lines changed

5 files changed

+32
-6
lines changed
8.97 KB
Binary file not shown.

assets/map/elements/item/grenade/grenade.element.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ builtin: !Grenades
1111
explosion_frames: 12
1212
explosion_fps: 8
1313
explosion_sound: ./explosion.ogg
14-
14+
fuse_sound: ./fuse.ogg
1515
body_size: [18, 18]
1616
grab_offset: [-7, -6]
1717
body_offset: [0, 2]

src/assets.rs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,8 @@ impl AssetLoader for MapElementMetaLoader {
423423
explosion_atlas_handle,
424424
explosion_sound,
425425
explosion_sound_handle,
426+
fuse_sound,
427+
fuse_sound_handle,
426428
..
427429
} => {
428430
for (atlas, atlas_handle) in [
@@ -433,10 +435,15 @@ impl AssetLoader for MapElementMetaLoader {
433435
*atlas_handle = AssetHandle::new(path.clone(), handle.typed());
434436
dependencies.push(path);
435437
}
436-
let (sound_path, sound_handle) =
437-
get_relative_asset(load_context, self_path, explosion_sound);
438-
dependencies.push(sound_path);
439-
*explosion_sound_handle = sound_handle.typed();
438+
for (sound, handle) in [
439+
(explosion_sound, explosion_sound_handle),
440+
(fuse_sound, fuse_sound_handle),
441+
] {
442+
let (sound_path, sound_handle) =
443+
get_relative_asset(load_context, self_path, sound);
444+
dependencies.push(sound_path);
445+
*handle = sound_handle.typed();
446+
}
440447
}
441448
}
442449

src/map/elements/grenade.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use std::time::Duration;
2+
13
use super::*;
24

35
pub struct GrenadePlugin;
@@ -22,13 +24,15 @@ impl Default for IdleGrenade {
2224
pub struct LitGrenade {
2325
/// The entity ID of the map element that spawned the grenade
2426
spawner: Entity,
27+
fuse_sound: Handle<AudioInstance>,
2528
age: f32,
2629
}
2730

2831
impl Default for LitGrenade {
2932
fn default() -> Self {
3033
Self {
3134
spawner: crate::utils::invalid_entity(),
35+
fuse_sound: default(),
3236
age: 0.0,
3337
}
3438
}
@@ -131,6 +135,7 @@ fn update_idle_grenades(
131135
>,
132136
mut ridp: ResMut<RollbackIdProvider>,
133137
element_assets: ResMut<Assets<MapElementMeta>>,
138+
effects: Res<AudioChannel<EffectsChannel>>,
134139
) {
135140
let mut items = grenades.iter_mut().collect::<Vec<_>>();
136141
items.sort_by_key(|x| x.0.id());
@@ -148,7 +153,13 @@ fn update_idle_grenades(
148153
) in items
149154
{
150155
let meta = element_assets.get(meta_handle).unwrap();
151-
let BuiltinElementKind::Grenades { grab_offset, atlas_handle, throw_velocity, .. } = &meta.builtin else {
156+
let BuiltinElementKind::Grenades {
157+
grab_offset,
158+
atlas_handle,
159+
throw_velocity,
160+
fuse_sound_handle,
161+
..
162+
} = &meta.builtin else {
152163
unreachable!();
153164
};
154165

@@ -198,6 +209,7 @@ fn update_idle_grenades(
198209
.insert(body.clone())
199210
.insert(LitGrenade {
200211
spawner: grenade.spawner,
212+
fuse_sound: effects.play(fuse_sound_handle.clone_weak()).handle(),
201213
..default()
202214
})
203215
.insert(KinematicBody {
@@ -252,6 +264,7 @@ fn update_lit_grenades(
252264
element_assets: ResMut<Assets<MapElementMeta>>,
253265
player_inputs: Res<PlayerInputs>,
254266
effects: Res<AudioChannel<EffectsChannel>>,
267+
mut audio_instances: ResMut<Assets<AudioInstance>>,
255268
) {
256269
let mut items = grenades.iter_mut().collect::<Vec<_>>();
257270
items.sort_by_key(|x| x.0.id());
@@ -276,6 +289,9 @@ fn update_lit_grenades(
276289
if grenade.age >= *fuse_time {
277290
if player_inputs.is_confirmed {
278291
effects.play(explosion_sound_handle.clone_weak());
292+
audio_instances
293+
.get_mut(&grenade.fuse_sound)
294+
.map(|x| x.stop(AudioTween::linear(Duration::from_secs_f32(0.1))));
279295
}
280296

281297
// Despawn the grenade

src/metadata/map.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,9 @@ pub enum BuiltinElementKind {
221221
explosion_sound: String,
222222
#[serde(skip)]
223223
explosion_sound_handle: Handle<AudioSource>,
224+
fuse_sound: String,
225+
#[serde(skip)]
226+
fuse_sound_handle: Handle<AudioSource>,
224227
/// The time in seconds before a grenade explodes
225228
fuse_time: f32,
226229
#[serde(default)]

0 commit comments

Comments
 (0)