vn-settings 0.4.0

Various settings intended to simulate visual novels
Documentation
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();
    }
}