diff --git a/assets/voxygen/audio/footsteps/stepdirt_1.wav b/assets/voxygen/audio/footsteps/stepdirt_1.wav new file mode 100644 index 0000000000..dc4c7f75be --- /dev/null +++ b/assets/voxygen/audio/footsteps/stepdirt_1.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8887df14b8eb7be26cbaf27f4546427cc8c88e69a872812e3e60b096eb5acd98 +size 94334 diff --git a/assets/voxygen/audio/footsteps/stepdirt_2.wav b/assets/voxygen/audio/footsteps/stepdirt_2.wav new file mode 100644 index 0000000000..0d5b2bbe8e --- /dev/null +++ b/assets/voxygen/audio/footsteps/stepdirt_2.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b86d824478f049cb594af8743ccad624bbc9777ebfeb5fcb3662387d873b156 +size 94334 diff --git a/assets/voxygen/audio/footsteps/stepdirt_3.wav b/assets/voxygen/audio/footsteps/stepdirt_3.wav new file mode 100644 index 0000000000..0f72e8e9c9 --- /dev/null +++ b/assets/voxygen/audio/footsteps/stepdirt_3.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4330304f401b5e392f53c92ff5d25b3badb6f40364e176d3337e770614803e0b +size 115890 diff --git a/assets/voxygen/audio/footsteps/stepdirt_4.wav b/assets/voxygen/audio/footsteps/stepdirt_4.wav new file mode 100644 index 0000000000..e9181d1ec1 --- /dev/null +++ b/assets/voxygen/audio/footsteps/stepdirt_4.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7425cd32c55e7ded6a191ac1fdf8ff0db8dd8e36910bc84d331ef2d138457808 +size 132426 diff --git a/assets/voxygen/audio/footsteps/stepdirt_5.wav b/assets/voxygen/audio/footsteps/stepdirt_5.wav new file mode 100644 index 0000000000..53e13e2f67 --- /dev/null +++ b/assets/voxygen/audio/footsteps/stepdirt_5.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8be0a6928a9e4516d518b92cc922ba7f4c691214b00bb3f09a4a9ccf682bd2db +size 132426 diff --git a/assets/voxygen/audio/footsteps/stepdirt_6.wav b/assets/voxygen/audio/footsteps/stepdirt_6.wav new file mode 100644 index 0000000000..60ce837fe2 --- /dev/null +++ b/assets/voxygen/audio/footsteps/stepdirt_6.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02b35836fbbf2366d6d04c4895c77e89cd92a0ff80d69ea622389ae35df615a8 +size 132426 diff --git a/assets/voxygen/audio/footsteps/stepdirt_7.wav b/assets/voxygen/audio/footsteps/stepdirt_7.wav new file mode 100644 index 0000000000..cc43af0c3d --- /dev/null +++ b/assets/voxygen/audio/footsteps/stepdirt_7.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e2181e677fda51a0aa51eabd88efbc2cffe89b43fd65f2dd3ccaeecaddd3dc6 +size 132426 diff --git a/assets/voxygen/audio/footsteps/stepdirt_8.wav b/assets/voxygen/audio/footsteps/stepdirt_8.wav new file mode 100644 index 0000000000..985f4c5bde --- /dev/null +++ b/assets/voxygen/audio/footsteps/stepdirt_8.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0eaa8b697b6ba583b7f34844b9497d1654d2dd6a3eaf3fb98c19c58c9d49669d +size 132426 diff --git a/assets/voxygen/audio/footsteps/stepsnow_1.wav b/assets/voxygen/audio/footsteps/stepsnow_1.wav new file mode 100644 index 0000000000..326f9f6b39 --- /dev/null +++ b/assets/voxygen/audio/footsteps/stepsnow_1.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6807671167bd3c4e670b16c2df1ba637ce6e2c3b1ba71dfdfb64d50f0694316 +size 94334 diff --git a/assets/voxygen/audio/footsteps/stepsnow_2.wav b/assets/voxygen/audio/footsteps/stepsnow_2.wav new file mode 100644 index 0000000000..7939739411 --- /dev/null +++ b/assets/voxygen/audio/footsteps/stepsnow_2.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d78b771b2364abf5207fcb0abfb66af7b9b3011a28e7dfc05579f0266f4292d +size 74866 diff --git a/assets/voxygen/audio/footsteps/stepstone_1.wav b/assets/voxygen/audio/footsteps/stepstone_1.wav new file mode 100644 index 0000000000..d063b32f89 --- /dev/null +++ b/assets/voxygen/audio/footsteps/stepstone_1.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:acc063c76b7fb7237b22b0c276fe515c26013d9d62e19421f4b05d6e41a03e3d +size 74866 diff --git a/assets/voxygen/audio/footsteps/stepstone_2.wav b/assets/voxygen/audio/footsteps/stepstone_2.wav new file mode 100644 index 0000000000..cb44231a89 --- /dev/null +++ b/assets/voxygen/audio/footsteps/stepstone_2.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05aea43667a4cdbb2f964888cf4b91c6361e9b7e7a8aaf157a4954f3e89c62e2 +size 74866 diff --git a/assets/voxygen/audio/footsteps/stepstone_3.wav b/assets/voxygen/audio/footsteps/stepstone_3.wav new file mode 100644 index 0000000000..b48ee93153 --- /dev/null +++ b/assets/voxygen/audio/footsteps/stepstone_3.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe5e1cab24a0f3d3177bd35b7184b1549d1486d6323b5f998375cabcb16ce51e +size 99354 diff --git a/assets/voxygen/audio/footsteps/stepstone_4.wav b/assets/voxygen/audio/footsteps/stepstone_4.wav new file mode 100644 index 0000000000..e00b3a4872 --- /dev/null +++ b/assets/voxygen/audio/footsteps/stepstone_4.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9713007299db5277d6344d43819bb7c107fc0c1cd845f0df28c1e7877d758ae4 +size 99354 diff --git a/assets/voxygen/audio/footsteps/stepstone_5.wav b/assets/voxygen/audio/footsteps/stepstone_5.wav new file mode 100644 index 0000000000..c4fc9fca79 --- /dev/null +++ b/assets/voxygen/audio/footsteps/stepstone_5.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7c41b17589753dd01c96c9b1cb08d29d184e54c13cf9dda389e063166361651 +size 99354 diff --git a/assets/voxygen/audio/footsteps/stepstone_6.wav b/assets/voxygen/audio/footsteps/stepstone_6.wav new file mode 100644 index 0000000000..58c3351eb1 --- /dev/null +++ b/assets/voxygen/audio/footsteps/stepstone_6.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d698fb1ef14cd1c77fdd6bbbe422d067c0d189ba54681019ac7d5d409771466 +size 99354 diff --git a/assets/voxygen/audio/footsteps/stepstone_7.wav b/assets/voxygen/audio/footsteps/stepstone_7.wav new file mode 100644 index 0000000000..855660a9d7 --- /dev/null +++ b/assets/voxygen/audio/footsteps/stepstone_7.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9da9d99ebc22f571cd7b9cd2f338596904f50d02f700de95c2cd92d15106c25e +size 99354 diff --git a/assets/voxygen/audio/footsteps/stepstone_8.wav b/assets/voxygen/audio/footsteps/stepstone_8.wav new file mode 100644 index 0000000000..30b384ebd0 --- /dev/null +++ b/assets/voxygen/audio/footsteps/stepstone_8.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9d45c7d701edab0910eb04c0b9f0ba8e1aad60afe876f54dbc5ee4f80ab99fd +size 99354 diff --git a/assets/voxygen/audio/footsteps/stepwater_1.wav b/assets/voxygen/audio/footsteps/stepwater_1.wav new file mode 100644 index 0000000000..d803e6b857 --- /dev/null +++ b/assets/voxygen/audio/footsteps/stepwater_1.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89029ec15d493acc15ff4713b2b6421ae697bc7d04f0d3437e1033554069cf7f +size 191106 diff --git a/assets/voxygen/audio/footsteps/stepwater_2.wav b/assets/voxygen/audio/footsteps/stepwater_2.wav new file mode 100644 index 0000000000..6e4a990b11 --- /dev/null +++ b/assets/voxygen/audio/footsteps/stepwater_2.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32b682ba987e7bbfec3e287f44329f01c87fff298a00178659768091e2c9eca8 +size 158846 diff --git a/assets/voxygen/audio/footsteps/stepwood_1.wav b/assets/voxygen/audio/footsteps/stepwood_1.wav new file mode 100644 index 0000000000..8852250ce3 --- /dev/null +++ b/assets/voxygen/audio/footsteps/stepwood_1.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:908ddfda1c15bed8b46c5cff6b13203cffa957f79274ad9b260d598961c9873f +size 94334 diff --git a/assets/voxygen/audio/footsteps/stepwood_2.wav b/assets/voxygen/audio/footsteps/stepwood_2.wav new file mode 100644 index 0000000000..45ff7d0c56 --- /dev/null +++ b/assets/voxygen/audio/footsteps/stepwood_2.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f07a24d1e2593e37f5504a314a240650f2cd0c16df2bd45b62138bbf43d197cf +size 74866 diff --git a/voxygen/src/audio/mod.rs b/voxygen/src/audio/mod.rs index 7a5cfe1fbe..3d4fa2c12b 100644 --- a/voxygen/src/audio/mod.rs +++ b/voxygen/src/audio/mod.rs @@ -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]; diff --git a/voxygen/src/menu/main/mod.rs b/voxygen/src/menu/main/mod.rs index a688a753aa..04f7c2a111 100644 --- a/voxygen/src/menu/main/mod.rs +++ b/voxygen/src/menu/main/mod.rs @@ -35,7 +35,6 @@ impl PlayState for MainMenuState { let mut client_init: Option = 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. diff --git a/voxygen/src/scene/mod.rs b/voxygen/src/scene/mod.rs index 96518f516b..6936b66f9e 100644 --- a/voxygen/src/scene/mod.rs +++ b/voxygen/src/scene/mod.rs @@ -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`. diff --git a/voxygen/src/scene/sound.rs b/voxygen/src/scene/sound.rs new file mode 100644 index 0000000000..117ac4317e --- /dev/null +++ b/voxygen/src/scene/sound.rs @@ -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::() + .get(client.entity()) + .map_or(Vec3::zero(), |pos| pos.0); + + for (entity, pos, body, character) in ( + &ecs.entities(), + &ecs.read_storage::(), + &ecs.read_storage::(), + ecs.read_storage::().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::() % 7) + 1; + audio.play_sound(format!("voxygen.audio.footsteps.stepdirt_{}", rand_step)); + } + } + } + } +} diff --git a/voxygen/src/session.rs b/voxygen/src/session.rs index a3192f51b3..53b889f669 100644 --- a/voxygen/src/session.rs +++ b/voxygen/src/session.rs @@ -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());