use crate::pattern::patterns::{
CheckerboardParams, DiagonalParams, DiamondParams, HorizontalParams,
PerlinParams, PlasmaParams, RippleParams, SpiralParams, WaveParams,
PixelRainParams, FireParams, AuroraParams, KaleidoscopeParams,
};
#[derive(Debug, Clone)]
pub struct CommonParams {
pub frequency: f64,
pub amplitude: f64,
pub speed: f64,
pub correct_aspect: bool,
pub aspect_ratio: f64,
pub theme_name: Option<String>,
}
impl Default for CommonParams {
fn default() -> Self {
Self {
frequency: 1.0,
amplitude: 1.0,
speed: 1.0,
correct_aspect: true,
aspect_ratio: 0.5,
theme_name: None,
}
}
}
#[derive(Debug, Clone)]
pub enum PatternParams {
Horizontal(HorizontalParams),
Diagonal(DiagonalParams),
Plasma(PlasmaParams),
Ripple(RippleParams),
Wave(WaveParams),
Spiral(SpiralParams),
Checkerboard(CheckerboardParams),
Diamond(DiamondParams),
Perlin(PerlinParams),
PixelRain(PixelRainParams),
Fire(FireParams),
Aurora(AuroraParams),
Kaleidoscope(KaleidoscopeParams),
}
impl Default for PatternParams {
fn default() -> Self {
Self::Diagonal(DiagonalParams::default())
}
}
#[derive(Debug, Clone, Default)]
pub struct PatternConfig {
pub common: CommonParams,
pub params: PatternParams,
}
impl PatternConfig {
pub fn new(pattern_type: PatternParams) -> Self {
Self {
common: CommonParams::default(),
params: pattern_type,
}
}
pub fn params(&self) -> &PatternParams {
&self.params
}
pub fn params_mut(&mut self) -> &mut PatternParams {
&mut self.params
}
pub fn common(&self) -> &CommonParams {
&self.common
}
pub fn common_mut(&mut self) -> &mut CommonParams {
&mut self.common
}
}