diff --git a/Cargo.lock b/Cargo.lock index c6ff395..e12b52b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -316,12 +316,6 @@ version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4eb2cdb97421e01129ccb49169d8279ed21e829929144f4a22a6e54ac549ca1" -[[package]] -name = "atomic-arena" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5450eca8ce5abcfd5520727e975ebab30ccca96030550406b0ca718b224ead10" - [[package]] name = "atomic-waker" version = "1.1.2" @@ -524,6 +518,24 @@ dependencies = [ "syn 2.0.39", ] +[[package]] +name = "bevy_audio" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18a69889e1bfa4dbac4e641536b94f91c441da55796ad9832e77836b8264688b" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_derive", + "bevy_ecs", + "bevy_math", + "bevy_reflect", + "bevy_transform", + "bevy_utils", + "oboe", + "rodio", +] + [[package]] name = "bevy_core" version = "0.12.1" @@ -660,7 +672,6 @@ dependencies = [ "bevy-inspector-egui", "bevy_asset_loader", "bevy_egui", - "bevy_kira_audio", "bevy_spatial", "embed-resource", "image", @@ -774,6 +785,7 @@ dependencies = [ "bevy_animation", "bevy_app", "bevy_asset", + "bevy_audio", "bevy_core", "bevy_core_pipeline", "bevy_derive", @@ -802,20 +814,6 @@ dependencies = [ "bevy_winit", ] -[[package]] -name = "bevy_kira_audio" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a9678086759e54871faab0829592423492e19f8de5076127315cf892ae56f33" -dependencies = [ - "anyhow", - "bevy", - "kira", - "parking_lot", - "thiserror", - "uuid", -] - [[package]] name = "bevy_log" version = "0.12.1" @@ -1740,15 +1738,6 @@ dependencies = [ "syn 2.0.39", ] -[[package]] -name = "encoding_rs" -version = "0.8.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" -dependencies = [ - "cfg-if", -] - [[package]] name = "epaint" version = "0.23.0" @@ -2032,7 +2021,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5418c17512bdf42730f9032c74e1ae39afc408745ebb2acf72fbc4691c17945" dependencies = [ "bytemuck", - "mint", "serde", ] @@ -2423,20 +2411,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "kira" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d15d6971aeabe05687ca909c6cf71b857e338b204c1ba9fe664e84020c633249" -dependencies = [ - "atomic-arena", - "cpal", - "glam", - "mint", - "ringbuf", - "symphonia", -] - [[package]] name = "ktx2" version = "0.3.0" @@ -2458,6 +2432,17 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" +[[package]] +name = "lewton" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "777b48df9aaab155475a83a7df3070395ea1ac6902f5cd062b8f2b028075c030" +dependencies = [ + "byteorder", + "ogg", + "tinyvec", +] + [[package]] name = "libc" version = "0.2.150" @@ -2603,12 +2588,6 @@ dependencies = [ "simd-adler32", ] -[[package]] -name = "mint" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff" - [[package]] name = "mio" version = "0.8.9" @@ -2955,6 +2934,15 @@ dependencies = [ "cc", ] +[[package]] +name = "ogg" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6951b4e8bf21c8193da321bcce9c9dd2e13c858fe078bf9054a288b419ae5d6e" +dependencies = [ + "byteorder", +] + [[package]] name = "once_cell" version = "1.18.0" @@ -3303,12 +3291,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "216080ab382b992234dda86873c18d4c48358f5cfcb70fd693d7f6f2131b628b" [[package]] -name = "ringbuf" -version = "0.3.3" +name = "rodio" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79abed428d1fd2a128201cec72c5f6938e2da607c6f3745f769fabea399d950a" +checksum = "3b1bb7b48ee48471f55da122c0044fcc7600cfcc85db88240b89cb832935e611" dependencies = [ - "crossbeam-utils", + "cpal", + "lewton", ] [[package]] @@ -3498,77 +3487,6 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fb1df15f412ee2e9dfc1c504260fa695c1c3f10fe9f4a6ee2d2184d7d6450e2" -[[package]] -name = "symphonia" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62e48dba70095f265fdb269b99619b95d04c89e619538138383e63310b14d941" -dependencies = [ - "lazy_static", - "symphonia-codec-vorbis", - "symphonia-core", - "symphonia-format-ogg", - "symphonia-metadata", -] - -[[package]] -name = "symphonia-codec-vorbis" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3953397e3506aa01350c4205817e4f95b58d476877a42f0458d07b665749e203" -dependencies = [ - "log", - "symphonia-core", - "symphonia-utils-xiph", -] - -[[package]] -name = "symphonia-core" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c73eb88fee79705268cc7b742c7bc93a7b76e092ab751d0833866970754142" -dependencies = [ - "arrayvec", - "bitflags 1.3.2", - "bytemuck", - "lazy_static", - "log", -] - -[[package]] -name = "symphonia-format-ogg" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bf1a00ccd11452d44048a0368828040f778ae650418dbd9d8765b7ee2574c8d" -dependencies = [ - "log", - "symphonia-core", - "symphonia-metadata", - "symphonia-utils-xiph", -] - -[[package]] -name = "symphonia-metadata" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89c3e1937e31d0e068bbe829f66b2f2bfaa28d056365279e0ef897172c3320c0" -dependencies = [ - "encoding_rs", - "lazy_static", - "log", - "symphonia-core", -] - -[[package]] -name = "symphonia-utils-xiph" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a450ca645b80d69aff8b35576cbfdc7f20940b29998202aab910045714c951f8" -dependencies = [ - "symphonia-core", - "symphonia-metadata", -] - [[package]] name = "syn" version = "1.0.109" @@ -3895,7 +3813,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" dependencies = [ "getrandom", - "rand", "serde", ] diff --git a/Cargo.toml b/Cargo.toml index 4900d16..5d6bb61 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,29 +30,7 @@ default = ["dev"] # All of Bevy's default features exept for the audio related ones (bevy_audio, vorbis), since they clash with bevy_kira_audio # and android_shared_stdcxx, since that is covered in `mobile` [dependencies] -bevy = { version = "0.12.1", default-features = false, features = [ - "animation", - "bevy_asset", - "bevy_gilrs", - "bevy_scene", - "bevy_winit", - "bevy_core_pipeline", - "bevy_pbr", - "bevy_gltf", - "bevy_render", - "bevy_sprite", - "bevy_text", - "bevy_ui", - "multi-threaded", - "png", - "hdr", - "x11", - "bevy_gizmos", - "tonemapping_luts", - "default_font", - "webgl2", -] } -bevy_kira_audio = { version = "0.18" } +bevy = { version = "0.12.1" } bevy_asset_loader = { version = "0.18" } rand = { version = "0.8.3" } webbrowser = { version = "0.8", features = ["hardened"] } diff --git a/assets/audio/barking.ogg b/assets/audio/barking.ogg new file mode 100644 index 0000000..79432fa Binary files /dev/null and b/assets/audio/barking.ogg differ diff --git a/assets/audio/forest.ogg b/assets/audio/forest.ogg new file mode 100644 index 0000000..8c9ce4b Binary files /dev/null and b/assets/audio/forest.ogg differ diff --git a/assets/audio/kill_sound.ogg b/assets/audio/kill_sound.ogg new file mode 100644 index 0000000..7008022 Binary files /dev/null and b/assets/audio/kill_sound.ogg differ diff --git a/assets/audio/running-in-grass.ogg b/assets/audio/running-in-grass.ogg new file mode 100644 index 0000000..a17a5c8 Binary files /dev/null and b/assets/audio/running-in-grass.ogg differ diff --git a/assets/audio/sheep.ogg b/assets/audio/sheep.ogg new file mode 100644 index 0000000..738e107 Binary files /dev/null and b/assets/audio/sheep.ogg differ diff --git a/src/ambient.rs b/src/ambient.rs new file mode 100644 index 0000000..433d11e --- /dev/null +++ b/src/ambient.rs @@ -0,0 +1,37 @@ +use bevy::{prelude::*, audio::{PlaybackMode, VolumeLevel, Volume}}; + +pub struct AmbientPlugin; + +#[derive(Resource)] +pub struct ForestAmbient; + +impl Plugin for AmbientPlugin { + fn build(&self, app: &mut App) { + app. + add_systems(Startup, startup); + } +} + +fn startup( + mut commands: Commands, + asset_server: Res, +) { + commands.spawn(AudioBundle { + source: asset_server.load("audio/forest.ogg"), + settings: PlaybackSettings { + mode: PlaybackMode::Loop, + ..Default::default() + }, + ..default() + }); + + commands.spawn(AudioBundle { + source: asset_server.load("audio/sheep.ogg"), + settings: PlaybackSettings { + mode: PlaybackMode::Loop, + ..Default::default() + }, + ..default() + }); +} + diff --git a/src/lib.rs b/src/lib.rs index f10f8e0..e73173f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -17,6 +17,7 @@ pub mod sunday; pub mod test_level; pub mod torch; pub mod wolf; +pub mod ambient; use std::f32::consts::PI; @@ -102,6 +103,10 @@ impl Plugin for GamePlugin { global_task::GlobalTaskPlugin, )); + app.add_plugins( + ambient::AmbientPlugin + ); + //For long term updates app.insert_resource(Time::::from_seconds(1.0)); diff --git a/src/player.rs b/src/player.rs index c043f70..595eb50 100644 --- a/src/player.rs +++ b/src/player.rs @@ -2,7 +2,7 @@ use bevy::{ input::mouse::MouseWheel, pbr::{CascadeShadowConfig, CascadeShadowConfigBuilder}, prelude::*, - window::PrimaryWindow, + window::PrimaryWindow, audio::{Volume, PlaybackMode}, }; use crate::{ @@ -21,6 +21,9 @@ pub const RUN_K: f32 = 2.0; pub const STAMINA_INCREASE: f32 = 1.0 / 2.5; pub const STAMINA_DECREASE: f32 = 1.0 / 5.0 + STAMINA_INCREASE; +pub const DOG_RUN_PATH: &str = "audio/running-in-grass.ogg"; +pub const BARK_PATH: &str = "audio/barking.ogg"; + pub struct PlayerPlugin; #[derive(Default, Hash, PartialEq, Eq, Debug, States, Clone)] @@ -102,6 +105,18 @@ pub struct Bark { pub position: Vec3, } +#[derive(Resource)] +pub struct DogSounds { + pub bark: Handle, + pub run: Handle, +} + +#[derive(Component)] +pub struct DogBarkSource; + +#[derive(Component)] +pub struct FootstepsSource; + fn spawn_player_by_event( mut commands: Commands, mut event_reader: EventReader, @@ -142,8 +157,41 @@ fn spawn_player_by_event( value: 1.0, blocked: false }, - )); + )).with_children(|parent| { + parent.spawn(( + DogBarkSource, + AudioBundle { + source: asset_server.load(BARK_PATH), + settings: PlaybackSettings { + paused: true, + mode: PlaybackMode::Loop, + volume: Volume::new_relative(0.5), + ..default() + } + }, + SpatialBundle::default(), + )); + + parent.spawn(( + FootstepsSource, + AudioBundle { + source: asset_server.load(DOG_RUN_PATH), + settings: PlaybackSettings { + paused: true, + mode: PlaybackMode::Loop, + volume: Volume::new_relative(2.0), + ..default() + } + } + )); + }); } + + commands.insert_resource(DogSounds { + bark: asset_server.load(BARK_PATH), + run: asset_server.load(DOG_RUN_PATH), + }); + event_reader.clear(); } @@ -152,12 +200,17 @@ fn player_movemnt_by_mouse( time: Res