vn_settings/
object.rs

1use super::{Resettable, Settings};
2
3#[derive(Clone)]
4pub struct ObjectLayerSettings<T, U> {
5    pub image: T,
6    pub hor: U,
7    pub ver: U,
8    pub scale: U,
9}
10
11#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
12pub enum ObjectLayerLayoutParameter {
13    Hor,
14    Ver,
15    Scale,
16}
17
18impl<T, U> Settings<ObjectLayerLayoutParameter> for ObjectLayerSettings<T, U> {
19    type Value = U;
20
21    fn get_mut(&mut self, parameter: &ObjectLayerLayoutParameter) -> &mut U {
22        use ObjectLayerLayoutParameter::*;
23        match parameter {
24            Hor => &mut self.hor,
25            Ver => &mut self.ver,
26            Scale => &mut self.scale,
27        }
28    }
29}
30
31impl<T: Resettable, U: Resettable> Resettable for ObjectLayerSettings<T, U> {
32    fn reset(&mut self) {
33        self.image.reset();
34        self.hor.reset();
35        self.ver.reset();
36        self.scale.reset();
37    }
38}
39
40#[derive(Clone)]
41pub struct ObjectSettings<T, U> {
42    pub objects: Vec<ObjectLayerSettings<T, U>>,
43}
44
45impl<T: Default, U: From<f32>> ObjectSettings<T, U> {
46    pub fn common() -> Self {
47        Self {
48            objects: Vec::new(),
49        }
50    }
51
52    fn at(&mut self, i: usize) -> &mut ObjectLayerSettings<T, U> {
53        let settings = || ObjectLayerSettings {
54            image: Default::default(),
55            hor: 0.0.into(),
56            ver: 0.0.into(),
57            scale: 1.0.into(),
58        };
59
60        while i >= self.objects.len() {
61            self.objects.push(settings());
62        }
63
64        &mut self.objects[i]
65    }
66}
67
68pub type ObjectImageParameter = usize;
69
70#[derive(Clone, Debug, PartialEq, Eq, Hash)]
71pub struct ObjectLayoutParameter {
72    pub layer: usize,
73    pub layout: ObjectLayerLayoutParameter,
74}
75
76impl<T: Default, U: From<f32>> Settings<ObjectImageParameter> for ObjectSettings<T, U> {
77    type Value = T;
78
79    fn get_mut(&mut self, parameter: &ObjectImageParameter) -> &mut T {
80        &mut self.at(*parameter).image
81    }
82}
83
84impl<T: Default, U: From<f32>> Settings<ObjectLayoutParameter> for ObjectSettings<T, U> {
85    type Value = U;
86
87    fn get_mut(&mut self, parameter: &ObjectLayoutParameter) -> &mut U {
88        self.at(parameter.layer).get_mut(&parameter.layout)
89    }
90}
91
92impl<T: Resettable, U: Resettable> Resettable for ObjectSettings<T, U> {
93    fn reset(&mut self) {
94        for object in &mut self.objects {
95            object.reset();
96        }
97    }
98}