mirror of
https://github.com/zhenyan121/Cubed.git
synced 2026-06-21 18:17:03 +08:00
feat: add cave (#8)
* feat: add cave generate * fix: incorrect blocks on cave surface * fix: non-deterministic cave generator * refactor: move all chunk generation to dedicated generation thread * refactor: remove inital cave * feat: add cave parameter adjustment * refactor: adjust cave probability
This commit is contained in:
@@ -34,6 +34,17 @@ constexpr int AMPLITUDE_MAX = 80;
|
||||
constexpr float TREE_FREQ_MIM = 0.001f;
|
||||
constexpr float TREE_FREQ_MAX = 0.3f;
|
||||
|
||||
constexpr float CAVE_PROBABILITY_MIN = 0.005f;
|
||||
constexpr float CAVE_PROBABILITY_MAX = 0.1f;
|
||||
constexpr float RADIUS_XZ_MIN = 1.0f;
|
||||
constexpr float RADIUS_XZ_MAX = 50.0f;
|
||||
constexpr float RADIUS_Y_MIN = 1.0f;
|
||||
constexpr float RADIUS_Y_MAX = 50.0f;
|
||||
constexpr float DELTA_ANGLE_MIN = -30.0f;
|
||||
constexpr float DELTA_ANGLE_MAX = 30.0f;
|
||||
constexpr int CAVE_STEP_MIN = 1;
|
||||
constexpr int CAVE_STEP_MAX = 1000;
|
||||
|
||||
static int filter_unsigned(ImGuiInputTextCallbackData* data) {
|
||||
if (data->EventFlag == ImGuiInputTextFlags_CallbackCharFilter) {
|
||||
char c = data->EventChar;
|
||||
@@ -108,7 +119,7 @@ void DevPanel::show_about_table_bar() {
|
||||
}
|
||||
|
||||
void DevPanel::show_biome_table_bar() {
|
||||
ImGui::Text("Biome");
|
||||
|
||||
if (ImGui::BeginTabBar("Biome")) {
|
||||
if (ImGui::BeginTabItem("Plain")) {
|
||||
ImGui::SliderFloat("MinTemp##plain", &plain_params().temp.first,
|
||||
@@ -253,6 +264,30 @@ void DevPanel::show_biome_table_bar() {
|
||||
}
|
||||
}
|
||||
|
||||
void DevPanel::show_cave_table_bar() {
|
||||
auto& cave_carcer = m_app.world().cave_carcer();
|
||||
|
||||
ImGui::Text("Total Cave Sum %d", cave_carcer.cave_sum());
|
||||
ImGui::SliderFloat("Cave Probability", &cave_carcer.cave_probability(),
|
||||
CAVE_PROBABILITY_MIN, CAVE_PROBABILITY_MAX);
|
||||
ImGui::SliderFloat("Radius XZ Min", &CavePath::radius_xz_min(),
|
||||
RADIUS_XZ_MIN, RADIUS_XZ_MAX);
|
||||
ImGui::SliderFloat("Radius XZ Max", &CavePath::radius_xz_max(),
|
||||
RADIUS_XZ_MIN, RADIUS_XZ_MAX);
|
||||
ImGui::SliderFloat("Radius Y Min", &CavePath::radius_y_min(), RADIUS_Y_MIN,
|
||||
RADIUS_Y_MAX);
|
||||
ImGui::SliderFloat("Radius Y Max", &CavePath::radius_y_max(), RADIUS_Y_MIN,
|
||||
RADIUS_Y_MAX);
|
||||
ImGui::SliderFloat("Delta Angle Min", &CavePath::delta_angle_min(),
|
||||
DELTA_ANGLE_MIN, 0.0f);
|
||||
ImGui::SliderFloat("Delta Angle Max", &CavePath::delta_angle_max(), 0.0f,
|
||||
DELTA_ANGLE_MAX);
|
||||
ImGui::SliderInt("Step Min", &CavePath::step_min(), CAVE_STEP_MIN,
|
||||
CAVE_STEP_MAX);
|
||||
ImGui::SliderInt("Step Max", &CavePath::step_max(), CAVE_STEP_MIN,
|
||||
CAVE_STEP_MAX);
|
||||
}
|
||||
|
||||
void DevPanel::show_settings_tab_item() {
|
||||
if (ImGui::BeginTabItem("settings")) {
|
||||
if (ImGui::SliderFloat("FOV", &m_config.fov, 1.0f, 140.0f)) {
|
||||
@@ -354,7 +389,8 @@ void DevPanel::show_settings_tab_item() {
|
||||
void DevPanel::show_world_tab_item() {
|
||||
if (ImGui::BeginTabItem("world")) {
|
||||
if (m_text_editing.perlin_seed) {
|
||||
if (ImGui::InputText("Perlin Noise Seed", perlin_noise_input_buffer,
|
||||
if (ImGui::InputText("ChunkGenerator Seed",
|
||||
perlin_noise_input_buffer,
|
||||
sizeof(perlin_noise_input_buffer),
|
||||
ImGuiInputTextFlags_CallbackCharFilter |
|
||||
ImGuiInputTextFlags_EnterReturnsTrue,
|
||||
@@ -397,7 +433,17 @@ void DevPanel::show_world_tab_item() {
|
||||
}
|
||||
ImGui::Text("Chunk Build Progress\n");
|
||||
ImGui::ProgressBar(m_app.world().chunk_gen_fraction());
|
||||
show_biome_table_bar();
|
||||
if (ImGui::BeginTabBar("World Settings")) {
|
||||
if (ImGui::BeginTabItem("Cave")) {
|
||||
show_cave_table_bar();
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
if (ImGui::BeginTabItem("Biome")) {
|
||||
show_biome_table_bar();
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
ImGui::EndTabBar();
|
||||
}
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user