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}