static int GetObjectPool(IntPtr L)
    {
        try
        {
            int count = LuaDLL.lua_gettop(L);

            if (count == 2 && TypeChecker.CheckTypes(L, 1, typeof(UnityGameFramework.Runtime.ObjectPoolComponent), typeof(System.Type)))
            {
                UnityGameFramework.Runtime.ObjectPoolComponent obj = (UnityGameFramework.Runtime.ObjectPoolComponent)ToLua.ToObject(L, 1);
                System.Type arg0 = (System.Type)ToLua.ToObject(L, 2);
                GameFramework.ObjectPool.ObjectPoolBase o = obj.GetObjectPool(arg0);
                ToLua.PushObject(L, o);
                return(1);
            }
            else if (count == 3 && TypeChecker.CheckTypes(L, 1, typeof(UnityGameFramework.Runtime.ObjectPoolComponent), typeof(System.Type), typeof(string)))
            {
                UnityGameFramework.Runtime.ObjectPoolComponent obj = (UnityGameFramework.Runtime.ObjectPoolComponent)ToLua.ToObject(L, 1);
                System.Type arg0 = (System.Type)ToLua.ToObject(L, 2);
                string      arg1 = ToLua.ToString(L, 3);
                GameFramework.ObjectPool.ObjectPoolBase o = obj.GetObjectPool(arg0, arg1);
                ToLua.PushObject(L, o);
                return(1);
            }
            else
            {
                return(LuaDLL.luaL_throw(L, "invalid arguments to method: UnityGameFramework.Runtime.ObjectPoolComponent.GetObjectPool"));
            }
        }
        catch (Exception e)
        {
            return(LuaDLL.toluaL_exception(L, e));
        }
    }
コード例 #2
0
        /// <summary>
        /// 获取所有对象池。
        /// </summary>
        /// <param name="sort">是否根据对象池的优先级排序。</param>
        /// <returns>所有对象池。</returns>
        public ObjectPoolBase[] GetAllObjectPools(bool sort)
        {
            if (sort)
            {
                List <ObjectPoolBase> results = new List <ObjectPoolBase>();
                foreach (KeyValuePair <string, ObjectPoolBase> objectPool in m_ObjectPools)
                {
                    results.Add(objectPool.Value);
                }

                results.Sort(ObjectPoolComparer);
                return(results.ToArray());
            }
            else
            {
                int index = 0;
                ObjectPoolBase[] results = new ObjectPoolBase[m_ObjectPools.Count];
                foreach (KeyValuePair <string, ObjectPoolBase> objectPool in m_ObjectPools)
                {
                    results[index++] = objectPool.Value;
                }

                return(results);
            }
        }
コード例 #3
0
        /// <summary>
        /// 销毁对象池。
        /// </summary>
        /// <param name="objectPool">要销毁的对象池。</param>
        /// <returns>是否销毁对象池成功。</returns>
        public bool DestroyObjectPool(ObjectPoolBase objectPool)
        {
            if (objectPool == null)
            {
                throw new GameFrameworkException("Object pool is invalid.");
            }

            return(InternalDestroyObjectPool(Utility.Text.GetFullName(objectPool.ObjectType, objectPool.Name)));
        }
コード例 #4
0
ファイル: IObjectPoolManager.cs プロジェクト: happylays/tbb2
        private ObjectPoolBase InternalGetObjectPool(string fullName)
        {
            ObjectPoolBase objectPool = null;

            if (m_ObjectPools.TryGetValue(fullName, out objectPool))
            {
                return(objectPool);
            }
            return(null);
        }
コード例 #5
0
        /// <summary>
        /// 获取对象池。
        /// </summary>
        /// <typeparam name="T">对象类型。</typeparam>
        /// <param name="name">对象池名称。</param>
        /// <returns>要获取的对象池。</returns>
        public IObjectPool <T> GetObjectPool <T>(string name) where T : ObjectBase
        {
            ObjectPoolBase objectPool = null;

            if (m_ObjectPools.TryGetValue(Utility.Text.GetFullName <T>(name), out objectPool))
            {
                return(objectPool as IObjectPool <T>);
            }

            return(null);
        }
