From 082a87db4e666636b1edcac1b8f45d2bcaf50023 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sun, 3 Nov 2024 02:26:11 +0300 Subject: [PATCH] update particles randomizer --- src/graphics/render/Emitter.cpp | 2 +- src/graphics/render/Emitter.hpp | 3 +++ src/graphics/render/ParticlesRenderer.cpp | 4 ++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/graphics/render/Emitter.cpp b/src/graphics/render/Emitter.cpp index fd3ac978..e4fb9d47 100644 --- a/src/graphics/render/Emitter.cpp +++ b/src/graphics/render/Emitter.cpp @@ -39,7 +39,7 @@ void Emitter::update(float delta, std::vector& particles) { // spawn particle Particle particle = prototype; particle.emitter = this; - particle.random = rand(); + particle.random = random.rand32(); particle.position = position; particle.velocity += glm::ballRand(1.0f) * explosion; particles.push_back(std::move(particle)); diff --git a/src/graphics/render/Emitter.hpp b/src/graphics/render/Emitter.hpp index 2582e969..431d2e49 100644 --- a/src/graphics/render/Emitter.hpp +++ b/src/graphics/render/Emitter.hpp @@ -7,6 +7,7 @@ #include "typedefs.hpp" #include "maths/UVRegion.hpp" +#include "maths/util.hpp" class Emitter; @@ -50,6 +51,8 @@ class Emitter { float timer = 0.0f; /// @brief Random velocity magnitude applying to spawned particles glm::vec3 explosion {8.0f}; + + util::PseudoRandom random; public: ParticleBehaviour behaviour; diff --git a/src/graphics/render/ParticlesRenderer.cpp b/src/graphics/render/ParticlesRenderer.cpp index 4036dd90..e7b72c00 100644 --- a/src/graphics/render/ParticlesRenderer.cpp +++ b/src/graphics/render/ParticlesRenderer.cpp @@ -22,7 +22,7 @@ ParticlesRenderer::ParticlesRenderer( auto region = util::get_texture_region(assets, "blocks:grass_top", ""); emitters.push_back(std::make_unique(glm::vec3(0, 80, 0), Particle { nullptr, 0, glm::vec3(), glm::vec3(), 5.0f, region.region - },region.texture, 0.002f, -1)); + }, region.texture, 0.002f, -1)); } ParticlesRenderer::~ParticlesRenderer() = default; @@ -71,7 +71,7 @@ void ParticlesRenderer::renderParticles(const Camera& camera, float delta) { light = MainBatch::sampleLight( particle.position, chunks, backlight ); - light *= 0.7f + (particle.random % 300) * 0.001f; + light *= 0.8f + (particle.random % 200) * 0.001f; } batch->quad( particle.position,