use super::{Resettable, Settings};
#[derive(Clone)]
pub struct TimingSettings<T> {
pub auto_next: T,
pub letter: T,
pub line: T,
pub select: T,
pub view: T,
}
impl<T: From<f32>> TimingSettings<T> {
pub fn common() -> Self {
Self {
auto_next: 2.0.into(),
letter: 0.05.into(),
line: 0.5.into(),
select: 0.5.into(),
view: 0.0.into(),
}
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum TimingParameter {
AutoNext,
Letter,
Line,
Select,
View,
}
impl<T> Settings<TimingParameter> for TimingSettings<T> {
type Value = T;
fn get_mut(&mut self, parameter: &TimingParameter) -> &mut T {
use TimingParameter::*;
match parameter {
AutoNext => &mut self.auto_next,
Letter => &mut self.letter,
Line => &mut self.line,
Select => &mut self.select,
View => &mut self.view,
}
}
}
impl<T: Resettable> Resettable for TimingSettings<T> {
fn reset(&mut self) {
self.auto_next.reset();
self.letter.reset();
self.line.reset();
self.select.reset();
}
fn reset_aspects(&mut self) {
self.auto_next.reset_aspects();
self.letter.reset_aspects();
self.line.reset_aspects();
self.select.reset_aspects();
}
}