コード例 #6
0
        private bool InternalDestroyObjectPool(string fullName)
        {
            ObjectPoolBase objectPool = null;

            if (m_ObjectPools.TryGetValue(fullName, out objectPool))
            {
                objectPool.Shutdown();
                return(m_ObjectPools.Remove(fullName));
            }

            return(false);
        }
コード例 #7
0
        /// <summary>
        /// 销毁对象池。
        /// </summary>
        /// <typeparam name="T">对象类型。</typeparam>
        /// <param name="name">要销毁的对象池名称。</param>
        /// <returns>是否销毁对象池成功。</returns>
        public bool DestroyObjectPool <T>(string name) where T : ObjectBase
        {
            string         fullName   = Utility.Text.GetFullName <T>(name);
            ObjectPoolBase objectPool = null;

            if (m_ObjectPools.TryGetValue(fullName, out objectPool))
            {
                objectPool.Shutdown();
                return(m_ObjectPools.Remove(fullName));
            }

            return(false);
        }
コード例 #8
0
        /// <summary>
        /// 获取对象池。
        /// </summary>
        /// <param name="fullName">对象池完整名称。</param>
        /// <returns>要获取的对象池。</returns>
        public ObjectPoolBase GetObjectPool(string fullName)
        {
            if (string.IsNullOrEmpty(fullName))
            {
                throw new Exception("Full name is invalid.");
            }

            ObjectPoolBase objectPool = null;

            if (m_ObjectPools.TryGetValue(fullName, out objectPool))
            {
                return(objectPool);
            }

            return(null);
        }
コード例 #9
0
        /// <summary>
        /// 获取所有对象池。
        /// </summary>
        /// <param name="sort">是否根据对象池的优先级排序。</param>
        /// <returns>所有对象池。</returns>
        public ObjectPoolBase[] GetAllObjectPools(bool sort)
        {
            if (sort)
            {
                List <ObjectPoolBase> objectPools = new List <ObjectPoolBase>(m_ObjectPools.Values);
                objectPools.Sort(ObjectPoolComparer);
                return(objectPools.ToArray());
            }
            else
            {
                int index = 0;
                ObjectPoolBase[] objectPools = new ObjectPoolBase[m_ObjectPools.Count];
                foreach (ObjectPoolBase objectPool in m_ObjectPools.Values)
                {
                    objectPools[index++] = objectPool;
                }

                return(objectPools);
            }
        }
コード例 #10
0
        private ObjectPoolBase InternalCreateObjectPool(Type objectType, string name, bool allowMultiSpawn, int capacity, float expireTime, int priority)
        {
            if (objectType == null)
            {
                throw new GameFrameworkException("Object type is invalid.");
            }

            if (!typeof(ObjectBase).IsAssignableFrom(objectType))
            {
                throw new GameFrameworkException(string.Format("Object type '{0}' is invalid.", objectType.FullName));
            }

            if (HasObjectPool(objectType, name))
            {
                throw new GameFrameworkException(string.Format("Already exist object pool '{0}'.", Utility.Text.GetFullName(objectType, name)));
            }

            Type           objectPoolType = typeof(ObjectPool <>).MakeGenericType(objectType);
            ObjectPoolBase objectPool     = (ObjectPoolBase)Activator.CreateInstance(objectPoolType, name, allowMultiSpawn, capacity, expireTime, priority);

            m_ObjectPools.Add(Utility.Text.GetFullName(objectType, name), objectPool);
            return(objectPool);
        }
