use std::sync::
{
LazyLock,
RwLock,
atomic::
{
AtomicBool,
AtomicUsize,
Ordering,
},
};
use crate::
{
config,
network::voice::client::options as voice_options,
};
static USE_SCREEN: AtomicBool = AtomicBool::new(false);
static ATTACH_SCREEN: AtomicBool = AtomicBool::new(false);
static MONITOR: RwLock<Option<String>> = RwLock::new(None);
static MONITOR_GENERATION: AtomicUsize = AtomicUsize::new(0);
static SCREEN_VOLUME: LazyLock<AtomicUsize> = LazyLock::new(|| AtomicUsize::new(voice_options::clamp_volume(config::read_config::<u32>("screen_volume")) as usize));
pub fn get_use_screen() -> bool
{
USE_SCREEN.load(Ordering::Relaxed)
}
pub fn set_use_screen(use_screen: bool)
{
USE_SCREEN.store(use_screen, Ordering::Relaxed)
}
pub fn get_attach_screen() -> bool
{
ATTACH_SCREEN.load(Ordering::Relaxed)
}
pub fn set_attach_screen(attach: bool)
{
ATTACH_SCREEN.store(attach, Ordering::Relaxed)
}
pub fn get_monitor() -> Option<String>
{
MONITOR.read().unwrap().clone()
}
pub fn set_monitor(monitor: Option<String>)
{
let mut current = MONITOR.write().unwrap();
if *current == monitor { return; }
*current = monitor;
MONITOR_GENERATION.fetch_add(1, Ordering::Relaxed);
}
pub fn monitor_generation() -> usize
{
MONITOR_GENERATION.load(Ordering::Relaxed)
}
pub fn get_screen_volume() -> u32 {
SCREEN_VOLUME.load(Ordering::Relaxed) as u32
}
pub fn set_screen_volume(percent: u32)
{
SCREEN_VOLUME.store(voice_options::clamp_volume(percent) as usize, Ordering::Relaxed);
}
pub fn get_screen_gain() -> f32 {
get_screen_volume() as f32 / 100.
}