add a thruster sound when accelerating
This commit is contained in:
parent
e400628af5
commit
5471b46c03
15
src/audio.rs
15
src/audio.rs
|
@ -1,8 +1,12 @@
|
|||
use bevy::prelude::*;
|
||||
use bevy::audio::PlaybackMode;
|
||||
|
||||
#[derive(Component)]
|
||||
pub struct ComponentBGM;
|
||||
|
||||
#[derive(Component)]
|
||||
pub struct ComponentThrusterSound;
|
||||
|
||||
#[derive(Resource)]
|
||||
struct SoundBGM(Handle<AudioSource>);
|
||||
|
||||
|
@ -25,6 +29,17 @@ pub fn setup(
|
|||
settings: PlaybackSettings::DESPAWN,
|
||||
},
|
||||
));
|
||||
commands.spawn((
|
||||
ComponentThrusterSound,
|
||||
AudioBundle {
|
||||
source: asset_server.load("restricted/loopingthrust-95548.ogg"),
|
||||
settings: PlaybackSettings {
|
||||
mode: PlaybackMode::Loop,
|
||||
paused: true,
|
||||
..default()
|
||||
},
|
||||
},
|
||||
));
|
||||
}
|
||||
|
||||
pub fn toggle_bgm(
|
||||
|
|
|
@ -2,6 +2,7 @@ use bevy::prelude::*;
|
|||
use bevy::input::mouse::MouseMotion;
|
||||
use bevy::window::PrimaryWindow;
|
||||
use std::{f32::consts::*, fmt};
|
||||
use crate::audio;
|
||||
|
||||
pub struct CameraControllerPlugin;
|
||||
|
||||
|
@ -96,11 +97,13 @@ fn run_camera_controller(
|
|||
mut mouse_events: EventReader<MouseMotion>,
|
||||
mouse_button_input: Res<ButtonInput<MouseButton>>,
|
||||
key_input: Res<ButtonInput<KeyCode>>,
|
||||
thruster_sound_controller: Query<&AudioSink, With<audio::ComponentThrusterSound>>,
|
||||
mut toggle_cursor_grab: Local<bool>,
|
||||
mut mouse_cursor_grab: Local<bool>,
|
||||
mut query: Query<(&mut Transform, &mut CameraController), With<Camera>>,
|
||||
) {
|
||||
let dt = time.delta_seconds();
|
||||
let mut play_thruster_sound = false;
|
||||
|
||||
let window_result = windows.get_single_mut();
|
||||
let mut focused = true;
|
||||
|
@ -164,6 +167,7 @@ fn run_camera_controller(
|
|||
controller.walk_speed
|
||||
};
|
||||
controller.velocity = axis_input.normalize() * max_speed;
|
||||
play_thruster_sound = true;
|
||||
} else {
|
||||
let friction = controller.friction.clamp(0.0, 1.0);
|
||||
controller.velocity *= 1.0 - friction;
|
||||
|
@ -196,5 +200,13 @@ fn run_camera_controller(
|
|||
transform.rotation =
|
||||
Quat::from_euler(EulerRot::ZYX, 0.0, controller.yaw, controller.pitch);
|
||||
}
|
||||
|
||||
if let Ok(sink) = thruster_sound_controller.get_single() {
|
||||
if play_thruster_sound {
|
||||
sink.play()
|
||||
} else {
|
||||
sink.pause()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue