Fix invalid particle movement when time_scale is zero

This commit is contained in:
Chaosus 2018-02-08 22:57:10 +03:00
parent cbdd410a6f
commit e1c2bde0ec

View file

@ -29,6 +29,7 @@
/*************************************************************************/
#include "rasterizer_storage_gles3.h"
#include "engine.h"
#include "project_settings.h"
#include "rasterizer_canvas_gles3.h"
#include "rasterizer_scene_gles3.h"
@ -5855,6 +5856,8 @@ void RasterizerStorageGLES3::update_particles() {
shaders.particles.set_uniform(ParticlesShaderGLES3::EMITTING, particles->emitting);
shaders.particles.set_uniform(ParticlesShaderGLES3::RANDOMNESS, particles->randomness);
bool zero_time_scale = Engine::get_singleton()->get_time_scale() <= 0.0;
if (particles->clear && particles->pre_process_time > 0.0) {
float frame_time;
@ -5872,7 +5875,15 @@ void RasterizerStorageGLES3::update_particles() {
}
if (particles->fixed_fps > 0) {
float frame_time = 1.0 / particles->fixed_fps;
float frame_time;
float decr;
if (zero_time_scale) {
frame_time = 0.0;
decr = 1.0 / particles->fixed_fps;
} else {
frame_time = 1.0 / particles->fixed_fps;
decr = frame_time;
}
float delta = frame.delta;
if (delta > 0.1) { //avoid recursive stalls if fps goes below 10
delta = 0.1;
@ -5883,13 +5894,16 @@ void RasterizerStorageGLES3::update_particles() {
while (todo >= frame_time) {
_particles_process(particles, frame_time);
todo -= frame_time;
todo -= decr;
}
particles->frame_remainder = todo;
} else {
_particles_process(particles, frame.delta);
if (zero_time_scale)
_particles_process(particles, 0.0);
else
_particles_process(particles, frame.delta);
}
particle_update_list.remove(particle_update_list.first());