diff --git a/Cargo.toml b/Cargo.toml old mode 100755 new mode 100644 index 9a2c357..f57487e --- a/Cargo.toml +++ b/Cargo.toml @@ -20,6 +20,8 @@ gltf = "1.3.0" image = "0.24.7" noise = { version = "0.8.2", git = "https://github.com/Razaekel/noise-rs.git" } rfd = "0.12.1" +serde = "1.0.195" +serde_json = "1.0.111" wasm-bindgen = "0.2.89" # Enable max optimizations for dependencies, but not for our code: diff --git a/src/map.rs b/src/map.rs index b7d5de0..a704512 100644 --- a/src/map.rs +++ b/src/map.rs @@ -23,6 +23,7 @@ use bevy::{ render::{render_resource::TextureFormat, texture::ImageSampler}, }; use image::Pixel; +use serde::{Deserialize, Serialize}; use crate::{ noise::{generate_noise_map, Noise}, @@ -39,7 +40,7 @@ impl Plugin for MapPlugin { } /// Component for map configuration -#[derive(Component)] +#[derive(Component, Serialize, Deserialize)] pub struct Map { /// Noise configuration of the map pub noise: Noise, diff --git a/src/noise.rs b/src/noise.rs index c000ae9..5e2da87 100644 --- a/src/noise.rs +++ b/src/noise.rs @@ -4,9 +4,10 @@ use bevy::prelude::{Handle, Image}; use noise::{BasicMulti, Billow, Fbm, HybridMulti, RidgedMulti}; use noise::{MultiFractal, NoiseFn, Seedable}; use noise::{OpenSimplex, Perlin, PerlinSurflet, Simplex, SuperSimplex, Value, Worley}; +use serde::{Deserialize, Serialize}; /// 2D noise method used to generate noise map -#[derive(PartialEq, Eq)] +#[derive(PartialEq, Eq, Serialize, Deserialize)] pub enum Method { /// Open Simplex noise OpenSimplex, @@ -39,7 +40,7 @@ impl fmt::Display for Method { } /// Fractal function that should be applied on the noise values -#[derive(PartialEq, Eq)] +#[derive(PartialEq, Eq, Serialize, Deserialize)] pub enum FunctionName { /// See [`BasicMulti`](https://docs.rs/noise/latest/noise/struct.BasicMulti.html) BasicMulti, @@ -66,6 +67,7 @@ impl fmt::Display for FunctionName { } /// Fractal function configuration +#[derive(Serialize, Deserialize)] pub struct Function { /// Name of the function pub name: Option, @@ -92,6 +94,7 @@ impl Default for Function { } /// Region based on height +#[derive(Serialize, Deserialize)] pub struct Region { /// Label of the region pub label: String, @@ -112,8 +115,10 @@ impl Default for Region { } /// Gradient used to map color values +#[derive(Serialize, Deserialize)] pub struct Gradient { /// Image handle of gradient + #[serde(skip_serializing, skip_deserializing)] pub image: Handle, /// Size of gradient pub size: [u32; 2], @@ -135,6 +140,7 @@ impl Default for Gradient { } /// Noise configuration +#[derive(Serialize, Deserialize)] pub struct Noise { pub(crate) size: [u32; 2], /// Seed of the noise diff --git a/src/planet.rs b/src/planet.rs index fce5936..42cc0fc 100644 --- a/src/planet.rs +++ b/src/planet.rs @@ -32,8 +32,8 @@ use bevy::{ }, render::render_resource::{PrimitiveTopology, TextureFormat}, }; - use image::Pixel; +use serde::{Deserialize, Serialize}; use crate::{ noise::{get_noise_at_point_3d, Function, Gradient, Method, Region}, @@ -41,7 +41,7 @@ use crate::{ }; /// Component for planet configuration -#[derive(Component)] +#[derive(Component, Serialize, Deserialize)] pub struct Planet { /// Seed of the noise pub seed: u32, diff --git a/src/terrain.rs b/src/terrain.rs index 77f0446..796ee35 100644 --- a/src/terrain.rs +++ b/src/terrain.rs @@ -30,11 +30,12 @@ use bevy::{ render::render_resource::{PrimitiveTopology, TextureFormat}, }; use image::Pixel; +use serde::{Deserialize, Serialize}; use crate::{noise::generate_noise_map, noise::Noise, util::export_model}; /// Component for terrain configuration -#[derive(Component)] +#[derive(Component, Serialize, Deserialize)] pub struct Terrain { /// Noise configuration for terrain pub noise: Noise,