#include "voxel_generator_noise_2d.h" VoxelGeneratorNoise2D::VoxelGeneratorNoise2D() { } void VoxelGeneratorNoise2D::set_noise(Ref noise) { _noise = noise; } Ref VoxelGeneratorNoise2D::get_noise() const { return _noise; } void VoxelGeneratorNoise2D::set_curve(Ref curve) { _curve = curve; } Ref VoxelGeneratorNoise2D::get_curve() const { return _curve; } void VoxelGeneratorNoise2D::generate_block(VoxelBlockRequest &input) { ERR_FAIL_COND(_noise.is_null()); VoxelBuffer &out_buffer = **input.voxel_buffer; OpenSimplexNoise &noise = **_noise; if (_curve.is_null()) { VoxelGeneratorHeightmap::generate(out_buffer, [&noise](int x, int z) { return 0.5 + 0.5 * noise.get_noise_2d(x, z); }, input.origin_in_voxels, input.lod); } else { Curve &curve = **_curve; VoxelGeneratorHeightmap::generate(out_buffer, [&noise, &curve](int x, int z) { return curve.interpolate_baked(0.5 + 0.5 * noise.get_noise_2d(x, z)); }, input.origin_in_voxels, input.lod); } out_buffer.compress_uniform_channels(); } void VoxelGeneratorNoise2D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_noise", "noise"), &VoxelGeneratorNoise2D::set_noise); ClassDB::bind_method(D_METHOD("get_noise"), &VoxelGeneratorNoise2D::get_noise); ClassDB::bind_method(D_METHOD("set_curve", "curve"), &VoxelGeneratorNoise2D::set_curve); ClassDB::bind_method(D_METHOD("get_curve"), &VoxelGeneratorNoise2D::get_curve); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "noise", PROPERTY_HINT_RESOURCE_TYPE, "OpenSimplexNoise"), "set_noise", "get_noise"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "curve", PROPERTY_HINT_RESOURCE_TYPE, "Curve"), "set_curve", "get_curve"); }