Skip to content

Commit 7f60546

Browse files
committed
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.
1 parent 4d1f26e commit 7f60546

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

scene/2d/cpu_particles_2d.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1097,10 +1097,11 @@ void CPUParticles2D::_particles_process(double p_delta) {
10971097

10981098
if (particle_flags[PARTICLE_FLAG_ALIGN_Y_TO_VELOCITY]) {
10991099
if (p.velocity.length() > 0.0) {
1100-
p.transform.columns[1] = p.velocity.normalized();
1101-
p.transform.columns[0] = p.transform.columns[1].orthogonal();
1100+
p.transform.columns[1] = p.velocity;
11021101
}
11031102

1103+
p.transform.columns[1] = p.transform.columns[1].normalized();
1104+
p.transform.columns[0] = p.transform.columns[1].orthogonal();
11041105
} else {
11051106
p.transform.columns[0] = Vector2(Math::cos(p.rotation), -Math::sin(p.rotation));
11061107
p.transform.columns[1] = Vector2(Math::sin(p.rotation), Math::cos(p.rotation));

0 commit comments

Comments
 (0)