sitch to bevy_persistent to allow two clients
bevy_pkv was holding a file lock to prevent that
This commit is contained in:
98
Cargo.lock
generated
98
Cargo.lock
generated
@@ -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"
|
||||
|
||||
@@ -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",
|
||||
] }
|
||||
|
||||
@@ -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 }
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user