Add footstep sounds, implement crude footstep sounding

Sounds are played every tick, which is not good.
This commit is contained in:
Louis Pearson 2019-08-31 19:32:39 -06:00
parent 41cd20aaf8
commit ad3bd0b2ce
27 changed files with 130 additions and 4 deletions

BIN
assets/voxygen/audio/footsteps/stepdirt_1.wav (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/audio/footsteps/stepdirt_2.wav (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/audio/footsteps/stepdirt_3.wav (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/audio/footsteps/stepdirt_4.wav (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/audio/footsteps/stepdirt_5.wav (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/audio/footsteps/stepdirt_6.wav (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/audio/footsteps/stepdirt_7.wav (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/audio/footsteps/stepdirt_8.wav (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/audio/footsteps/stepsnow_1.wav (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/audio/footsteps/stepsnow_2.wav (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/audio/footsteps/stepstone_1.wav (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/audio/footsteps/stepstone_2.wav (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/audio/footsteps/stepstone_3.wav (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/audio/footsteps/stepstone_4.wav (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/audio/footsteps/stepstone_5.wav (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/audio/footsteps/stepstone_6.wav (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/audio/footsteps/stepstone_7.wav (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/audio/footsteps/stepstone_8.wav (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/audio/footsteps/stepwater_1.wav (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/audio/footsteps/stepwater_2.wav (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/audio/footsteps/stepwood_1.wav (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/audio/footsteps/stepwood_2.wav (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -4,7 +4,7 @@ use fader::Fader;
use channel::{AudioType, Channel};
use common::assets;
use rodio::{Decoder, Device, Sink, SpatialSink};
use rodio::{Decoder, Device, SpatialSink};
const LEFT_EAR : [f32; 3] = [1.0, 0.0, 0.0];
const RIGHT_EAR : [f32; 3] = [-1.0, 0.0, 0.0];

View File

@ -35,7 +35,6 @@ impl PlayState for MainMenuState {
let mut client_init: Option<ClientInit> = None;
let music = global_state.audio.play_music("voxygen.audio.soundtrack.veloren_title_tune-3".to_string());
global_state.audio.stop_channel(music, Fader::fade_out(10.0));
loop {
// Handle window events.

View File

@ -1,11 +1,13 @@
pub mod camera;
pub mod figure;
pub mod terrain;
pub mod sound;
use self::{
camera::{Camera, CameraMode},
figure::FigureMgr,
terrain::Terrain,
sound::SoundMgr,
};
use crate::{
render::{
@ -13,6 +15,7 @@ use crate::{
PostProcessPipeline, Renderer, SkyboxLocals, SkyboxPipeline,
},
window::Event,
audio::AudioFrontend,
};
use client::Client;
use common::{comp, terrain::BlockKind, vol::ReadVol};
@ -46,6 +49,7 @@ pub struct Scene {
loaded_distance: f32,
figure_mgr: FigureMgr,
sound_mgr: SoundMgr,
}
impl Scene {
@ -71,6 +75,7 @@ impl Scene {
terrain: Terrain::new(renderer),
loaded_distance: 0.0,
figure_mgr: FigureMgr::new(),
sound_mgr: SoundMgr::new(),
}
}
@ -115,7 +120,7 @@ impl Scene {
}
/// Maintain data such as GPU constant buffers, models, etc. To be called once per tick.
pub fn maintain(&mut self, renderer: &mut Renderer, client: &Client) {
pub fn maintain(&mut self, renderer: &mut Renderer, audio: &mut AudioFrontend, client: &Client) {
// Get player position.
let player_pos = client
.state()
@ -219,6 +224,9 @@ impl Scene {
// Remove unused figures.
self.figure_mgr.clean(client.get_tick());
// Maintain audio
self.sound_mgr.maintain(audio, client);
}
/// Render the scene using the provided `Renderer`.

View File

@ -0,0 +1,53 @@
use crate::{
audio::AudioFrontend,
};
use common::comp::{
Pos,
Body,
CharacterState,
MovementState::*,
};
use client::Client;
use vek::*;
use specs::{Entity as EcsEntity, Join};
pub struct SoundMgr {
}
impl SoundMgr {
pub fn new() -> Self {
Self {}
}
pub fn maintain(&mut self, audio: &mut AudioFrontend, client: &Client) {
let time = client.state().get_time();
let tick = client.get_tick();
let ecs = client.state().ecs();
let dt = client.state().get_delta_time();
// Get player position.
let player_pos = ecs
.read_storage::<Pos>()
.get(client.entity())
.map_or(Vec3::zero(), |pos| pos.0);
for (entity, pos, body, character) in (
&ecs.entities(),
&ecs.read_storage::<Pos>(),
&ecs.read_storage::<Body>(),
ecs.read_storage::<CharacterState>().maybe(),
)
.join()
{
if let Body::Humanoid(_) = body {
let character = match character {
Some(c) => c,
_ => continue,
};
if let Run = &character.movement {
let rand_step = (rand::random::<usize>() % 7) + 1;
audio.play_sound(format!("voxygen.audio.footsteps.stepdirt_{}", rand_step));
}
}
}
}
}

View File

@ -389,7 +389,7 @@ impl PlayState for SessionState {
// Maintain the scene.
self.scene
.maintain(global_state.window.renderer_mut(), &self.client.borrow());
.maintain(global_state.window.renderer_mut(), &mut global_state.audio, &self.client.borrow());
// Render the session.
self.render(global_state.window.renderer_mut());