1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

Fix CPUParticles2D repeatedly scaling particles with 0 velocity and Align Y

CPUParticles2D with Align Y turned on would update particles' transforms based on the velocity when velocity was non-zero, but would not set the transform for zero velocity.  This left the transfrom value from the previous call, which may have already been scaled.  In this case, each call to _particles_process would apply the scale again, causing the particle to repeatedly grow (or shrink for scales < 1.0).

Updated the Align Y logic to always normalize the transform values before scale is applied.
This commit is contained in:
aaronp64
2024-12-31 10:42:29 -05:00
parent 4d1f26e1fd
commit 7f60546f05

View File

@@ -1097,10 +1097,11 @@ void CPUParticles2D::_particles_process(double p_delta) {
if (particle_flags[PARTICLE_FLAG_ALIGN_Y_TO_VELOCITY]) {
if (p.velocity.length() > 0.0) {
p.transform.columns[1] = p.velocity.normalized();
p.transform.columns[0] = p.transform.columns[1].orthogonal();
p.transform.columns[1] = p.velocity;
}
p.transform.columns[1] = p.transform.columns[1].normalized();
p.transform.columns[0] = p.transform.columns[1].orthogonal();
} else {
p.transform.columns[0] = Vector2(Math::cos(p.rotation), -Math::sin(p.rotation));
p.transform.columns[1] = Vector2(Math::sin(p.rotation), Math::cos(p.rotation));