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}