save & load rulesets

This commit is contained in:
Crispy 2024-05-03 16:51:20 +02:00
parent 37f8edb5c1
commit 738e22bd4a
6 changed files with 320 additions and 29 deletions

View file

@ -7,3 +7,5 @@ edition = "2021"
[dependencies]
rand = "0.8.5"
serde = "1.0.200"
serde_json = "1.0.116"

View file

@ -1,8 +1,9 @@
use rand::prelude::*;
use serde::{Deserialize, Serialize};
pub const CHUNK_SIZE: usize = 32;
#[derive(Default, Debug, PartialEq, Clone, Copy)]
#[derive(Default, Debug, PartialEq, Clone, Copy, Serialize, Deserialize)]
pub struct Cell(pub u16);
#[derive(Debug)]
@ -16,9 +17,10 @@ pub struct Chunk {
pub contents: Box<[[Cell; CHUNK_SIZE]; CHUNK_SIZE]>,
}
#[derive(Debug)]
#[derive(Debug, Serialize, Deserialize)]
pub struct Rule {
base: SubRule,
#[serde(skip)]
variants: Vec<SubRule>,
pub enabled: bool,
// probability: u8
@ -27,7 +29,7 @@ pub struct Rule {
pub rotate: bool,
}
#[derive(Debug, Clone, PartialEq)]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
struct SubRule {
width: usize,
height: usize,
@ -287,6 +289,12 @@ impl Dish {
}
}
pub fn update_rules(&mut self) {
for rule in &mut self.rules {
rule.generate_variants();
}
}
pub fn fire_blindly(&mut self) {
if self.rules.is_empty() {
return;