diff --git a/Cargo.lock b/Cargo.lock index 3c04bbb..d4d0bf1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -512,6 +512,19 @@ dependencies = [ "syn", ] +[[package]] +name = "bevy-persistent" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e58d92d32bb99fa22ed46aeabe5212f5d1bc8952ebf9c49b5271fc06a1359f8" +dependencies = [ + "bevy", + "gloo-storage", + "ron 0.11.0", + "serde", + "thiserror 2.0.17", +] + [[package]] name = "bevy-steamworks" version = "0.15.0" @@ -1359,25 +1372,6 @@ dependencies = [ "uuid", ] -[[package]] -name = "bevy_pkv" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "356a9c6fdc13faf7897103b43a8b84aafe24e1bbf1599df1fb00dc4e9b7055db" -dependencies = [ - "bevy_app", - "bevy_ecs", - "cfg_aliases", - "directories", - "redb", - "rmp-serde", - "serde", - "serde_json", - "thiserror 2.0.17", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "bevy_platform" version = "0.17.3" @@ -2781,10 +2775,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11277822c27bde750de02c5dc5159b91e88bf2661a2c1d98106f2fb1c5c6f590" [[package]] -name = "directories" +name = "dirs" version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16f5094c54661b38d03bd7e50df373292118db60b585c08a411c6d840017fe7d" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" dependencies = [ "dirs-sys", ] @@ -3473,6 +3467,34 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +[[package]] +name = "gloo-storage" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc8031e8c92758af912f9bc08fbbadd3c6f3cfcbf6b64cdf3d6a81f0139277a" +dependencies = [ + "gloo-utils", + "js-sys", + "serde", + "serde_json", + "thiserror 1.0.69", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-utils" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "glow" version = "0.16.0" @@ -3681,18 +3703,19 @@ dependencies = [ "avian3d", "bevy", "bevy-inspector-egui", + "bevy-persistent", "bevy-steamworks", "bevy_asset_loader", "bevy_ballistic", "bevy_common_assets", "bevy_debug_log", - "bevy_pkv", "bevy_replicon", "bevy_replicon_renet", "bevy_sprite3d", "bevy_trenchbroom", "bevy_trenchbroom_avian", "clap", + "dirs", "happy_feet", "nil 0.14.0", "rand 0.8.5", @@ -5459,15 +5482,6 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0d463f2884048e7153449a55166f91028d5b0ea53c79377099ce4e8cf0cf9bb" -[[package]] -name = "redb" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae323eb086579a3769daa2c753bb96deb95993c534711e0dbe881b5192906a06" -dependencies = [ - "libc", -] - [[package]] name = "redox_syscall" version = "0.4.1" @@ -5587,28 +5601,6 @@ dependencies = [ "log", ] -[[package]] -name = "rmp" -version = "0.8.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" -dependencies = [ - "byteorder", - "num-traits", - "paste", -] - -[[package]] -name = "rmp-serde" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" -dependencies = [ - "byteorder", - "rmp", - "serde", -] - [[package]] name = "robust" version = "1.2.0" diff --git a/Cargo.toml b/Cargo.toml index cfeb99b..a1a2532 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -51,15 +51,12 @@ bevy = { version = "0.17.0", default-features = false, features = [ "track_location", ] } bevy-inspector-egui = "0.34" +bevy-persistent = { version = "0.9", features = ["ron"] } bevy-steamworks = "0.15.0" bevy_asset_loader = "=0.24.0-rc.1" bevy_ballistic = { git = "https://github.com/rustunit/bevy_ballistic.git", rev = "b08ffec" } bevy_common_assets = { version = "0.14.0", features = ["ron"] } bevy_debug_log = { git = "https://github.com/rustunit/bevy_debug_log.git", rev = "86051a0" } -bevy_pkv = { version = "0.14", default-features = false, features = [ - "bevy", - "redb", -] } bevy_replicon = "0.37.1" # TODO: i dont think we need this in dedicated server mode bevy_replicon_renet = { version = "0.13.0", features = ["renet_steam"] } @@ -69,6 +66,7 @@ bevy_trenchbroom = { version = "0.10", default-features = false, features = [ ] } bevy_trenchbroom_avian = "0.10" clap = { version = "=4.5.47", features = ["derive"] } +dirs = "6.0.0" happy_feet = { git = "https://github.com/rustunit/happy_feet.git", rev = "919657fa", features = [ "serde", ] } diff --git a/crates/hedz_reloaded/Cargo.toml b/crates/hedz_reloaded/Cargo.toml index 078f39e..96baa06 100644 --- a/crates/hedz_reloaded/Cargo.toml +++ b/crates/hedz_reloaded/Cargo.toml @@ -26,18 +26,19 @@ dbg = ["avian3d/debug-plugin", "bevy/debug", "dep:bevy-inspector-egui"] avian3d = { workspace = true } bevy = { workspace = true } bevy-inspector-egui = { workspace = true, optional = true } +bevy-persistent = { workspace = true } bevy-steamworks = { workspace = true } bevy_asset_loader = { workspace = true } bevy_ballistic = { workspace = true } bevy_common_assets = { workspace = true } bevy_debug_log = { workspace = true } -bevy_pkv = { workspace = true } bevy_replicon = { workspace = true } bevy_replicon_renet = { workspace = true } bevy_sprite3d = { workspace = true } bevy_trenchbroom = { workspace = true } bevy_trenchbroom_avian = { workspace = true } clap = { workspace = true } +dirs = { workspace = true } happy_feet = { workspace = true } nil = { workspace = true } rand = { workspace = true } diff --git a/crates/hedz_reloaded/src/client/settings.rs b/crates/hedz_reloaded/src/client/settings.rs index 90d4579..37b1f4e 100644 --- a/crates/hedz_reloaded/src/client/settings.rs +++ b/crates/hedz_reloaded/src/client/settings.rs @@ -1,19 +1,30 @@ -use bevy::prelude::*; -use bevy_pkv::prelude::*; - use crate::{client::audio::SoundSettings, utils::Debounce}; +use bevy::prelude::*; +use bevy_persistent::{Persistent, StorageFormat}; pub fn plugin(app: &mut App) { - #[cfg(not(feature = "dbg"))] - app.insert_resource(PkvStore::new("Rustunit", "HEDZ")); + app.insert_resource( + Persistent::::builder() + .name("audio") + .format(StorageFormat::Ron) + .path( + dirs::config_dir() + .unwrap() + .join("com.rustunit.hedzreloaded") + .join("audio.ron"), + ) + .default(SoundSettings::default()) + .build() + .unwrap(), + ); - app.add_systems(Update, persist_settings.run_if(resource_exists::)); - app.add_systems(Startup, load_settings.run_if(resource_exists::)); + app.add_systems(Update, persist_settings); + app.add_systems(Startup, load_settings); } fn persist_settings( settings: Res, - mut pkv: ResMut, + mut persistent: ResMut>, mut debounce: Debounce<1000>, ) -> Result { if settings.is_changed() { @@ -21,16 +32,12 @@ fn persist_settings( } if debounce.finished() { - pkv.set("audio", &*settings)?; + persistent.set(*settings)?; } Ok(()) } -fn load_settings(mut settings: ResMut, pkv: Res) -> Result { - if let Ok(loaded) = pkv.get::("audio") { - *settings = loaded; - } - - Ok(()) +fn load_settings(persistent: Res>, mut settings: ResMut) { + *settings = *persistent.get(); }