r2mods/ilspy_dump/ror2_csproj/RoR2/EffectPool.cs

86 lines
1.9 KiB
C#

using System.Collections.Generic;
using Grumpy;
namespace RoR2;
public class EffectPool : PrefabComponentPool<EffectManagerHelper>
{
protected List<EffectManagerHelper> _RemoveHelperList;
protected List<EffectManagerHelper> _OrphanedEffects = new List<EffectManagerHelper>();
protected const int MAX_EFFECT_POOL_CAPACITY = 20;
protected override void PreDestroyObject(EffectManagerHelper inKillObject)
{
inKillObject.SetOwningPool(null);
}
public void Tick(float inDeltaTime)
{
for (int num = _OrphanedEffects.Count - 1; num >= 0; num--)
{
EffectManagerHelper effectManagerHelper = _OrphanedEffects[num];
if (effectManagerHelper != null && effectManagerHelper.EffectComplete())
{
ReturnObject(effectManagerHelper);
_OrphanedEffects.RemoveAt(num);
}
}
}
public override void ReturnObject(EffectManagerHelper inReturnObject)
{
if (inReturnObject.EffectComplete())
{
inReturnObject.OnReturnToPool();
if (inReturnObject.OwningPool.PoolCount() >= 20)
{
DestroyObject(inReturnObject);
}
else
{
base.ReturnObject(inReturnObject);
}
}
else
{
_OrphanedEffects.Add(inReturnObject);
}
}
public void RemoveObject(EffectManagerHelper inReturnObject)
{
if (_InUse != null && _InUse.Contains(inReturnObject))
{
_InUse.Remove(inReturnObject);
}
if (_Pool == null || !_Pool.Contains(inReturnObject))
{
return;
}
if (_RemoveHelperList == null)
{
_RemoveHelperList = new List<EffectManagerHelper>();
}
if (_Pool == null || _Pool.Count <= 0)
{
return;
}
EffectManagerHelper effectManagerHelper = _Pool.Pop();
while (effectManagerHelper != null)
{
if (!(effectManagerHelper == inReturnObject))
{
_RemoveHelperList.Add(effectManagerHelper);
}
effectManagerHelper = ((_Pool.Count <= 0) ? null : _Pool.Pop());
}
for (int num = _RemoveHelperList.Count - 1; num >= 0; num--)
{
_Pool.Push(_RemoveHelperList[num]);
}
_RemoveHelperList.Clear();
}
}