public LoadGameObjectFunc() { m_LoadCall = (AssetItem item) => { GameObject t = null; CoreGameObjectPool resourcePool = null; m_Owner.m_Pools.TryGetValue(m_AssetPath, out resourcePool); if (resourcePool is null) { resourcePool = new CoreGameObjectPool(item); m_Owner.m_Pools.Add(m_AssetPath, resourcePool); } else { GameManager.Instance.m_ABMgr.UnloadAsset(item); } t = resourcePool.Spawn(); m_Callback?.Invoke(t); m_Callback = null; m_AssetPath = null; m_Parent = null; m_Name = null; m_Owner.m_LambdaCache.AddLast(this); m_Owner = null; }; }
public void DestroyOne(string path, bool OnlyUnUsed = false) { CoreGameObjectPool pool = m_Pools[path]; if ((!OnlyUnUsed) || (OnlyUnUsed && pool.NotUsed())) { GameManager.Instance.m_ABMgr.UnloadAsset(pool.AssetItem); pool.Destroy(); m_Pools.Remove(path); } }
static int _g_get_AssetItem(RealStatePtr L) { try { ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L); CoreGameObjectPool gen_to_be_invoked = (CoreGameObjectPool)translator.FastGetCSObj(L, 1); translator.Push(L, gen_to_be_invoked.AssetItem); } catch (System.Exception gen_e) { return(LuaAPI.luaL_error(L, "c# exception:" + gen_e)); } return(1); }
public GameObject Spawn(string path, Transform parent = null) { CoreGameObjectPool resourcePool = null; m_Pools.TryGetValue(path, out resourcePool); if (resourcePool is null) { AssetItem item = GameManager.Instance.m_ABMgr.LoadAsset(path); resourcePool = new CoreGameObjectPool(item, parent); m_Pools.Add(path, resourcePool); } return(resourcePool.Spawn()); }
public void Recycle(GameObject obj) { foreach (var item in m_Pools) { CoreGameObjectPool pool = item.Value; if (pool.IsSpawnedObj(obj)) { pool.Recycle(obj); return; } } UnityEngine.Debug.LogError("试图回收不在CoreCompositePool池中的GameObject、或重复回收!"); // m_Pools[path].Recycle(obj); }
public void SpawnAsync(string path, Action <GameObject> callback, Transform parent = null) { CoreGameObjectPool resourcePool = null; m_Pools.TryGetValue(path, out resourcePool); if (resourcePool is null) { LoadGameObjectFunc lambda = m_LambdaCache.CreateOrPop(); lambda.Init(this, path, callback); GameManager.Instance.m_ABMgr.LoadAssetAsync(path, lambda.m_LoadCall); } else { GameObject t = resourcePool.Spawn(); callback?.Invoke(t); } }
static int _m_Destroy(RealStatePtr L) { try { ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L); CoreGameObjectPool gen_to_be_invoked = (CoreGameObjectPool)translator.FastGetCSObj(L, 1); { gen_to_be_invoked.Destroy( ); return(0); } } catch (System.Exception gen_e) { return(LuaAPI.luaL_error(L, "c# exception:" + gen_e)); } }
static int __CreateInstance(RealStatePtr L) { try { ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L); if (LuaAPI.lua_gettop(L) == 4 && translator.Assignable <AssetItem>(L, 2) && translator.Assignable <UnityEngine.Transform>(L, 3) && (LuaAPI.lua_isnil(L, 4) || LuaAPI.lua_type(L, 4) == LuaTypes.LUA_TSTRING)) { AssetItem _assetItem = (AssetItem)translator.GetObject(L, 2, typeof(AssetItem)); UnityEngine.Transform _ObjParent = (UnityEngine.Transform)translator.GetObject(L, 3, typeof(UnityEngine.Transform)); string _poolName = LuaAPI.lua_tostring(L, 4); CoreGameObjectPool gen_ret = new CoreGameObjectPool(_assetItem, _ObjParent, _poolName); translator.Push(L, gen_ret); return(1); } if (LuaAPI.lua_gettop(L) == 3 && translator.Assignable <AssetItem>(L, 2) && translator.Assignable <UnityEngine.Transform>(L, 3)) { AssetItem _assetItem = (AssetItem)translator.GetObject(L, 2, typeof(AssetItem)); UnityEngine.Transform _ObjParent = (UnityEngine.Transform)translator.GetObject(L, 3, typeof(UnityEngine.Transform)); CoreGameObjectPool gen_ret = new CoreGameObjectPool(_assetItem, _ObjParent); translator.Push(L, gen_ret); return(1); } if (LuaAPI.lua_gettop(L) == 2 && translator.Assignable <AssetItem>(L, 2)) { AssetItem _assetItem = (AssetItem)translator.GetObject(L, 2, typeof(AssetItem)); CoreGameObjectPool gen_ret = new CoreGameObjectPool(_assetItem); translator.Push(L, gen_ret); return(1); } } catch (System.Exception gen_e) { return(LuaAPI.luaL_error(L, "c# exception:" + gen_e)); } return(LuaAPI.luaL_error(L, "invalid arguments to CoreGameObjectPool constructor!")); }
static int _m_NotUsed(RealStatePtr L) { try { ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L); CoreGameObjectPool gen_to_be_invoked = (CoreGameObjectPool)translator.FastGetCSObj(L, 1); { bool gen_ret = gen_to_be_invoked.NotUsed( ); LuaAPI.lua_pushboolean(L, gen_ret); return(1); } } catch (System.Exception gen_e) { return(LuaAPI.luaL_error(L, "c# exception:" + gen_e)); } }
static int _m_Spawn(RealStatePtr L) { try { ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L); CoreGameObjectPool gen_to_be_invoked = (CoreGameObjectPool)translator.FastGetCSObj(L, 1); { UnityEngine.GameObject gen_ret = gen_to_be_invoked.Spawn( ); translator.Push(L, gen_ret); return(1); } } catch (System.Exception gen_e) { return(LuaAPI.luaL_error(L, "c# exception:" + gen_e)); } }
static int _m_Recycle(RealStatePtr L) { try { ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L); CoreGameObjectPool gen_to_be_invoked = (CoreGameObjectPool)translator.FastGetCSObj(L, 1); { UnityEngine.GameObject _obj = (UnityEngine.GameObject)translator.GetObject(L, 2, typeof(UnityEngine.GameObject)); gen_to_be_invoked.Recycle(_obj); return(0); } } catch (System.Exception gen_e) { return(LuaAPI.luaL_error(L, "c# exception:" + gen_e)); } }