vn_settings/
timing.rs

1use super::{Resettable, Settings};
2
3#[derive(Clone)]
4pub struct TimingSettings<T> {
5    pub auto_next: T,
6    pub letter: T,
7    pub line: T,
8    pub select: T,
9    pub view: T,
10}
11
12impl<T: From<f32>> TimingSettings<T> {
13    pub fn common() -> Self {
14        Self {
15            auto_next: 2.0.into(),
16            letter: 0.05.into(),
17            line: 0.5.into(),
18            select: 0.5.into(),
19            view: 0.0.into(),
20        }
21    }
22}
23
24#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
25pub enum TimingParameter {
26    AutoNext,
27    Letter,
28    Line,
29    Select,
30    View,
31}
32
33impl<T> Settings<TimingParameter> for TimingSettings<T> {
34    type Value = T;
35
36    fn get_mut(&mut self, parameter: &TimingParameter) -> &mut T {
37        use TimingParameter::*;
38        match parameter {
39            AutoNext => &mut self.auto_next,
40            Letter => &mut self.letter,
41            Line => &mut self.line,
42            Select => &mut self.select,
43            View => &mut self.view,
44        }
45    }
46}
47
48impl<T: Resettable> Resettable for TimingSettings<T> {
49    fn reset(&mut self) {
50        self.auto_next.reset();
51        self.letter.reset();
52        self.line.reset();
53        self.select.reset();
54    }
55}