use std::collections::BTreeMap;
use crate::mapping::SettingValue;
use crate::setting::{BrushSetting, NUM_SETTINGS};
#[derive(Debug, Clone, Default, PartialEq)]
pub struct UnknownSetting {
pub base_value: f32,
pub inputs: BTreeMap<String, Vec<(f32, f32)>>,
}
#[derive(Debug, Clone)]
pub struct Brush {
pub version: u32,
pub group: Option<String>,
pub parent_brush_name: Option<String>,
pub comment: Option<String>,
settings: Vec<SettingValue>,
pub unknown_settings: BTreeMap<String, UnknownSetting>,
}
impl Brush {
pub fn new() -> Self {
Self {
version: 3,
group: None,
parent_brush_name: None,
comment: None,
settings: vec![SettingValue::default(); NUM_SETTINGS],
unknown_settings: BTreeMap::new(),
}
}
#[inline]
pub fn get(&self, s: BrushSetting) -> &SettingValue {
&self.settings[s.index()]
}
#[inline]
pub fn get_mut(&mut self, s: BrushSetting) -> &mut SettingValue {
&mut self.settings[s.index()]
}
pub fn set(&mut self, s: BrushSetting, v: SettingValue) {
self.settings[s.index()] = v;
}
pub fn settings(&self) -> &[SettingValue] {
&self.settings
}
}
impl Default for Brush {
fn default() -> Self {
Self::new()
}
}