private void RemoveLoop(ActiveParticleLoop loop)
 {
     _loops.Remove(loop);
 }
        private void ReplaceLoop(ActiveParticleLoop oldLoop, ActiveParticleLoop newLoopData)
        {
            if (!_particleSystems.ContainsKey(newLoopData.EffectName))
                AddNewSytem(newLoopData.EffectName);

            oldLoop.EffectName = newLoopData.EffectName;
            oldLoop.Location = newLoopData.Location;
            oldLoop.EmitModifier = newLoopData.EmitModifier;
            oldLoop.Tint = newLoopData.Tint;
        }
        public ParticleLoopToken Loop(ActiveParticleLoop loopData)
        {
            if(!_particleSystems.ContainsKey(loopData.EffectName))
                AddNewSytem(loopData.EffectName);

            _loops.Add(loopData);

            return new ParticleLoopToken
            {
                End = () => RemoveLoop(loopData),
                Replace = newLoopData => ReplaceLoop(loopData, newLoopData)
            };
        }