bool TryGetObjectInfo(out PooledObjectInfo info) { info = null; var pool = m_Pool; if (pool == null) { return(false); } if (pool.InactiveCount > 0) { info = pool.TakeFromInactiveObjs(); } else { var beh = m_IfPoolEmpty; if (beh == PoolBehaviour.CreateNew) { var refer = m_Reference; if (refer == null) { return(false); } var newInf = new PooledObjectInfo(CreateObject(refer), Deactive); m_InfoDict.Add(newInf.Obj, newInf); newInf.SetParent(m_Container); pool.Add(newInf); info = pool.TakeFromInactiveObjs(); } else if (beh == PoolBehaviour.ReuseActive) { info = pool.TakeFromActiveObjs(); } } return(info != null); }
public void Awake() { if (m_IsInited) { return; } if (!ValidKey) { return; } if (!m_CashedInEditor) { CreateCashedObjects(); } if (!ValidObjects) { return; } var dict = m_InfoDict; var objs = m_Objs; int count = objs.Count; var objInfs = new PooledObjectInfo[count]; for (int i = 0; i < count; ++i) { objInfs[i] = new PooledObjectInfo(objs[i], Deactive); dict.Add(objInfs[i].Obj, objInfs[i]); } var pool = new Pool <PooledObjectInfo>(objInfs); m_PoolCount = pool.TotalCount; pool.OnDeactivation += OnDeactivationEvent; m_Pool = pool; m_Objs = null; m_IsInited = true; }
void Deactive(PooledObjectInfo objInfo) { objInfo.OnDeactivation(); m_Pool.ReturnToPool(objInfo); }
private void OnDeactivationEvent(PooledObjectInfo objInfo) { objInfo?.SetParent(m_Container); }