sitch to bevy_persistent to allow two clients

bevy_pkv was holding a file lock to prevent that
This commit is contained in:
2025-12-20 13:21:30 -05:00
parent 3901ee1174
commit f35275ab9f
4 changed files with 71 additions and 73 deletions

98
Cargo.lock generated
View File

@@ -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"

View File

@@ -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",
] }

View File

@@ -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 }

View File

@@ -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::<SoundSettings>::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::<PkvStore>));
app.add_systems(Startup, load_settings.run_if(resource_exists::<PkvStore>));
app.add_systems(Update, persist_settings);
app.add_systems(Startup, load_settings);
}
fn persist_settings(
settings: Res<SoundSettings>,
mut pkv: ResMut<PkvStore>,
mut persistent: ResMut<Persistent<SoundSettings>>,
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<SoundSettings>, pkv: Res<PkvStore>) -> Result {
if let Ok(loaded) = pkv.get::<SoundSettings>("audio") {
*settings = loaded;
}
Ok(())
fn load_settings(persistent: Res<Persistent<SoundSettings>>, mut settings: ResMut<SoundSettings>) {
*settings = *persistent.get();
}