Пример #1
0
        /// <summary>
        /// 把资源放到池子中
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public virtual bool Push(I_PoolObjectAbility obj)
        {
            if (obj == null)
            {
                LogManager.Error("对象池[{0}]回收null的资源错误", _factory.FactoryName);
                return(false);
            }

            if (!obj.IsUse)
            {
                LogManager.Error("对象池[{0}]回收资源错误[{1}]错误,正在使用中", _factory.FactoryName, obj.ObjectName);
                return(false);
            }

            if (_maxCount > 0 && _in.Count > _maxCount)
            {
                LogManager.Log("超过对象池大小,立马释放对象");
                obj.OnRecycled();
                obj = null;
                return(false);
            }

            _factory.ExtraOpertion(obj);

            obj.IsUse = false;
            _in.Add(obj);
            _out.Remove(obj);
            obj.OnPush();
            return(true);
        }
Пример #2
0
        public override void ExtraOpertion(I_PoolObjectAbility ability)
        {
            PoolDefaultGameObject po = ability as PoolDefaultGameObject;

            if (po == null)
            {
                LogManager.Error("对象池工场Push的内容为空");
                return;
            }
            GameObjectHelper.SetParent(po.gameObject, _factoryGoRootTrans);
        }
Пример #3
0
        public override void ExtraOpertion(I_PoolObjectAbility ability)
        {
            PoolDefaultRectTransform po = ability as PoolDefaultRectTransform;
            if (po == null)
            {
                LogManager.Error("对象池工场Push的内容为空或者类型不对");
                return;
            }

            po.SetParent(_factoryGoRoot.transform);
        }
Пример #4
0
    public AudioUnit _internal_play(SoundCnf info, float fade_in, float fade_out)
    {
        I_PoolObjectAbility object_ability = _pool_factory.Pop();
        AudioUnit           unit           = object_ability as AudioUnit;

        if (unit != null)
        {
            _list.Add(unit);
            unit.Play(info, SoundVolume, fade_in, fade_out);
        }
        else
        {
            LogManager.Error("_internal_play Error");
        }

        return(unit);
    }
Пример #5
0
        public virtual T Pop <T>(string prefabName) where T : class, I_PoolObjectAbility
        {
            PoolBase poolBase;

            _map.TryGetValue(prefabName, out poolBase);
            if (poolBase == null)
            {
                poolBase = GetDefaultFactory(prefabName);
            }
            I_PoolObjectAbility po = poolBase.Pop();
            T t = po as T;

            if (t == null)
            {
                LogManager.Error("po:[{0}],[{1}]", po, prefabName);
            }
            return(t);
        }
Пример #6
0
        public virtual bool Push(I_PoolObjectAbility po)
        {
            PoolBase poolBase;

            if (string.IsNullOrEmpty(po.ObjectName))
            {
                LogManager.Error("名字为空");
                return(false);
            }

            _map.TryGetValue(po.ObjectName, out poolBase);
            if (poolBase == null)
            {
                LogManager.Error("子类缓存管理不存在");
                return(false);
            }

            return(poolBase.Push(po));
        }
Пример #7
0
 public override void ExtraOpertion(I_PoolObjectAbility ability)
 {
 }
Пример #8
0
        public override I_PoolObjectAbility Create()
        {
            I_PoolObjectAbility po = Activator.CreateInstance(_type) as I_PoolObjectAbility;

            return(po);
        }
Пример #9
0
 public abstract void ExtraOpertion(I_PoolObjectAbility ability);