use crate::data::Colors;
use egui::DragValue;
#[cfg(feature = "saves")]
use serde::{Deserialize, Serialize};
use std::num::NonZeroU8;
use wgpu::Color;
#[derive(Clone)]
#[cfg_attr(feature = "saves", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "saves", serde(default))]
pub struct Settings {
pub lazy_draw: bool,
pub rerender: bool,
pub taa: Option<NonZeroU8>,
pub shadow: bool,
pub background_color: Color,
pub mouse_sensitivity: f32,
pub zoom_sensitivity: f32,
pub default_color_map: Colors,
pub fit_camera_on_start: bool,
}
impl Default for Settings {
fn default() -> Settings {
Settings {
lazy_draw: true,
rerender: false,
taa: NonZeroU8::new(16),
shadow: true,
background_color: Color {
r: 1.0,
g: 1.0,
b: 1.0,
a: 1.0,
},
mouse_sensitivity: 0.1,
zoom_sensitivity: 0.1,
default_color_map: Colors::Viridis,
fit_camera_on_start: true,
}
}
}
impl Settings {
pub fn draw_ui(&mut self, ui: &mut egui::Ui, refresh_screen: &mut bool) {
ui.collapsing("Settings", |ui| {
ui.horizontal(|ui| {
let mut value = self.taa.map(|v| v.get()).unwrap_or(0) as f32;
ui.add(
DragValue::new(&mut value)
.range(0..=64)
.prefix("TAA frames: "),
);
let value = NonZeroU8::new(value as u8);
if self.taa != value {
self.taa = value;
*refresh_screen = true;
}
});
*refresh_screen |= ui.checkbox(&mut self.shadow, "Ground shadow").clicked();
ui.horizontal(|ui| {
ui.add(
DragValue::new(&mut self.mouse_sensitivity)
.range(0. ..=100.)
.speed(0.01)
.prefix("Mouse sensitivity: "),
);
});
ui.horizontal(|ui| {
ui.add(
DragValue::new(&mut self.zoom_sensitivity)
.range(0. ..=100.)
.speed(0.01)
.prefix("Zoom sensitivity: "),
);
});
});
}
}