コード例 #11
0
 private int ObjectPoolComparer(ObjectPoolBase a, ObjectPoolBase b)
 {
     return(a.Priority.CompareTo(b.Priority));
 }
    static int CreateMultiSpawnObjectPool(IntPtr L)
    {
        try
        {
            int count = LuaDLL.lua_gettop(L);

            if (count == 2 && TypeChecker.CheckTypes(L, 1, typeof(UnityGameFramework.Runtime.ObjectPoolComponent), typeof(System.Type)))
            {
                UnityGameFramework.Runtime.ObjectPoolComponent obj = (UnityGameFramework.Runtime.ObjectPoolComponent)ToLua.ToObject(L, 1);
                System.Type arg0 = (System.Type)ToLua.ToObject(L, 2);
                GameFramework.ObjectPool.ObjectPoolBase o = obj.CreateMultiSpawnObjectPool(arg0);
                ToLua.PushObject(L, o);
                return(1);
            }
            else if (count == 3 && TypeChecker.CheckTypes(L, 1, typeof(UnityGameFramework.Runtime.ObjectPoolComponent), typeof(System.Type), typeof(float)))
            {
                UnityGameFramework.Runtime.ObjectPoolComponent obj = (UnityGameFramework.Runtime.ObjectPoolComponent)ToLua.ToObject(L, 1);
                System.Type arg0 = (System.Type)ToLua.ToObject(L, 2);
                float       arg1 = (float)LuaDLL.lua_tonumber(L, 3);
                GameFramework.ObjectPool.ObjectPoolBase o = obj.CreateMultiSpawnObjectPool(arg0, arg1);
                ToLua.PushObject(L, o);
                return(1);
            }
            else if (count == 3 && TypeChecker.CheckTypes(L, 1, typeof(UnityGameFramework.Runtime.ObjectPoolComponent), typeof(System.Type), typeof(string)))
            {
                UnityGameFramework.Runtime.ObjectPoolComponent obj = (UnityGameFramework.Runtime.ObjectPoolComponent)ToLua.ToObject(L, 1);
                System.Type arg0 = (System.Type)ToLua.ToObject(L, 2);
                string      arg1 = ToLua.ToString(L, 3);
                GameFramework.ObjectPool.ObjectPoolBase o = obj.CreateMultiSpawnObjectPool(arg0, arg1);
                ToLua.PushObject(L, o);
                return(1);
            }
            else if (count == 4 && TypeChecker.CheckTypes(L, 1, typeof(UnityGameFramework.Runtime.ObjectPoolComponent), typeof(System.Type), typeof(float), typeof(int)))
            {
                UnityGameFramework.Runtime.ObjectPoolComponent obj = (UnityGameFramework.Runtime.ObjectPoolComponent)ToLua.ToObject(L, 1);
                System.Type arg0 = (System.Type)ToLua.ToObject(L, 2);
                float       arg1 = (float)LuaDLL.lua_tonumber(L, 3);
                int         arg2 = (int)LuaDLL.lua_tonumber(L, 4);
                GameFramework.ObjectPool.ObjectPoolBase o = obj.CreateMultiSpawnObjectPool(arg0, arg1, arg2);
                ToLua.PushObject(L, o);
                return(1);
            }
            else if (count == 4 && TypeChecker.CheckTypes(L, 1, typeof(UnityGameFramework.Runtime.ObjectPoolComponent), typeof(System.Type), typeof(int), typeof(float)))
            {
                UnityGameFramework.Runtime.ObjectPoolComponent obj = (UnityGameFramework.Runtime.ObjectPoolComponent)ToLua.ToObject(L, 1);
                System.Type arg0 = (System.Type)ToLua.ToObject(L, 2);
                int         arg1 = (int)LuaDLL.lua_tonumber(L, 3);
                float       arg2 = (float)LuaDLL.lua_tonumber(L, 4);
                GameFramework.ObjectPool.ObjectPoolBase o = obj.CreateMultiSpawnObjectPool(arg0, arg1, arg2);
                ToLua.PushObject(L, o);
                return(1);
            }
            else if (count == 4 && TypeChecker.CheckTypes(L, 1, typeof(UnityGameFramework.Runtime.ObjectPoolComponent), typeof(System.Type), typeof(string), typeof(float)))
            {
                UnityGameFramework.Runtime.ObjectPoolComponent obj = (UnityGameFramework.Runtime.ObjectPoolComponent)ToLua.ToObject(L, 1);
                System.Type arg0 = (System.Type)ToLua.ToObject(L, 2);
                string      arg1 = ToLua.ToString(L, 3);
                float       arg2 = (float)LuaDLL.lua_tonumber(L, 4);
                GameFramework.ObjectPool.ObjectPoolBase o = obj.CreateMultiSpawnObjectPool(arg0, arg1, arg2);
                ToLua.PushObject(L, o);
                return(1);
            }
            else if (count == 5 && TypeChecker.CheckTypes(L, 1, typeof(UnityGameFramework.Runtime.ObjectPoolComponent), typeof(System.Type), typeof(int), typeof(float), typeof(int)))
            {
                UnityGameFramework.Runtime.ObjectPoolComponent obj = (UnityGameFramework.Runtime.ObjectPoolComponent)ToLua.ToObject(L, 1);
                System.Type arg0 = (System.Type)ToLua.ToObject(L, 2);
                int         arg1 = (int)LuaDLL.lua_tonumber(L, 3);
                float       arg2 = (float)LuaDLL.lua_tonumber(L, 4);
                int         arg3 = (int)LuaDLL.lua_tonumber(L, 5);
                GameFramework.ObjectPool.ObjectPoolBase o = obj.CreateMultiSpawnObjectPool(arg0, arg1, arg2, arg3);
                ToLua.PushObject(L, o);
                return(1);
            }
            else if (count == 5 && TypeChecker.CheckTypes(L, 1, typeof(UnityGameFramework.Runtime.ObjectPoolComponent), typeof(System.Type), typeof(string), typeof(float), typeof(int)))
            {
                UnityGameFramework.Runtime.ObjectPoolComponent obj = (UnityGameFramework.Runtime.ObjectPoolComponent)ToLua.ToObject(L, 1);
                System.Type arg0 = (System.Type)ToLua.ToObject(L, 2);
                string      arg1 = ToLua.ToString(L, 3);
                float       arg2 = (float)LuaDLL.lua_tonumber(L, 4);
                int         arg3 = (int)LuaDLL.lua_tonumber(L, 5);
                GameFramework.ObjectPool.ObjectPoolBase o = obj.CreateMultiSpawnObjectPool(arg0, arg1, arg2, arg3);
                ToLua.PushObject(L, o);
                return(1);
            }
            else if (count == 5 && TypeChecker.CheckTypes(L, 1, typeof(UnityGameFramework.Runtime.ObjectPoolComponent), typeof(System.Type), typeof(string), typeof(int), typeof(float)))
            {
                UnityGameFramework.Runtime.ObjectPoolComponent obj = (UnityGameFramework.Runtime.ObjectPoolComponent)ToLua.ToObject(L, 1);
                System.Type arg0 = (System.Type)ToLua.ToObject(L, 2);
                string      arg1 = ToLua.ToString(L, 3);
                int         arg2 = (int)LuaDLL.lua_tonumber(L, 4);
                float       arg3 = (float)LuaDLL.lua_tonumber(L, 5);
                GameFramework.ObjectPool.ObjectPoolBase o = obj.CreateMultiSpawnObjectPool(arg0, arg1, arg2, arg3);
                ToLua.PushObject(L, o);
                return(1);
            }
            else if (count == 6 && TypeChecker.CheckTypes(L, 1, typeof(UnityGameFramework.Runtime.ObjectPoolComponent), typeof(System.Type), typeof(string), typeof(int), typeof(float), typeof(int)))
            {
                UnityGameFramework.Runtime.ObjectPoolComponent obj = (UnityGameFramework.Runtime.ObjectPoolComponent)ToLua.ToObject(L, 1);
                System.Type arg0 = (System.Type)ToLua.ToObject(L, 2);
                string      arg1 = ToLua.ToString(L, 3);
                int         arg2 = (int)LuaDLL.lua_tonumber(L, 4);
                float       arg3 = (float)LuaDLL.lua_tonumber(L, 5);
                int         arg4 = (int)LuaDLL.lua_tonumber(L, 6);
                GameFramework.ObjectPool.ObjectPoolBase o = obj.CreateMultiSpawnObjectPool(arg0, arg1, arg2, arg3, arg4);
                ToLua.PushObject(L, o);
                return(1);
            }
            else
            {
                return(LuaDLL.luaL_throw(L, "invalid arguments to method: UnityGameFramework.Runtime.ObjectPoolComponent.CreateMultiSpawnObjectPool"));
            }
        }
        catch (Exception e)
        {
            return(LuaDLL.toluaL_exception(L, e));
        }
    }