private UnityComponentPool <EffectPlayerComponentBase> GetOrCreatePool(IEffectData data, string effectID) { if (!_effectPoolByEffectID.TryGetValue(effectID, out var effectPool)) { EffectPlayerComponentBase effectPlayerOrigin = data.GetEffectPlayer(); if (effectPlayerOrigin == null) { Debug.LogError($"{nameof(EffectManager)} - data is EffectPlayerComponent is null (id:{effectID})"); } else { effectPool = new UnityComponentPool <EffectPlayerComponentBase>(effectPlayerOrigin); Transform poolParents = new GameObject().transform; if (_owner != null) { poolParents.SetParent(_owner.transform); } effectPool.SetParents(poolParents); _effectPoolByEffectID.Add(effectID, effectPool); } } return(effectPool); }
public void PrePoolEffect(IEffectData data, int prePoolCount) { string effectID = data.GetEffectID(); UnityComponentPool <EffectPlayerComponentBase> effectPool = GetOrCreatePool(data, effectID); effectPool.PrePooling(prePoolCount); }
public IEnumerator PushSameObjPasses() { yield return(null); var pool = new UnityComponentPool <Transform>(new TestInstanceCreator()); var obj = pool.PopOrCreate(); pool.Push(obj); pool.Push(obj); Assert.AreEqual(1, pool.Count); }
public EffectPlayCommand GetEffect(IEffectData data) { string effectID = data.GetEffectID(); UnityComponentPool <EffectPlayerComponentBase> effectPool = GetOrCreatePool(data, effectID); EffectPlayerComponentBase unusedEffect = effectPool.Spawn(); unusedEffect.SetEffectID(effectID); EffectPlayCommand playCommand = _commandPool.Spawn(); playCommand.Init(unusedEffect, DespawnCommand); return(playCommand); }
public IEnumerator GetOrCreateObjectOrderPasses() { yield return(null); var pool = new UnityComponentPool <Transform>(new TestInstanceCreator()); var objs = Enumerable.Range(0, 5).Select(_ => pool.PopOrCreate()).ToList(); foreach (var o in objs) { pool.Push(o); } while (0 < pool.Count) { var o = pool.PopOrCreate(); Assert.IsTrue(objs.Any(_o => _o == o)); objs.Remove(o); } Assert.AreEqual(0, objs.Count); }
public IEnumerator BasicUsagePasses() { yield return(null); var pool = new UnityComponentPool <Transform>(new TestInstanceCreator()); Assert.AreEqual(0, pool.Count); var obj = pool.PopOrCreate(); Assert.IsNotNull(obj); Assert.AreEqual(0, pool.Count); Assert.IsTrue(obj.gameObject.activeSelf); pool.Push(obj); Assert.AreEqual(1, pool.Count); Assert.IsFalse(obj.gameObject.activeSelf); var obj2 = pool.PopOrCreate(); Assert.AreSame(obj, obj2); Assert.IsTrue(obj2.gameObject.activeSelf); Assert.AreEqual(0, pool.Count); }