| 1 | /**************************************************************************/ |
| 2 | /* fastnoise_lite.cpp */ |
| 3 | /**************************************************************************/ |
| 4 | /* This file is part of: */ |
| 5 | /* GODOT ENGINE */ |
| 6 | /* https://godotengine.org */ |
| 7 | /**************************************************************************/ |
| 8 | /* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ |
| 9 | /* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ |
| 10 | /* */ |
| 11 | /* Permission is hereby granted, free of charge, to any person obtaining */ |
| 12 | /* a copy of this software and associated documentation files (the */ |
| 13 | /* "Software"), to deal in the Software without restriction, including */ |
| 14 | /* without limitation the rights to use, copy, modify, merge, publish, */ |
| 15 | /* distribute, sublicense, and/or sell copies of the Software, and to */ |
| 16 | /* permit persons to whom the Software is furnished to do so, subject to */ |
| 17 | /* the following conditions: */ |
| 18 | /* */ |
| 19 | /* The above copyright notice and this permission notice shall be */ |
| 20 | /* included in all copies or substantial portions of the Software. */ |
| 21 | /* */ |
| 22 | /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ |
| 23 | /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ |
| 24 | /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ |
| 25 | /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ |
| 26 | /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ |
| 27 | /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ |
| 28 | /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ |
| 29 | /**************************************************************************/ |
| 30 | |
| 31 | #include "fastnoise_lite.h" |
| 32 | |
| 33 | _FastNoiseLite::FractalType FastNoiseLite::_convert_domain_warp_fractal_type_enum(DomainWarpFractalType p_domain_warp_fractal_type) { |
| 34 | _FastNoiseLite::FractalType type; |
| 35 | switch (p_domain_warp_fractal_type) { |
| 36 | case DOMAIN_WARP_FRACTAL_NONE: |
| 37 | type = _FastNoiseLite::FractalType_None; |
| 38 | break; |
| 39 | case DOMAIN_WARP_FRACTAL_PROGRESSIVE: |
| 40 | type = _FastNoiseLite::FractalType_DomainWarpProgressive; |
| 41 | break; |
| 42 | case DOMAIN_WARP_FRACTAL_INDEPENDENT: |
| 43 | type = _FastNoiseLite::FractalType_DomainWarpIndependent; |
| 44 | break; |
| 45 | default: |
| 46 | type = _FastNoiseLite::FractalType_None; |
| 47 | } |
| 48 | return type; |
| 49 | } |
| 50 | |
| 51 | FastNoiseLite::FastNoiseLite() { |
| 52 | _noise.SetNoiseType((_FastNoiseLite::NoiseType)noise_type); |
| 53 | _noise.SetSeed(seed); |
| 54 | _noise.SetFrequency(frequency); |
| 55 | |
| 56 | _noise.SetFractalType((_FastNoiseLite::FractalType)fractal_type); |
| 57 | _noise.SetFractalOctaves(fractal_octaves); |
| 58 | _noise.SetFractalLacunarity(fractal_lacunarity); |
| 59 | _noise.SetFractalGain(fractal_gain); |
| 60 | _noise.SetFractalWeightedStrength(fractal_weighted_strength); |
| 61 | _noise.SetFractalPingPongStrength(fractal_ping_pong_strength); |
| 62 | |
| 63 | _noise.SetCellularDistanceFunction((_FastNoiseLite::CellularDistanceFunction)cellular_distance_function); |
| 64 | _noise.SetCellularReturnType((_FastNoiseLite::CellularReturnType)cellular_return_type); |
| 65 | _noise.SetCellularJitter(cellular_jitter); |
| 66 | |
| 67 | _domain_warp_noise.SetDomainWarpType((_FastNoiseLite::DomainWarpType)domain_warp_type); |
| 68 | _domain_warp_noise.SetSeed(seed); |
| 69 | _domain_warp_noise.SetDomainWarpAmp(domain_warp_amplitude); |
| 70 | _domain_warp_noise.SetFrequency(domain_warp_frequency); |
| 71 | _domain_warp_noise.SetFractalType(_convert_domain_warp_fractal_type_enum(domain_warp_fractal_type)); |
| 72 | _domain_warp_noise.SetFractalOctaves(domain_warp_fractal_octaves); |
| 73 | _domain_warp_noise.SetFractalLacunarity(domain_warp_fractal_lacunarity); |
| 74 | _domain_warp_noise.SetFractalGain(domain_warp_fractal_gain); |
| 75 | } |
| 76 | |
| 77 | FastNoiseLite::~FastNoiseLite() { |
| 78 | } |
| 79 | |
| 80 | // General settings. |
| 81 | |
| 82 | void FastNoiseLite::set_noise_type(NoiseType p_noise_type) { |
| 83 | noise_type = p_noise_type; |
| 84 | _noise.SetNoiseType((_FastNoiseLite::NoiseType)p_noise_type); |
| 85 | emit_changed(); |
| 86 | notify_property_list_changed(); |
| 87 | } |
| 88 | |
| 89 | FastNoiseLite::NoiseType FastNoiseLite::get_noise_type() const { |
| 90 | return noise_type; |
| 91 | } |
| 92 | |
| 93 | void FastNoiseLite::set_seed(int p_seed) { |
| 94 | seed = p_seed; |
| 95 | _noise.SetSeed(p_seed); |
| 96 | _domain_warp_noise.SetSeed(p_seed); |
| 97 | emit_changed(); |
| 98 | } |
| 99 | |
| 100 | int FastNoiseLite::get_seed() const { |
| 101 | return seed; |
| 102 | } |
| 103 | |
| 104 | void FastNoiseLite::set_frequency(real_t p_freq) { |
| 105 | frequency = p_freq; |
| 106 | _noise.SetFrequency(p_freq); |
| 107 | emit_changed(); |
| 108 | } |
| 109 | |
| 110 | real_t FastNoiseLite::get_frequency() const { |
| 111 | return frequency; |
| 112 | } |
| 113 | |
| 114 | void FastNoiseLite::set_offset(Vector3 p_offset) { |
| 115 | offset = p_offset; |
| 116 | emit_changed(); |
| 117 | } |
| 118 | |
| 119 | Vector3 FastNoiseLite::get_offset() const { |
| 120 | return offset; |
| 121 | } |
| 122 | |
| 123 | // Fractal. |
| 124 | |
| 125 | void FastNoiseLite::set_fractal_type(FractalType p_type) { |
| 126 | fractal_type = p_type; |
| 127 | _noise.SetFractalType((_FastNoiseLite::FractalType)p_type); |
| 128 | emit_changed(); |
| 129 | notify_property_list_changed(); |
| 130 | } |
| 131 | |
| 132 | FastNoiseLite::FractalType FastNoiseLite::get_fractal_type() const { |
| 133 | return fractal_type; |
| 134 | } |
| 135 | |
| 136 | void FastNoiseLite::set_fractal_octaves(int p_octaves) { |
| 137 | fractal_octaves = p_octaves; |
| 138 | _noise.SetFractalOctaves(p_octaves); |
| 139 | emit_changed(); |
| 140 | } |
| 141 | |
| 142 | int FastNoiseLite::get_fractal_octaves() const { |
| 143 | return fractal_octaves; |
| 144 | } |
| 145 | |
| 146 | void FastNoiseLite::set_fractal_lacunarity(real_t p_lacunarity) { |
| 147 | fractal_lacunarity = p_lacunarity; |
| 148 | _noise.SetFractalLacunarity(p_lacunarity); |
| 149 | emit_changed(); |
| 150 | } |
| 151 | |
| 152 | real_t FastNoiseLite::get_fractal_lacunarity() const { |
| 153 | return fractal_lacunarity; |
| 154 | } |
| 155 | |
| 156 | void FastNoiseLite::set_fractal_gain(real_t p_gain) { |
| 157 | fractal_gain = p_gain; |
| 158 | _noise.SetFractalGain(p_gain); |
| 159 | emit_changed(); |
| 160 | } |
| 161 | |
| 162 | real_t FastNoiseLite::get_fractal_gain() const { |
| 163 | return fractal_gain; |
| 164 | } |
| 165 | |
| 166 | void FastNoiseLite::set_fractal_weighted_strength(real_t p_weighted_strength) { |
| 167 | fractal_weighted_strength = p_weighted_strength; |
| 168 | _noise.SetFractalWeightedStrength(p_weighted_strength); |
| 169 | emit_changed(); |
| 170 | } |
| 171 | real_t FastNoiseLite::get_fractal_weighted_strength() const { |
| 172 | return fractal_weighted_strength; |
| 173 | } |
| 174 | |
| 175 | void FastNoiseLite::set_fractal_ping_pong_strength(real_t p_ping_pong_strength) { |
| 176 | fractal_ping_pong_strength = p_ping_pong_strength; |
| 177 | _noise.SetFractalPingPongStrength(p_ping_pong_strength); |
| 178 | emit_changed(); |
| 179 | } |
| 180 | real_t FastNoiseLite::get_fractal_ping_pong_strength() const { |
| 181 | return fractal_ping_pong_strength; |
| 182 | } |
| 183 | |
| 184 | // Cellular. |
| 185 | |
| 186 | void FastNoiseLite::set_cellular_distance_function(CellularDistanceFunction p_func) { |
| 187 | cellular_distance_function = p_func; |
| 188 | _noise.SetCellularDistanceFunction((_FastNoiseLite::CellularDistanceFunction)p_func); |
| 189 | emit_changed(); |
| 190 | } |
| 191 | |
| 192 | FastNoiseLite::CellularDistanceFunction FastNoiseLite::get_cellular_distance_function() const { |
| 193 | return cellular_distance_function; |
| 194 | } |
| 195 | |
| 196 | void FastNoiseLite::set_cellular_jitter(real_t p_jitter) { |
| 197 | cellular_jitter = p_jitter; |
| 198 | _noise.SetCellularJitter(p_jitter); |
| 199 | emit_changed(); |
| 200 | } |
| 201 | |
| 202 | real_t FastNoiseLite::get_cellular_jitter() const { |
| 203 | return cellular_jitter; |
| 204 | } |
| 205 | |
| 206 | void FastNoiseLite::set_cellular_return_type(CellularReturnType p_ret) { |
| 207 | cellular_return_type = p_ret; |
| 208 | _noise.SetCellularReturnType((_FastNoiseLite::CellularReturnType)p_ret); |
| 209 | emit_changed(); |
| 210 | } |
| 211 | |
| 212 | FastNoiseLite::CellularReturnType FastNoiseLite::get_cellular_return_type() const { |
| 213 | return cellular_return_type; |
| 214 | } |
| 215 | |
| 216 | // Domain warp specific. |
| 217 | |
| 218 | void FastNoiseLite::set_domain_warp_enabled(bool p_enabled) { |
| 219 | if (domain_warp_enabled != p_enabled) { |
| 220 | domain_warp_enabled = p_enabled; |
| 221 | emit_changed(); |
| 222 | notify_property_list_changed(); |
| 223 | } |
| 224 | } |
| 225 | |
| 226 | bool FastNoiseLite::is_domain_warp_enabled() const { |
| 227 | return domain_warp_enabled; |
| 228 | } |
| 229 | |
| 230 | void FastNoiseLite::set_domain_warp_type(DomainWarpType p_domain_warp_type) { |
| 231 | domain_warp_type = p_domain_warp_type; |
| 232 | _domain_warp_noise.SetDomainWarpType((_FastNoiseLite::DomainWarpType)p_domain_warp_type); |
| 233 | emit_changed(); |
| 234 | } |
| 235 | |
| 236 | FastNoiseLite::DomainWarpType FastNoiseLite::get_domain_warp_type() const { |
| 237 | return domain_warp_type; |
| 238 | } |
| 239 | |
| 240 | void FastNoiseLite::set_domain_warp_amplitude(real_t p_amplitude) { |
| 241 | domain_warp_amplitude = p_amplitude; |
| 242 | _domain_warp_noise.SetDomainWarpAmp(p_amplitude); |
| 243 | emit_changed(); |
| 244 | } |
| 245 | real_t FastNoiseLite::get_domain_warp_amplitude() const { |
| 246 | return domain_warp_amplitude; |
| 247 | } |
| 248 | |
| 249 | void FastNoiseLite::set_domain_warp_frequency(real_t p_frequency) { |
| 250 | domain_warp_frequency = p_frequency; |
| 251 | _domain_warp_noise.SetFrequency(p_frequency); |
| 252 | emit_changed(); |
| 253 | } |
| 254 | |
| 255 | real_t FastNoiseLite::get_domain_warp_frequency() const { |
| 256 | return domain_warp_frequency; |
| 257 | } |
| 258 | |
| 259 | void FastNoiseLite::set_domain_warp_fractal_type(DomainWarpFractalType p_domain_warp_fractal_type) { |
| 260 | domain_warp_fractal_type = p_domain_warp_fractal_type; |
| 261 | |
| 262 | _domain_warp_noise.SetFractalType(_convert_domain_warp_fractal_type_enum(p_domain_warp_fractal_type)); |
| 263 | emit_changed(); |
| 264 | } |
| 265 | |
| 266 | FastNoiseLite::DomainWarpFractalType FastNoiseLite::get_domain_warp_fractal_type() const { |
| 267 | return domain_warp_fractal_type; |
| 268 | } |
| 269 | |
| 270 | void FastNoiseLite::set_domain_warp_fractal_octaves(int p_octaves) { |
| 271 | domain_warp_fractal_octaves = p_octaves; |
| 272 | _domain_warp_noise.SetFractalOctaves(p_octaves); |
| 273 | emit_changed(); |
| 274 | } |
| 275 | |
| 276 | int FastNoiseLite::get_domain_warp_fractal_octaves() const { |
| 277 | return domain_warp_fractal_octaves; |
| 278 | } |
| 279 | |
| 280 | void FastNoiseLite::set_domain_warp_fractal_lacunarity(real_t p_lacunarity) { |
| 281 | domain_warp_fractal_lacunarity = p_lacunarity; |
| 282 | _domain_warp_noise.SetFractalLacunarity(p_lacunarity); |
| 283 | emit_changed(); |
| 284 | } |
| 285 | |
| 286 | real_t FastNoiseLite::get_domain_warp_fractal_lacunarity() const { |
| 287 | return domain_warp_fractal_lacunarity; |
| 288 | } |
| 289 | |
| 290 | void FastNoiseLite::set_domain_warp_fractal_gain(real_t p_gain) { |
| 291 | domain_warp_fractal_gain = p_gain; |
| 292 | _domain_warp_noise.SetFractalGain(p_gain); |
| 293 | emit_changed(); |
| 294 | } |
| 295 | |
| 296 | real_t FastNoiseLite::get_domain_warp_fractal_gain() const { |
| 297 | return domain_warp_fractal_gain; |
| 298 | } |
| 299 | |
| 300 | // Noise interface functions. |
| 301 | |
| 302 | real_t FastNoiseLite::get_noise_1d(real_t p_x) const { |
| 303 | p_x += offset.x; |
| 304 | if (domain_warp_enabled) { |
| 305 | // Needed since DomainWarp expects a reference. |
| 306 | real_t y_dummy = 0; |
| 307 | _domain_warp_noise.DomainWarp(p_x, y_dummy); |
| 308 | } |
| 309 | return get_noise_2d(p_x, 0.0); |
| 310 | } |
| 311 | |
| 312 | real_t FastNoiseLite::get_noise_2dv(Vector2 p_v) const { |
| 313 | return get_noise_2d(p_v.x, p_v.y); |
| 314 | } |
| 315 | |
| 316 | real_t FastNoiseLite::get_noise_2d(real_t p_x, real_t p_y) const { |
| 317 | p_x += offset.x; |
| 318 | p_y += offset.y; |
| 319 | if (domain_warp_enabled) { |
| 320 | _domain_warp_noise.DomainWarp(p_x, p_y); |
| 321 | } |
| 322 | return _noise.GetNoise(p_x, p_y); |
| 323 | } |
| 324 | |
| 325 | real_t FastNoiseLite::get_noise_3dv(Vector3 p_v) const { |
| 326 | return get_noise_3d(p_v.x, p_v.y, p_v.z); |
| 327 | } |
| 328 | |
| 329 | real_t FastNoiseLite::get_noise_3d(real_t p_x, real_t p_y, real_t p_z) const { |
| 330 | p_x += offset.x; |
| 331 | p_y += offset.y; |
| 332 | p_z += offset.z; |
| 333 | if (domain_warp_enabled) { |
| 334 | _domain_warp_noise.DomainWarp(p_x, p_y, p_z); |
| 335 | } |
| 336 | return _noise.GetNoise(p_x, p_y, p_z); |
| 337 | } |
| 338 | |
| 339 | void FastNoiseLite::_changed() { |
| 340 | emit_changed(); |
| 341 | } |
| 342 | |
| 343 | void FastNoiseLite::_bind_methods() { |
| 344 | // General settings. |
| 345 | |
| 346 | ClassDB::bind_method(D_METHOD("set_noise_type" , "type" ), &FastNoiseLite::set_noise_type); |
| 347 | ClassDB::bind_method(D_METHOD("get_noise_type" ), &FastNoiseLite::get_noise_type); |
| 348 | |
| 349 | ClassDB::bind_method(D_METHOD("set_seed" , "seed" ), &FastNoiseLite::set_seed); |
| 350 | ClassDB::bind_method(D_METHOD("get_seed" ), &FastNoiseLite::get_seed); |
| 351 | |
| 352 | ClassDB::bind_method(D_METHOD("set_frequency" , "freq" ), &FastNoiseLite::set_frequency); |
| 353 | ClassDB::bind_method(D_METHOD("get_frequency" ), &FastNoiseLite::get_frequency); |
| 354 | |
| 355 | ClassDB::bind_method(D_METHOD("set_offset" , "offset" ), &FastNoiseLite::set_offset); |
| 356 | ClassDB::bind_method(D_METHOD("get_offset" ), &FastNoiseLite::get_offset); |
| 357 | |
| 358 | // Fractal. |
| 359 | |
| 360 | ClassDB::bind_method(D_METHOD("set_fractal_type" , "type" ), &FastNoiseLite::set_fractal_type); |
| 361 | ClassDB::bind_method(D_METHOD("get_fractal_type" ), &FastNoiseLite::get_fractal_type); |
| 362 | |
| 363 | ClassDB::bind_method(D_METHOD("set_fractal_octaves" , "octave_count" ), &FastNoiseLite::set_fractal_octaves); |
| 364 | ClassDB::bind_method(D_METHOD("get_fractal_octaves" ), &FastNoiseLite::get_fractal_octaves); |
| 365 | |
| 366 | ClassDB::bind_method(D_METHOD("set_fractal_lacunarity" , "lacunarity" ), &FastNoiseLite::set_fractal_lacunarity); |
| 367 | ClassDB::bind_method(D_METHOD("get_fractal_lacunarity" ), &FastNoiseLite::get_fractal_lacunarity); |
| 368 | |
| 369 | ClassDB::bind_method(D_METHOD("set_fractal_gain" , "gain" ), &FastNoiseLite::set_fractal_gain); |
| 370 | ClassDB::bind_method(D_METHOD("get_fractal_gain" ), &FastNoiseLite::get_fractal_gain); |
| 371 | |
| 372 | ClassDB::bind_method(D_METHOD("set_fractal_weighted_strength" , "weighted_strength" ), &FastNoiseLite::set_fractal_weighted_strength); |
| 373 | ClassDB::bind_method(D_METHOD("get_fractal_weighted_strength" ), &FastNoiseLite::get_fractal_weighted_strength); |
| 374 | |
| 375 | ClassDB::bind_method(D_METHOD("set_fractal_ping_pong_strength" , "ping_pong_strength" ), &FastNoiseLite::set_fractal_ping_pong_strength); |
| 376 | ClassDB::bind_method(D_METHOD("get_fractal_ping_pong_strength" ), &FastNoiseLite::get_fractal_ping_pong_strength); |
| 377 | |
| 378 | // Cellular. |
| 379 | |
| 380 | ClassDB::bind_method(D_METHOD("set_cellular_distance_function" , "func" ), &FastNoiseLite::set_cellular_distance_function); |
| 381 | ClassDB::bind_method(D_METHOD("get_cellular_distance_function" ), &FastNoiseLite::get_cellular_distance_function); |
| 382 | |
| 383 | ClassDB::bind_method(D_METHOD("set_cellular_jitter" , "jitter" ), &FastNoiseLite::set_cellular_jitter); |
| 384 | ClassDB::bind_method(D_METHOD("get_cellular_jitter" ), &FastNoiseLite::get_cellular_jitter); |
| 385 | |
| 386 | ClassDB::bind_method(D_METHOD("set_cellular_return_type" , "ret" ), &FastNoiseLite::set_cellular_return_type); |
| 387 | ClassDB::bind_method(D_METHOD("get_cellular_return_type" ), &FastNoiseLite::get_cellular_return_type); |
| 388 | |
| 389 | // Domain warp. |
| 390 | |
| 391 | ClassDB::bind_method(D_METHOD("set_domain_warp_enabled" , "domain_warp_enabled" ), &FastNoiseLite::set_domain_warp_enabled); |
| 392 | ClassDB::bind_method(D_METHOD("is_domain_warp_enabled" ), &FastNoiseLite::is_domain_warp_enabled); |
| 393 | |
| 394 | ClassDB::bind_method(D_METHOD("set_domain_warp_type" , "domain_warp_type" ), &FastNoiseLite::set_domain_warp_type); |
| 395 | ClassDB::bind_method(D_METHOD("get_domain_warp_type" ), &FastNoiseLite::get_domain_warp_type); |
| 396 | |
| 397 | ClassDB::bind_method(D_METHOD("set_domain_warp_amplitude" , "domain_warp_amplitude" ), &FastNoiseLite::set_domain_warp_amplitude); |
| 398 | ClassDB::bind_method(D_METHOD("get_domain_warp_amplitude" ), &FastNoiseLite::get_domain_warp_amplitude); |
| 399 | |
| 400 | ClassDB::bind_method(D_METHOD("set_domain_warp_frequency" , "domain_warp_frequency" ), &FastNoiseLite::set_domain_warp_frequency); |
| 401 | ClassDB::bind_method(D_METHOD("get_domain_warp_frequency" ), &FastNoiseLite::get_domain_warp_frequency); |
| 402 | |
| 403 | ClassDB::bind_method(D_METHOD("set_domain_warp_fractal_type" , "domain_warp_fractal_type" ), &FastNoiseLite::set_domain_warp_fractal_type); |
| 404 | ClassDB::bind_method(D_METHOD("get_domain_warp_fractal_type" ), &FastNoiseLite::get_domain_warp_fractal_type); |
| 405 | |
| 406 | ClassDB::bind_method(D_METHOD("set_domain_warp_fractal_octaves" , "domain_warp_octave_count" ), &FastNoiseLite::set_domain_warp_fractal_octaves); |
| 407 | ClassDB::bind_method(D_METHOD("get_domain_warp_fractal_octaves" ), &FastNoiseLite::get_domain_warp_fractal_octaves); |
| 408 | |
| 409 | ClassDB::bind_method(D_METHOD("set_domain_warp_fractal_lacunarity" , "domain_warp_lacunarity" ), &FastNoiseLite::set_domain_warp_fractal_lacunarity); |
| 410 | ClassDB::bind_method(D_METHOD("get_domain_warp_fractal_lacunarity" ), &FastNoiseLite::get_domain_warp_fractal_lacunarity); |
| 411 | |
| 412 | ClassDB::bind_method(D_METHOD("set_domain_warp_fractal_gain" , "domain_warp_gain" ), &FastNoiseLite::set_domain_warp_fractal_gain); |
| 413 | ClassDB::bind_method(D_METHOD("get_domain_warp_fractal_gain" ), &FastNoiseLite::get_domain_warp_fractal_gain); |
| 414 | |
| 415 | ClassDB::bind_method(D_METHOD("_changed" ), &FastNoiseLite::_changed); |
| 416 | |
| 417 | ADD_PROPERTY(PropertyInfo(Variant::INT, "noise_type" , PROPERTY_HINT_ENUM, "Simplex,Simplex Smooth,Cellular,Perlin,Value Cubic,Value" ), "set_noise_type" , "get_noise_type" ); |
| 418 | ADD_PROPERTY(PropertyInfo(Variant::INT, "seed" ), "set_seed" , "get_seed" ); |
| 419 | ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "frequency" , PROPERTY_HINT_RANGE, ".0001,1,.0001" ), "set_frequency" , "get_frequency" ); |
| 420 | ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "offset" , PROPERTY_HINT_RANGE, "-999999999,999999999,0.01" ), "set_offset" , "get_offset" ); |
| 421 | |
| 422 | ADD_GROUP("Fractal" , "fractal_" ); |
| 423 | ADD_PROPERTY(PropertyInfo(Variant::INT, "fractal_type" , PROPERTY_HINT_ENUM, "None,FBM,Ridged,Ping-Pong" ), "set_fractal_type" , "get_fractal_type" ); |
| 424 | ADD_PROPERTY(PropertyInfo(Variant::INT, "fractal_octaves" , PROPERTY_HINT_RANGE, "1,10,1" ), "set_fractal_octaves" , "get_fractal_octaves" ); |
| 425 | ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "fractal_lacunarity" ), "set_fractal_lacunarity" , "get_fractal_lacunarity" ); |
| 426 | ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "fractal_gain" ), "set_fractal_gain" , "get_fractal_gain" ); |
| 427 | ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "fractal_weighted_strength" , PROPERTY_HINT_RANGE, "0,1,0.01" ), "set_fractal_weighted_strength" , "get_fractal_weighted_strength" ); |
| 428 | ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "fractal_ping_pong_strength" ), "set_fractal_ping_pong_strength" , "get_fractal_ping_pong_strength" ); |
| 429 | |
| 430 | ADD_GROUP("Cellular" , "cellular_" ); |
| 431 | ADD_PROPERTY(PropertyInfo(Variant::INT, "cellular_distance_function" , PROPERTY_HINT_ENUM, "Euclidean,Euclidean Squared,Manhattan,Hybrid" ), "set_cellular_distance_function" , "get_cellular_distance_function" ); |
| 432 | ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "cellular_jitter" ), "set_cellular_jitter" , "get_cellular_jitter" ); |
| 433 | ADD_PROPERTY(PropertyInfo(Variant::INT, "cellular_return_type" , PROPERTY_HINT_ENUM, "Cell Value,Distance,Distance2,Distance2Add,Distance2Sub,Distance2Mul,Distance2Div" ), "set_cellular_return_type" , "get_cellular_return_type" ); |
| 434 | |
| 435 | ADD_GROUP("Domain Warp" , "domain_warp_" ); |
| 436 | ADD_PROPERTY(PropertyInfo(Variant::BOOL, "domain_warp_enabled" ), "set_domain_warp_enabled" , "is_domain_warp_enabled" ); |
| 437 | ADD_PROPERTY(PropertyInfo(Variant::INT, "domain_warp_type" , PROPERTY_HINT_ENUM, "Simplex,Simplex Reduced,Basic Grid" ), "set_domain_warp_type" , "get_domain_warp_type" ); |
| 438 | ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "domain_warp_amplitude" ), "set_domain_warp_amplitude" , "get_domain_warp_amplitude" ); |
| 439 | ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "domain_warp_frequency" ), "set_domain_warp_frequency" , "get_domain_warp_frequency" ); |
| 440 | ADD_PROPERTY(PropertyInfo(Variant::INT, "domain_warp_fractal_type" , PROPERTY_HINT_ENUM, "None,Progressive,Independent" ), "set_domain_warp_fractal_type" , "get_domain_warp_fractal_type" ); |
| 441 | ADD_PROPERTY(PropertyInfo(Variant::INT, "domain_warp_fractal_octaves" , PROPERTY_HINT_RANGE, "1,10,1" ), "set_domain_warp_fractal_octaves" , "get_domain_warp_fractal_octaves" ); |
| 442 | ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "domain_warp_fractal_lacunarity" ), "set_domain_warp_fractal_lacunarity" , "get_domain_warp_fractal_lacunarity" ); |
| 443 | ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "domain_warp_fractal_gain" ), "set_domain_warp_fractal_gain" , "get_domain_warp_fractal_gain" ); |
| 444 | |
| 445 | BIND_ENUM_CONSTANT(TYPE_VALUE); |
| 446 | BIND_ENUM_CONSTANT(TYPE_VALUE_CUBIC); |
| 447 | BIND_ENUM_CONSTANT(TYPE_PERLIN); |
| 448 | BIND_ENUM_CONSTANT(TYPE_CELLULAR); |
| 449 | BIND_ENUM_CONSTANT(TYPE_SIMPLEX); |
| 450 | BIND_ENUM_CONSTANT(TYPE_SIMPLEX_SMOOTH); |
| 451 | |
| 452 | BIND_ENUM_CONSTANT(FRACTAL_NONE); |
| 453 | BIND_ENUM_CONSTANT(FRACTAL_FBM); |
| 454 | BIND_ENUM_CONSTANT(FRACTAL_RIDGED); |
| 455 | BIND_ENUM_CONSTANT(FRACTAL_PING_PONG); |
| 456 | |
| 457 | BIND_ENUM_CONSTANT(DISTANCE_EUCLIDEAN); |
| 458 | BIND_ENUM_CONSTANT(DISTANCE_EUCLIDEAN_SQUARED); |
| 459 | BIND_ENUM_CONSTANT(DISTANCE_MANHATTAN); |
| 460 | BIND_ENUM_CONSTANT(DISTANCE_HYBRID); |
| 461 | |
| 462 | BIND_ENUM_CONSTANT(RETURN_CELL_VALUE); |
| 463 | BIND_ENUM_CONSTANT(RETURN_DISTANCE); |
| 464 | BIND_ENUM_CONSTANT(RETURN_DISTANCE2); |
| 465 | BIND_ENUM_CONSTANT(RETURN_DISTANCE2_ADD); |
| 466 | BIND_ENUM_CONSTANT(RETURN_DISTANCE2_SUB); |
| 467 | BIND_ENUM_CONSTANT(RETURN_DISTANCE2_MUL); |
| 468 | BIND_ENUM_CONSTANT(RETURN_DISTANCE2_DIV); |
| 469 | |
| 470 | BIND_ENUM_CONSTANT(DOMAIN_WARP_SIMPLEX); |
| 471 | BIND_ENUM_CONSTANT(DOMAIN_WARP_SIMPLEX_REDUCED); |
| 472 | BIND_ENUM_CONSTANT(DOMAIN_WARP_BASIC_GRID); |
| 473 | |
| 474 | BIND_ENUM_CONSTANT(DOMAIN_WARP_FRACTAL_NONE); |
| 475 | BIND_ENUM_CONSTANT(DOMAIN_WARP_FRACTAL_PROGRESSIVE); |
| 476 | BIND_ENUM_CONSTANT(DOMAIN_WARP_FRACTAL_INDEPENDENT); |
| 477 | } |
| 478 | |
| 479 | void FastNoiseLite::_validate_property(PropertyInfo &p_property) const { |
| 480 | if (p_property.name.begins_with("cellular" ) && get_noise_type() != TYPE_CELLULAR) { |
| 481 | p_property.usage = PROPERTY_USAGE_NO_EDITOR; |
| 482 | return; |
| 483 | } |
| 484 | |
| 485 | if (p_property.name != "fractal_type" && p_property.name.begins_with("fractal" ) && get_fractal_type() == FRACTAL_NONE) { |
| 486 | p_property.usage = PROPERTY_USAGE_NO_EDITOR; |
| 487 | return; |
| 488 | } |
| 489 | |
| 490 | if (p_property.name == "fractal_ping_pong_strength" && get_fractal_type() != FRACTAL_PING_PONG) { |
| 491 | p_property.usage = PROPERTY_USAGE_NO_EDITOR; |
| 492 | return; |
| 493 | } |
| 494 | |
| 495 | if (p_property.name != "domain_warp_enabled" && p_property.name.begins_with("domain_warp" ) && !domain_warp_enabled) { |
| 496 | p_property.usage = PROPERTY_USAGE_NO_EDITOR; |
| 497 | return; |
| 498 | } |
| 499 | } |
| 500 | |