Skip to content

Commit

Permalink
feat: offset ui
Browse files Browse the repository at this point in the history
  • Loading branch information
manankarnik committed Oct 5, 2023
1 parent b251d9f commit 2d6d68f
Show file tree
Hide file tree
Showing 3 changed files with 138 additions and 133 deletions.
261 changes: 133 additions & 128 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down Expand Up @@ -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<usize> = 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<usize> = 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);
}
});
});
}
6 changes: 3 additions & 3 deletions src/noise.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ pub fn generate_noise_map(noise_map: &NoiseMap) -> Vec<Vec<f64>> {
}
}

fn generate_noise<T>(size: [u32; 2], seed: u32, scale: f64, offset: [i32; 2]) -> Vec<Vec<f64>>
fn generate_noise<T>(size: [u32; 2], seed: u32, scale: f64, offset: [f64; 2]) -> Vec<Vec<f64>>
where
T: Default + Seedable + NoiseFn<f64, 2>,
{
Expand All @@ -91,7 +91,7 @@ fn generate_fractal_noise<T>(
size: [u32; 2],
seed: u32,
scale: f64,
offset: [i32; 2],
offset: [f64; 2],
function: &Function,
) -> Vec<Vec<f64>>
where
Expand All @@ -110,7 +110,7 @@ fn generate_noise_vector(
noise: impl NoiseFn<f64, 2>,
size: [u32; 2],
scale: f64,
offset: [i32; 2],
offset: [f64; 2],
) -> Vec<Vec<f64>> {
let mut noise_vector: Vec<Vec<f64>> = Vec::with_capacity(size[0] as usize);
for i in 0..size[0] {
Expand Down
4 changes: 2 additions & 2 deletions src/noise_map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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,
Expand Down

0 comments on commit 2d6d68f

Please sign in to comment.