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);
        }
Example #3
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }