You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-05 12:10:55 +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:
@@ -1097,10 +1097,11 @@ void CPUParticles2D::_particles_process(double p_delta) {
|
|||||||
|
|
||||||
if (particle_flags[PARTICLE_FLAG_ALIGN_Y_TO_VELOCITY]) {
|
if (particle_flags[PARTICLE_FLAG_ALIGN_Y_TO_VELOCITY]) {
|
||||||
if (p.velocity.length() > 0.0) {
|
if (p.velocity.length() > 0.0) {
|
||||||
p.transform.columns[1] = p.velocity.normalized();
|
p.transform.columns[1] = p.velocity;
|
||||||
p.transform.columns[0] = p.transform.columns[1].orthogonal();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
p.transform.columns[1] = p.transform.columns[1].normalized();
|
||||||
|
p.transform.columns[0] = p.transform.columns[1].orthogonal();
|
||||||
} else {
|
} else {
|
||||||
p.transform.columns[0] = Vector2(Math::cos(p.rotation), -Math::sin(p.rotation));
|
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));
|
p.transform.columns[1] = Vector2(Math::sin(p.rotation), Math::cos(p.rotation));
|
||||||
|
|||||||
Reference in New Issue
Block a user