add crash sound on collision

This commit is contained in:
yuni 2024-03-29 16:58:42 +01:00
parent c6b8d21c54
commit c390a18ae5
5 changed files with 32 additions and 1 deletions

View file

@ -75,6 +75,7 @@ More information here: https://bevy-cheatbook.github.io/setup/cross/linux-window
- https://pixabay.com/sound-effects/electricity-6353 - https://pixabay.com/sound-effects/electricity-6353
- https://pixabay.com/sound-effects/ducati-696-monster-33217 - https://pixabay.com/sound-effects/ducati-696-monster-33217
- https://pixabay.com/sound-effects/high-energy-humming-195612 - https://pixabay.com/sound-effects/high-energy-humming-195612
- https://pixabay.com/sound-effects/box-crash-106687
- Music: [Dead Space Style Ambient Music](https://pixabay.com/music/ambient-dead-space-style-ambient-music-184793) by [Sharvarian](https://www.fiverr.com/sharvarian) - Music: [Dead Space Style Ambient Music](https://pixabay.com/music/ambient-dead-space-style-ambient-music-184793) by [Sharvarian](https://www.fiverr.com/sharvarian)
- Star chart based on the [HYG Stellar database](https://github.com/astronexus/HYG-Database) - Star chart based on the [HYG Stellar database](https://github.com/astronexus/HYG-Database)
- Custom font Yupiter is based on: - Custom font Yupiter is based on:

BIN
assets/sounds/crash.ogg Normal file

Binary file not shown.

View file

@ -1,4 +1,5 @@
use bevy::prelude::*; use bevy::prelude::*;
use bevy_xpbd_3d::prelude::*;
use crate::{nature, settings, actor, audio, hud}; use crate::{nature, settings, actor, audio, hud};
pub const ENGINE_SPEED_FACTOR: f32 = 30.0; pub const ENGINE_SPEED_FACTOR: f32 = 30.0;
@ -19,6 +20,7 @@ impl Plugin for ActorPlugin {
handle_input, handle_input,
handle_chat_scripts, handle_chat_scripts,
handle_vehicle_enter_exit, handle_vehicle_enter_exit,
handle_collisions,
)); ));
app.add_event::<StartConversationEvent>(); app.add_event::<StartConversationEvent>();
app.add_event::<SendMessageEvent>(); app.add_event::<SendMessageEvent>();
@ -552,3 +554,17 @@ pub fn handle_chat_scripts(
} }
} }
} }
fn handle_collisions(
mut collision_event_reader: EventReader<Collision>,
mut ew_sfx: EventWriter<audio::PlaySfxEvent>,
q_player: Query<Entity, With<Player>>,
) {
if let Ok(player) = q_player.get_single() {
for Collision(contacts) in collision_event_reader.read() {
if contacts.entity1 == player || contacts.entity2 == player {
ew_sfx.send(audio::PlaySfxEvent(audio::Sfx::Crash));
}
}
}
}

View file

@ -13,6 +13,7 @@ const ASSET_ROCKET: &str = "sounds/rocket.ogg";
const ASSET_ION: &str = "sounds/ion.ogg"; const ASSET_ION: &str = "sounds/ion.ogg";
//const ASSET_WAKEUP: &str = "sounds/wakeup.ogg"; //const ASSET_WAKEUP: &str = "sounds/wakeup.ogg";
const ASSET_BIKESTART: &str = "sounds/bikestart.ogg"; const ASSET_BIKESTART: &str = "sounds/bikestart.ogg";
const ASSET_CRASH: &str = "sounds/crash.ogg";
pub struct AudioPlugin; pub struct AudioPlugin;
impl Plugin for AudioPlugin { impl Plugin for AudioPlugin {
@ -33,6 +34,7 @@ pub enum Sfx {
Ping, Ping,
Connect, Connect,
EnterVehicle, EnterVehicle,
Crash,
None, None,
} }
@ -49,6 +51,7 @@ pub enum Sfx {
#[derive(Resource)] pub struct SoundPing(Handle<AudioSource>); #[derive(Resource)] pub struct SoundPing(Handle<AudioSource>);
#[derive(Resource)] pub struct SoundConnect(Handle<AudioSource>); #[derive(Resource)] pub struct SoundConnect(Handle<AudioSource>);
#[derive(Resource)] pub struct SoundBikeStart(Handle<AudioSource>); #[derive(Resource)] pub struct SoundBikeStart(Handle<AudioSource>);
#[derive(Resource)] pub struct SoundCrash(Handle<AudioSource>);
pub fn setup( pub fn setup(
mut commands: Commands, mut commands: Commands,
@ -113,6 +116,7 @@ pub fn setup(
commands.insert_resource(SoundPing(asset_server.load(ASSET_PING))); commands.insert_resource(SoundPing(asset_server.load(ASSET_PING)));
commands.insert_resource(SoundConnect(asset_server.load(ASSET_CONNECT))); commands.insert_resource(SoundConnect(asset_server.load(ASSET_CONNECT)));
commands.insert_resource(SoundBikeStart(asset_server.load(ASSET_BIKESTART))); commands.insert_resource(SoundBikeStart(asset_server.load(ASSET_BIKESTART)));
commands.insert_resource(SoundCrash(asset_server.load(ASSET_CRASH)));
} }
pub fn toggle_bgm( pub fn toggle_bgm(
@ -143,6 +147,7 @@ pub fn play_sfx(
sound_ping: Res<SoundPing>, sound_ping: Res<SoundPing>,
sound_connect: Res<SoundConnect>, sound_connect: Res<SoundConnect>,
sound_bikestart: Res<SoundBikeStart>, sound_bikestart: Res<SoundBikeStart>,
sound_crash: Res<SoundCrash>,
) { ) {
if settings.mute_sfx && !events_sfx.is_empty() { if settings.mute_sfx && !events_sfx.is_empty() {
events_sfx.clear(); events_sfx.clear();
@ -160,6 +165,7 @@ pub fn play_sfx(
Sfx::Ping => sound_ping.0.clone(), Sfx::Ping => sound_ping.0.clone(),
Sfx::Connect => sound_connect.0.clone(), Sfx::Connect => sound_connect.0.clone(),
Sfx::EnterVehicle => sound_bikestart.0.clone(), Sfx::EnterVehicle => sound_bikestart.0.clone(),
Sfx::Crash => sound_crash.0.clone(),
Sfx::None => sound_ping.0.clone(), Sfx::None => sound_ping.0.clone(),
}, },
settings: PlaybackSettings::DESPAWN, settings: PlaybackSettings::DESPAWN,
@ -175,6 +181,7 @@ pub fn str2sfx(sfx_label: &str) -> Sfx {
"ping" => Sfx::Ping, "ping" => Sfx::Ping,
"connect" => Sfx::Connect, "connect" => Sfx::Connect,
"entervehicle" => Sfx::EnterVehicle, "entervehicle" => Sfx::EnterVehicle,
"crash" => Sfx::Crash,
_ => Sfx::None, _ => Sfx::None,
}; };
} }

View file

@ -81,7 +81,14 @@ fn run_camera_controller(
return; return;
} }
angularvelocity.0 = Vec3::splat(0.0); if angularvelocity.length_squared() > 0.0001 {
angularvelocity.x *= 0.98;
angularvelocity.y *= 0.98;
angularvelocity.z *= 0.98;
}
else {
angularvelocity.0 = Vec3::splat(0.0);
}
// Handle key input // Handle key input
let mut axis_input = Vec3::ZERO; let mut axis_input = Vec3::ZERO;