From a52d68669d0a860a3ce0aba4ee5ee98ea7743566 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Fri, 8 Nov 2024 17:44:57 +0300 Subject: [PATCH] add 'size_spread' particles parameter --- src/graphics/render/ParticlesRenderer.cpp | 4 +++- src/presets/ParticlesPreset.cpp | 2 ++ src/presets/ParticlesPreset.hpp | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/graphics/render/ParticlesRenderer.cpp b/src/graphics/render/ParticlesRenderer.cpp index 0e030dbc..c5048c55 100644 --- a/src/graphics/render/ParticlesRenderer.cpp +++ b/src/graphics/render/ParticlesRenderer.cpp @@ -89,11 +89,13 @@ void ParticlesRenderer::renderParticles(const Camera& camera, float delta) { ); light *= 0.9f + (particle.random % 100) * 0.001f; } + float scale = 1.0f + ((particle.random ^ 2628172) % 1000) * + 0.001f * preset.sizeSpread; batch->quad( particle.position, right, preset.globalUpVector ? glm::vec3(0, 1, 0) : up, - preset.size, + preset.size * scale, light, glm::vec3(1.0f), particle.region diff --git a/src/presets/ParticlesPreset.cpp b/src/presets/ParticlesPreset.cpp index 31b0cff2..181dbeb5 100644 --- a/src/presets/ParticlesPreset.cpp +++ b/src/presets/ParticlesPreset.cpp @@ -42,6 +42,7 @@ dv::value ParticlesPreset::serialize() const { root["acceleration"] = dv::to_value(acceleration); root["explosion"] = dv::to_value(explosion); root["size"] = dv::to_value(size); + root["size_spread"] = sizeSpread; root["spawn_spread"] = dv::to_value(size); root["spawn_shape"] = to_string(spawnShape); root["random_sub_uv"] = randomSubUV; @@ -67,6 +68,7 @@ void ParticlesPreset::deserialize(const dv::value& src) { if (src.has("size")) { dv::get_vec(src["size"], size); } + src.at("size_spread").get(sizeSpread); if (src.has("spawn_spread")) { dv::get_vec(src["spawn_spread"], spawnSpread); } diff --git a/src/presets/ParticlesPreset.hpp b/src/presets/ParticlesPreset.hpp index 483ce1b4..eb9f06dd 100644 --- a/src/presets/ParticlesPreset.hpp +++ b/src/presets/ParticlesPreset.hpp @@ -42,6 +42,8 @@ struct ParticlesPreset : public Serializable { glm::vec3 explosion {2.0f}; /// @brief Particle size glm::vec3 size {0.1f}; + /// @brief Particles size spread + float sizeSpread = 0.2f; /// @brief Spawn spread shape ParticleSpawnShape spawnShape = BALL; /// @brief Spawn spread