Fix crash regression from #3588 when editing active particle emitters

This commit is contained in:
Wojtek Figat
2025-09-04 22:05:31 +02:00
parent 3b19e1b40c
commit c5d06b2c8b
2 changed files with 28 additions and 7 deletions

View File

@@ -543,6 +543,9 @@ void ParticleEffect::ApplyModifiedParameters()
void ParticleEffect::OnAssetChanged(Asset* asset, void* caller)
{
#if USE_EDITOR
OnParticleEmittersClear();
#endif
Instance.ClearState();
_parameters.Resize(0);
_parametersVersion = 0;
@@ -553,19 +556,30 @@ void ParticleEffect::OnAssetLoaded(Asset* asset, void* caller)
ApplyModifiedParameters();
#if USE_EDITOR
// When one of the emitters gets edited, cached parameters need to be applied
auto& emitters = ParticleSystem.Get()->Emitters;
for (auto& emitter : emitters)
{
emitter.Loaded.BindUnique<ParticleEffect, &ParticleEffect::OnParticleEmitterLoaded>(this);
}
OnParticleEmittersClear();
_cachedEmitters = ParticleSystem.Get()->Emitters;
for (auto& emitter : _cachedEmitters)
emitter.Loaded.Bind<ParticleEffect, &ParticleEffect::OnParticleEmitterLoaded>(this);
#endif
}
#if USE_EDITOR
void ParticleEffect::OnParticleEmittersClear()
{
for (auto& emitter : _cachedEmitters)
emitter.Loaded.Unbind<ParticleEffect, &ParticleEffect::OnParticleEmitterLoaded>(this);
_cachedEmitters.Clear();
}
void ParticleEffect::OnParticleEmitterLoaded()
{
ApplyModifiedParameters();
}
#endif
void ParticleEffect::OnAssetUnloaded(Asset* asset, void* caller)
{
}
@@ -807,6 +821,9 @@ void ParticleEffect::Deserialize(DeserializeStream& stream, ISerializeModifier*
void ParticleEffect::EndPlay()
{
#if USE_EDITOR
OnParticleEmittersClear();
#endif
CacheModifiedParameters();
Particles::OnEffectDestroy(this);
Instance.ClearState();