Esempio n. 1
0
    public static IPool New <T>(Type type, Action <object> beforeInit) where T : IPool, new()
    {
        ObjectPool objectPool;
        IPool      o = null;

        if (poolDict.TryGetValue(type, out objectPool))
        {
            if (objectPool.objectQueue.Count > 0)
            {
                o = objectPool.objectQueue.Dequeue();
            }
        }

        if (o == null)
        {
            o = Common.CreateInstance(type) as T;
            if (o != null)
            {
                beforeInit(o);
                o.Init();
            }
        }
        else
        {
            beforeInit(o);
            o.Reset();
            o.SetInPool(false);
        }

        return(o);
    }