Example #1
0
 public void ExecuteClearPooledObjects()
 {
     for (LinkedListNode <GameObjectPool.stDelayRecycle> linkedListNode = m_delayRecycle.First; linkedListNode != null; linkedListNode = linkedListNode.Next)
     {
         if (null != linkedListNode.Value.recycleObj)
         {
             RecycleGameObject(linkedListNode.Value.recycleObj);
         }
     }
     m_delayRecycle.Clear();
     m_componentMap.Clear();
     Dictionary <int, Queue <PooledGameObjectScript> > .Enumerator enumerator = m_pooledGameObjectMap.GetEnumerator();
     while (enumerator.MoveNext())
     {
         KeyValuePair <int, Queue <PooledGameObjectScript> > current = enumerator.Current;
         Queue <PooledGameObjectScript> value = current.Value;
         while (value.Count > 0)
         {
             PooledGameObjectScript cPooledGameObjectScript = value.Dequeue();
             if (cPooledGameObjectScript != null && cPooledGameObjectScript.gameObject != null)
             {
                 UnityEngine.Object.Destroy(cPooledGameObjectScript.gameObject);
             }
         }
     }
     m_pooledGameObjectMap.Clear();
 }
Example #2
0
    private PooledGameObjectScript CreateGameObject(string prefabFullPath, Vector3 pos, Quaternion rot, bool useRotation, enResourceType resourceType, string prefabKey)
    {
        bool       needCached = false;// resourceType == enResourceType.BattleScene;
        GameObject gameObject = Singleton <ResourceManager> .GetInstance().GetResource(prefabFullPath, typeof(GameObject), resourceType, needCached, false).content as GameObject;

        if (gameObject == null)
        {
            return(null);
        }
        GameObject gameObject2;

        if (useRotation)
        {
            gameObject2 = (UnityEngine.GameObject.Instantiate(gameObject, pos, rot) as GameObject);
        }
        else
        {
            gameObject2 = (UnityEngine.GameObject.Instantiate(gameObject) as GameObject);
            gameObject2.transform.position = pos;
        }
        // DebugHelper.Assert(gameObject2 != null);
        PooledGameObjectScript pooledGameObjectScript = gameObject2.GetComponent <PooledGameObjectScript>();

        if (pooledGameObjectScript == null)
        {
            pooledGameObjectScript = gameObject2.AddComponent <PooledGameObjectScript>();
        }
        pooledGameObjectScript.Initialize(prefabKey);
        pooledGameObjectScript.OnCreate();
        return(pooledGameObjectScript);
    }
Example #3
0
    public void PrepareGameObject(string prefabFullPath, enResourceType resourceType, int amount, bool assertNull = true)
    {
        string text = FileManager.EraseExtension(prefabFullPath);
        Queue <PooledGameObjectScript> queue = null;

        if (!m_pooledGameObjectMap.TryGetValue(text.JavaHashCodeIgnoreCase(), out queue))
        {
            queue = new Queue <PooledGameObjectScript>();
            m_pooledGameObjectMap.Add(text.JavaHashCodeIgnoreCase(), queue);
        }
        if (queue.Count >= amount)
        {
            return;
        }
        amount -= queue.Count;
        for (int i = 0; i < amount; i++)
        {
            PooledGameObjectScript pooledGameObjectScript = CreateGameObject(prefabFullPath, Vector3.zero, Quaternion.identity, false, resourceType, text);
            if (assertNull)
            {
                //DebugHelper.Assert(cPooledGameObjectScript != null, "Failed Create Game object from \"{0}\"", new object[]
                //{
                //    prefabFullPath
                //});
            }
            if (pooledGameObjectScript != null)
            {
                queue.Enqueue(pooledGameObjectScript);
                pooledGameObjectScript.gameObject.transform.SetParent(m_poolRoot.transform, true);
                pooledGameObjectScript.OnPrepare();
            }
        }
    }
Example #4
0
    private void RecycleGameObject(GameObject pooledGameObject, bool setIsInit)
    {
        if (pooledGameObject == null)
        {
            return;
        }
        PooledGameObjectScript component = pooledGameObject.GetComponent <PooledGameObjectScript>();

        if (component != null)
        {
            Queue <PooledGameObjectScript> queue = null;
            if (this.m_pooledGameObjectMap.TryGetValue(component.prefabKey.JavaHashCodeIgnoreCase(), out queue))
            {
                queue.Enqueue(component);
                component.OnRecycle();
                component.transform.SetParent(this.m_poolRoot.transform, true);
                component.isInit = setIsInit;
                return;
            }
        }
        UnityEngine.Object.Destroy(pooledGameObject);
    }
Example #5
0
    private GameObject GetGameObject(string prefabFullPath, Vector3 pos, Quaternion rot, bool useRotation, enResourceType resourceType, out bool isInit)
    {
        string text = FileManager.EraseExtension(prefabFullPath);
        Queue <PooledGameObjectScript> queue = null;

        if (!m_pooledGameObjectMap.TryGetValue(text.JavaHashCodeIgnoreCase(), out queue))
        {
            queue = new Queue <PooledGameObjectScript>();
            m_pooledGameObjectMap.Add(text.JavaHashCodeIgnoreCase(), queue);
        }
        PooledGameObjectScript pooledGameObjectScript = null;

        while (queue.Count > 0)
        {
            pooledGameObjectScript = queue.Dequeue();
            if (pooledGameObjectScript != null && pooledGameObjectScript.gameObject != null)
            {
                pooledGameObjectScript.gameObject.transform.SetParent(null, true);
                pooledGameObjectScript.gameObject.transform.position   = pos;
                pooledGameObjectScript.gameObject.transform.rotation   = rot;
                pooledGameObjectScript.gameObject.transform.localScale = pooledGameObjectScript.defaultScale;
                break;
            }
            pooledGameObjectScript = null;
        }
        if (pooledGameObjectScript == null)
        {
            pooledGameObjectScript = CreateGameObject(prefabFullPath, pos, rot, useRotation, resourceType, text);
        }
        if (pooledGameObjectScript == null)
        {
            isInit = false;
            return(null);
        }
        isInit = pooledGameObjectScript.isInit;
        pooledGameObjectScript.OnGet();
        return(pooledGameObjectScript.gameObject);
    }