| … | … | @@ -21,6 +21,9 @@ |
| 21 | 21 | namespace godot { |
| 22 | 22 | |
| 23 | 23 | void DCTerrainGeneratorProcNodes::_bind_methods() { |
| 24 | ClassDB::bind_method(D_METHOD("set_erosion_enabled", "value"), &DCTerrainGeneratorProcNodes::set_erosion_enabled); |
| 25 | ClassDB::bind_method(D_METHOD("get_erosion_enabled"), &DCTerrainGeneratorProcNodes::get_erosion_enabled); |
| 26 | ADD_PROPERTY(PropertyInfo(Variant::BOOL, "erosion_enabled"), "set_erosion_enabled", "get_erosion_enabled"); |
| 24 | 27 | ClassDB::bind_method(D_METHOD("set_mountain_scale", "value"), &DCTerrainGeneratorProcNodes::set_mountain_scale); |
| 25 | 28 | ClassDB::bind_method(D_METHOD("get_mountain_scale"), &DCTerrainGeneratorProcNodes::get_mountain_scale); |
| 26 | 29 | ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "mountain_scale"), "set_mountain_scale", "get_mountain_scale"); |
| … | … | @@ -380,6 +383,13 @@ void DCTerrainGeneratorProcNodes::set_lookdev_wrapper(bool p_val) { |
| 380 | 383 | emit_changed(); |
| 381 | 384 | } |
| 382 | 385 | |
| 386 | void DCTerrainGeneratorProcNodes::set_erosion_enabled(bool p_val) { |
| 387 | if (erosion_enabled_ == p_val) return; |
| 388 | erosion_enabled_ = p_val; |
| 389 | _recompile_glsl(); |
| 390 | emit_changed(); |
| 391 | } |
| 392 | |
| 383 | 393 | void DCTerrainGeneratorProcNodes::set_terrain_height(float p_height) { |
| 384 | 394 | if (terrain_height_ == p_height) return; |
| 385 | 395 | terrain_height_ = p_height; |
| … | … | @@ -659,7 +669,14 @@ void DCTerrainGeneratorProcNodes::_recompile_glsl() { |
| 659 | 669 | |
| 660 | 670 | // Cross-extension call with octave clamping enabled. |
| 661 | 671 | // proc-nodes will emit min(N, pn_max_octaves) for all integer (octave) params. |
| 662 | | Variant glsl_var = graph_->call("compile_to_glsl_function", "proc_density", true); |
| 672 | // SKIP THE EROSION NODE when the toggle is off. Not in the graph's emission |
| 673 | // means not in the shader at all: no filter, and no noise library either, |
| 674 | // because nothing left in a heightfield graph mentions noise. |
| 675 | PackedStringArray skip; |
| 676 | if (!erosion_enabled_) { |
| 677 | skip.push_back("ErosionNoise"); |
| 678 | } |
| 679 | Variant glsl_var = graph_->call("compile_to_glsl_function", "proc_density", true, skip); |
| 663 | 680 | if (glsl_var.get_type() != Variant::STRING) { |
| 664 | 681 | UtilityFunctions::push_warning("DCTerrainGeneratorProcNodes: compile_to_glsl_function returned non-string"); |
| 665 | 682 | return; |