diff --git a/petri/src/lib.rs b/petri/src/lib.rs index 63f5501..e4ef5f3 100644 --- a/petri/src/lib.rs +++ b/petri/src/lib.rs @@ -18,8 +18,10 @@ pub struct Chunk { pub contents: Box<[[Cell; CHUNK_SIZE]; CHUNK_SIZE]>, } -#[derive(Debug, Default, Serialize, Deserialize)] +#[derive(Debug, Serialize, Deserialize)] pub struct Rule { + #[serde(default)] + pub name: String, base: SubRule, #[serde(skip)] variants: Vec, @@ -61,12 +63,6 @@ pub enum RuleCellTo { Copy(usize), } -impl std::default::Default for SubRule { - fn default() -> Self { - Self::new() - } -} - impl SubRule { fn new() -> Self { Self { @@ -119,6 +115,18 @@ impl Rule { pub const SHRINK_UP: ResizeParam = (0, -1, 0, 1); pub const SHRINK_DOWN: ResizeParam = (0, -1, 0, 0); + pub fn new() -> Self { + Self { + name: "new rule".into(), + enabled: false, + base: SubRule::new(), + variants: vec![SubRule::new()], + flip_h: false, + flip_v: false, + rotate: false, + } + } + pub fn get(&self, x: usize, y: usize) -> (RuleCellFrom, RuleCellTo) { self.base.get(x, y) } @@ -280,7 +288,7 @@ impl Dish { (RuleCellFrom::One(Cell(0)), RuleCellTo::One(Cell(1))), ], }, - ..Rule::default() + ..Rule::new() }, Rule { enabled: true, @@ -295,7 +303,7 @@ impl Dish { ], }, flip_h: true, - ..Rule::default() + ..Rule::new() }, ]; diff --git a/uscope/src/main.rs b/uscope/src/main.rs index f36c2b6..8b5e991 100644 --- a/uscope/src/main.rs +++ b/uscope/src/main.rs @@ -186,7 +186,7 @@ impl eframe::App for UScope { } ui.separator(); if ui.button("add rule").clicked() { - self.dish.rules.push(Rule::default()); + self.dish.rules.push(Rule::new()); } }); });