private void EffectFinished() { if (m_ended) { return; } m_ended = true; for (int i = 0; i < m_sounds.Count; i++) { if (m_sounds[i].Sound == null || m_sounds[i].Sound.Voice == null) { continue; } m_sounds[i].Sound.Voice.SetFilterParameters(m_defaultFilter, FINISHED_OP_SET); if (i == m_effect.ResultEmitterIdx) { continue; } m_sounds[i].Sound.Stop(); } m_engine.CommitChanges(FINISHED_OP_SET); OutputSound.StoppedPlaying -= EffectFinished; var onEffectEnded = OnEffectEnded; if (onEffectEnded != null) { onEffectEnded(this); } }