configs/
lib.rs

1pub mod abilities;
2pub mod ability_stones;
3pub mod ads_settings;
4pub mod afk_rewards;
5pub mod artifacts;
6pub mod buffs;
7pub mod cheats;
8pub mod collection_power;
9pub mod config;
10pub mod cores;
11pub mod events;
12pub mod fighting;
13pub mod flip;
14pub mod game_config;
15pub mod game_settings;
16pub mod kill_faucets;
17pub mod local_notifications;
18pub mod mana;
19pub mod matchmaking;
20pub mod pet_facets;
21pub mod pets;
22pub mod plinko;
23pub mod portal_rarities;
24pub mod reports;
25pub mod statue;
26pub mod stones;
27pub mod tests_game_config;
28pub mod tutorial;
29pub mod validated_types;
30pub mod vassals;
31
32pub use config::Config;
33
34use arc_swap::ArcSwap;
35use std::sync::{
36    Arc,
37    atomic::{AtomicU64, Ordering},
38};
39
40#[derive(Clone, Debug)]
41pub struct SharedGameConfig {
42    inner: Arc<ArcSwap<game_config::GameConfig>>,
43    version: Arc<AtomicU64>,
44}
45
46impl SharedGameConfig {
47    pub fn new(config: game_config::GameConfig) -> Self {
48        Self {
49            inner: Arc::new(ArcSwap::from_pointee(config)),
50            version: Arc::new(AtomicU64::new(0)),
51        }
52    }
53
54    pub fn get(&self) -> Arc<game_config::GameConfig> {
55        self.inner.load_full()
56    }
57
58    pub fn version(&self) -> u64 {
59        self.version.load(Ordering::Relaxed)
60    }
61
62    pub fn update(&self, new_config: game_config::GameConfig) {
63        self.inner.store(Arc::new(new_config));
64        self.version.fetch_add(1, Ordering::Relaxed);
65    }
66}