From 2d6d68fe3a659babbdbfd2664d3fbc6e7c77ad25 Mon Sep 17 00:00:00 2001 From: Manan Karnik Date: Thu, 5 Oct 2023 16:10:58 +0530 Subject: [PATCH] feat: offset ui --- src/main.rs | 261 ++++++++++++++++++++++++----------------------- src/noise.rs | 6 +- src/noise_map.rs | 4 +- 3 files changed, 138 insertions(+), 133 deletions(-) diff --git a/src/main.rs b/src/main.rs index cd72c64..21ecdd8 100755 --- a/src/main.rs +++ b/src/main.rs @@ -35,7 +35,7 @@ fn setup(mut commands: Commands) { method: Method::Perlin, scale: 50.0, size: [250; 2], - offset: [500, 0], + offset: [500.0, 400.0], threshold: 45.0, function: Function { name: Some(FunctionName::Fbm), @@ -93,141 +93,146 @@ fn setup(mut commands: Commands) { fn gui(mut contexts: EguiContexts, mut query: Query<&mut NoiseMap>) { let mut noise_map = query.single_mut(); - egui::Window::new("Config") - .default_width(50.0) - .show(contexts.ctx_mut(), |ui| { - ComboBox::from_label("Method") - .selected_text(noise_map.method.to_string()) - .show_ui(ui, |ui| { - ui.selectable_value( - &mut noise_map.method, - Method::OpenSimplex, - Method::OpenSimplex.to_string(), - ); - ui.selectable_value( - &mut noise_map.method, - Method::Perlin, - Method::Perlin.to_string(), - ); - ui.selectable_value( - &mut noise_map.method, - Method::PerlinSurflet, - Method::PerlinSurflet.to_string(), - ); - ui.selectable_value( - &mut noise_map.method, - Method::Simplex, - Method::Simplex.to_string(), - ); - ui.selectable_value( - &mut noise_map.method, - Method::SuperSimplex, - Method::SuperSimplex.to_string(), - ); - ui.selectable_value( - &mut noise_map.method, - Method::Value, - Method::Value.to_string(), - ); - ui.selectable_value( - &mut noise_map.method, - Method::Worley, - Method::Worley.to_string(), - ); - }); - ui.horizontal(|ui| { - ui.label("Seed"); - ui.add(DragValue::new(&mut noise_map.seed)); + egui::SidePanel::left("Config").show(contexts.ctx_mut(), |ui| { + ui.heading("Config"); + ui.separator(); + ComboBox::from_label("Method") + .selected_text(noise_map.method.to_string()) + .show_ui(ui, |ui| { + ui.selectable_value( + &mut noise_map.method, + Method::OpenSimplex, + Method::OpenSimplex.to_string(), + ); + ui.selectable_value( + &mut noise_map.method, + Method::Perlin, + Method::Perlin.to_string(), + ); + ui.selectable_value( + &mut noise_map.method, + Method::PerlinSurflet, + Method::PerlinSurflet.to_string(), + ); + ui.selectable_value( + &mut noise_map.method, + Method::Simplex, + Method::Simplex.to_string(), + ); + ui.selectable_value( + &mut noise_map.method, + Method::SuperSimplex, + Method::SuperSimplex.to_string(), + ); + ui.selectable_value( + &mut noise_map.method, + Method::Value, + Method::Value.to_string(), + ); + ui.selectable_value( + &mut noise_map.method, + Method::Worley, + Method::Worley.to_string(), + ); }); - ui.checkbox(&mut noise_map.anti_aliasing, "Anti-aliasing"); - ui.add(Slider::new(&mut noise_map.scale, 1.0..=100.0).text("Scale")); + ui.horizontal(|ui| { + ui.label("Seed"); + ui.add(DragValue::new(&mut noise_map.seed)); + }); + ui.horizontal(|ui| { + ui.label("X"); + ui.add(DragValue::new(&mut noise_map.offset[0])); + }); + ui.horizontal(|ui| { + ui.label("Y"); + ui.add(DragValue::new(&mut noise_map.offset[1])); + }); + ui.checkbox(&mut noise_map.anti_aliasing, "Anti-aliasing"); + ui.add(Slider::new(&mut noise_map.scale, 1.0..=100.0).text("Scale")); - ComboBox::from_label("Function") - .selected_text(if let Some(function_name) = &noise_map.function.name { - function_name.to_string() - } else { - "None".to_string() - }) - .show_ui(ui, |ui| { - ui.selectable_value(&mut noise_map.function.name, None, "None"); - ui.selectable_value( - &mut noise_map.function.name, - Some(FunctionName::BasicMulti), - FunctionName::BasicMulti.to_string(), - ); - ui.selectable_value( - &mut noise_map.function.name, - Some(FunctionName::Billow), - FunctionName::Billow.to_string(), - ); - ui.selectable_value( - &mut noise_map.function.name, - Some(FunctionName::Fbm), - FunctionName::Fbm.to_string(), - ); - ui.selectable_value( - &mut noise_map.function.name, - Some(FunctionName::HybridMulti), - FunctionName::HybridMulti.to_string(), - ); - ui.selectable_value( - &mut noise_map.function.name, - Some(FunctionName::RidgedMulti), - FunctionName::RidgedMulti.to_string(), - ); - }); - if let Some(function_name) = &noise_map.function.name { - ui.add(Slider::new(&mut noise_map.function.octaves, 0..=10).text("Octaves")); - ui.add(Slider::new(&mut noise_map.function.frequency, 0.0..=0.5).text("Frequency")); - ui.add( - Slider::new(&mut noise_map.function.lacunarity, 0.0..=30.0).text("Lacunarity"), + ComboBox::from_label("Function") + .selected_text(if let Some(function_name) = &noise_map.function.name { + function_name.to_string() + } else { + "None".to_string() + }) + .show_ui(ui, |ui| { + ui.selectable_value(&mut noise_map.function.name, None, "None"); + ui.selectable_value( + &mut noise_map.function.name, + Some(FunctionName::BasicMulti), + FunctionName::BasicMulti.to_string(), + ); + ui.selectable_value( + &mut noise_map.function.name, + Some(FunctionName::Billow), + FunctionName::Billow.to_string(), + ); + ui.selectable_value( + &mut noise_map.function.name, + Some(FunctionName::Fbm), + FunctionName::Fbm.to_string(), + ); + ui.selectable_value( + &mut noise_map.function.name, + Some(FunctionName::HybridMulti), + FunctionName::HybridMulti.to_string(), ); - ui.add( - Slider::new(&mut noise_map.function.persistence, 0.01..=1.0) - .text("Persistence"), + ui.selectable_value( + &mut noise_map.function.name, + Some(FunctionName::RidgedMulti), + FunctionName::RidgedMulti.to_string(), ); + }); + if let Some(function_name) = &noise_map.function.name { + ui.add(Slider::new(&mut noise_map.function.octaves, 0..=10).text("Octaves")); + ui.add(Slider::new(&mut noise_map.function.frequency, 0.0..=0.5).text("Frequency")); + ui.add(Slider::new(&mut noise_map.function.lacunarity, 0.0..=30.0).text("Lacunarity")); + ui.add( + Slider::new(&mut noise_map.function.persistence, 0.01..=1.0).text("Persistence"), + ); + } + ui.group(|ui| { + if ui.button("Add Region").clicked() { + noise_map.regions.push(Region { + label: "".to_string(), + height: 0.0, + color: [0, 0, 0], + }); } - ui.group(|ui| { - if ui.button("Add Region").clicked() { - noise_map.regions.push(Region { - label: "".to_string(), - height: 0.0, - color: [0, 0, 0], - }); - } - ui.separator(); - ui.label("Threshold"); - ui.add(Slider::new(&mut noise_map.threshold, 0.0..=100.0).text("Height")); + ui.separator(); + ui.label("Threshold"); + ui.add(Slider::new(&mut noise_map.threshold, 0.0..=100.0).text("Height")); + ui.horizontal(|ui| { + ui.color_edit_button_srgb(&mut noise_map.threshold_color); + ui.label("Color"); + }); + ui.separator(); + let regions_len = noise_map.regions.len(); + let mut regions_to_remove: Vec = Vec::with_capacity(regions_len); + for (i, region) in noise_map.regions.iter_mut().enumerate() { + ui.horizontal(|ui| { + ui.label(&format!("Region #{}", i + 1)); + if ui.button("Remove").clicked() { + regions_to_remove.push(i); + } + }); ui.horizontal(|ui| { - ui.color_edit_button_srgb(&mut noise_map.threshold_color); + ui.label("Label"); + ui.text_edit_singleline(&mut region.label); + }); + ui.add(Slider::new(&mut region.height, 0.0..=100.0).text("Height")); + ui.horizontal(|ui| { + ui.color_edit_button_srgb(&mut region.color); ui.label("Color"); }); - ui.separator(); - let regions_len = noise_map.regions.len(); - let mut regions_to_remove: Vec = Vec::with_capacity(regions_len); - for (i, region) in noise_map.regions.iter_mut().enumerate() { - ui.horizontal(|ui| { - ui.label(&format!("Region #{}", i + 1)); - if ui.button("Remove").clicked() { - regions_to_remove.push(i); - } - }); - ui.horizontal(|ui| { - ui.label("Label"); - ui.text_edit_singleline(&mut region.label); - }); - ui.add(Slider::new(&mut region.height, 0.0..=100.0).text("Height")); - ui.horizontal(|ui| { - ui.color_edit_button_srgb(&mut region.color); - ui.label("Color"); - }); - if i != regions_len - 1 { - ui.separator(); - } - } - for i in regions_to_remove { - noise_map.regions.remove(i); + if i != regions_len - 1 { + ui.separator(); } - }); + } + for i in regions_to_remove { + noise_map.regions.remove(i); + } }); + }); } diff --git a/src/noise.rs b/src/noise.rs index 1e55ada..50c629b 100755 --- a/src/noise.rs +++ b/src/noise.rs @@ -78,7 +78,7 @@ pub fn generate_noise_map(noise_map: &NoiseMap) -> Vec> { } } -fn generate_noise(size: [u32; 2], seed: u32, scale: f64, offset: [i32; 2]) -> Vec> +fn generate_noise(size: [u32; 2], seed: u32, scale: f64, offset: [f64; 2]) -> Vec> where T: Default + Seedable + NoiseFn, { @@ -91,7 +91,7 @@ fn generate_fractal_noise( size: [u32; 2], seed: u32, scale: f64, - offset: [i32; 2], + offset: [f64; 2], function: &Function, ) -> Vec> where @@ -110,7 +110,7 @@ fn generate_noise_vector( noise: impl NoiseFn, size: [u32; 2], scale: f64, - offset: [i32; 2], + offset: [f64; 2], ) -> Vec> { let mut noise_vector: Vec> = Vec::with_capacity(size[0] as usize); for i in 0..size[0] { diff --git a/src/noise_map.rs b/src/noise_map.rs index 50dd9f4..d169924 100755 --- a/src/noise_map.rs +++ b/src/noise_map.rs @@ -55,7 +55,7 @@ pub struct NoiseMap { /// Scale of the noise map pub scale: f64, /// Offset of the noise map - pub offset: [i32; 2], + pub offset: [f64; 2], /// Color of noise values in threshold pub threshold_color: [u8; 3], /// Threshold region @@ -85,7 +85,7 @@ impl Default for NoiseMap { size: [100; 2], seed: 0, scale: 50.0, - offset: [0; 2], + offset: [0.0; 2], threshold: 40.0, threshold_color: [24, 61, 135], method: Method::Perlin,