示例#1
0
    public virtual void DestroyObject(bool now = false, float time = 0.0f)
    {
        if (time > 0.0f)
        {
            StartCoroutine(__destroyAfter(time));

            return;
        }

        if (transform.parent != null)
        {
            if (transform.parent.tag == "PoolingContainer")
            {
                _destroy();
                return;
            }
        }

        if (now)
        {
            _destroy();
            return;
        }

        Util_PoolManagerDatabase.GetInstance(0).AddObjectToDestroy(this);

        _destroystate = DestroyState.kPrepareDestroy;
    }
示例#2
0
    private IEnumerator __destroyAfter(float t)
    {
        yield return(new WaitForSeconds(t));

        Util_PoolManagerDatabase.GetInstance(0).AddObjectToDestroy(this);

        _destroystate = DestroyState.kPrepareDestroy;
    }
    IEnumerator __awake()
    {
        int index = 0;
        int count = _poolingDataBase.Length;

        if (count < _poolingDefinitions.Length)
        {
            _poolingDataBase = new Util_PoolManager[_poolingDefinitions.Length];

            while (count < _poolingDefinitions.Length)
            {
                Util_PoolManager o = new Util_PoolManager();

                o._noPooling = _noPooling;

                PoolingDefinition p = _poolingDefinitions[count++];

                if (p._amount == 0 && !_noPooling)
                {
                    Debug.LogWarning("Create a pooling with 0 element!");

                    continue;
                }

                o.Create(p, gameObject);

                yield return(o.waitingForCompletition());

                _poolingDataBase[index++] = o;
            }
        }

        yield return(new WaitForEndOfFrame());

        _loaded = true;

        __ENEMY   = Util_PoolManagerDatabase.GetInstance("ENEMY");
        __FX      = Util_PoolManagerDatabase.GetInstance("FX");
        __BULLETS = Util_PoolManagerDatabase.GetInstance("BULLETS");

                #if UNITY_EDITOR
        string children = "";

        for (int i = 0; i < transform.childCount; ++i)
        {
            children += transform.GetChild(i).name;
            children += "\n";
        }

        Debug.Log(transform.name);
        Debug.Log(children);
                #endif
    }
示例#4
0
 public void UnLoad(string key)
 {
     for (int i = 0; i < transform.childCount; ++i)
     {
         Util_PoolManagerDatabase o = transform.GetChild(i).GetComponent <Util_PoolManagerDatabase>();
         if (o != null && _keys[o._key] == key)
         {
             o.UnLoad();
             return;
         }
     }
 }
    /// <summary>
    /// Gets the instance.
    /// </summary>
    /// <value>The instance.</value>
    public static Util_PoolManagerDatabase GetInstance(string tag)
    {
        if (_instance.ContainsKey(tag))
        {
            Util_PoolManagerDatabase ret = _instance[tag];

            return(ret);
        }
        else
        {
            Debug.LogWarning(string.Format("Cannot found {0} Key in Util_PoolManagerDatabase", tag));
        }

        return(null);
    }
示例#6
0
    public void ResetAllObjects()
    {
        // StartCoroutine(__reset());

//		for(int i = 0; i < _containeres.transform.childCount; ++i) {
//
//			_containeres.transform.GetChild(i).gameObject.SetActive(false);
//		}

        for (int i = 0; i < transform.childCount; ++i)
        {
            Util_PoolManagerDatabase o = transform.GetChild(i).GetComponent <Util_PoolManagerDatabase>();
            if (o != null)
            {
                o.Reset();
            }
        }
    }
    public static GameObject GetObject(string tag, bool autoresize = true, bool forceUseFirst = false)
    {
        char []   splitter = new char[] { '/' };
        string [] args     = tag.Split(splitter, StringSplitOptions.RemoveEmptyEntries);
        if (args.Length != 2)
        {
            Debug.LogWarning(string.Format("*** Util_PoolManagerDatabase: Error tags count (es: <database>/<object_name>: {0}", tag));

            return(null);
        }

        Util_PoolManagerDatabase db = GetInstance(args[0]);

        if (db == null)
        {
            Debug.LogWarning(string.Format("*** Util_PoolManagerDatabase: Database not found: {0}", args[0]));

            return(null);
        }

        Util_PoolManager m = db.GetManager(args[1]);

        if (m == null)
        {
            Debug.LogWarning(string.Format("*** Util_PoolManager: Manager not found: {0}", args[1]));

            return(null);
        }

        GameObject o = GetInstance(args[0]).GetManager(args[1]).GetObject(autoresize, forceUseFirst);

//		if(autoresize) {
//			o = GetInstance(args[0]).GetManager(args[1]).GetObject(false, forceUseFirst);
//			if(o == null) {
//
//				Debug.LogWarning(string.Format("*** Util_PoolManager: Error to create object, waiting for resize: {0}", args[1]));
//				return null;
//			}
//		}
//
        return(o);
    }
示例#8
0
    /// <summary>
    /// Load by specified keys
    /// </summary>
    /// <param name="keys">Keys.</param>
    IEnumerator __load(List <string> keys)
    {
                #if UNITY_EDITOR
        _database.Clear();

        for (int i = 0; i < transform.childCount; ++i)
        {
            Util_PoolManagerDatabase o = transform.GetChild(i).GetComponent <Util_PoolManagerDatabase>();
            if (o != null && keys.Contains(_keys[o._key]))
            {
                _totalToLoad++;
            }

            _database.Add(o);
        }
                #endif

        for (int i = 0; i < transform.childCount; ++i)
        {
            Util_PoolManagerDatabase o = transform.GetChild(i).GetComponent <Util_PoolManagerDatabase>();
            if (o != null && keys.Contains(_keys[o._key]))
            {
                Debug.Log(string.Format("*** Util_PoolLoading: - load {0}", o.name));

                o.Load(true);

                yield return(o.waitingForCompletition());

                _currentLoading++;

                _progress = (float)_currentLoading / (float)_totalToLoad;
            }

            // yield return new WaitForEndOfFrame();
        }

        _progress = 1.0f;

        _loaded = true;
    }
示例#9
0
文件: Test.cs 项目: young1048/Pooling
    IEnumerator __update()
    {
        while (true)
        {
            float r = Random.Range(min, max);

            yield return(new WaitForSeconds(r));

            GameObject o = Util_PoolManagerDatabase.GetObject("MYDATABASE/MyObject");

            if (o != null)
            {
                o.SetActive(true);

                o.transform.position = new Vector3(Random.Range(-2.0f, 2.0f),
                                                   Random.Range(-2.0f, 2.0f),
                                                   Random.Range(-2.0f, 2.0f));

                o.GetComponent <Util_PoolObject>().DestroyObject(time: 2.0f);
            }
        }
    }
示例#10
0
    IEnumerator __update()
    {
        while (true)
        {
            float r = Random.Range(0.0f, .5f);

            yield return(new WaitForSeconds(r));

            // get a object inside databse
            GameObject o = Util_PoolManagerDatabase.GetObject("ENEMY/MyObject");

            if (o != null)
            {
                o.SetActive(true);

                o.transform.position = new Vector3(Random.Range(-2.0f, 2.0f),
                                                   Random.Range(2.0f, 4.0f),
                                                   Random.Range(-2.0f, 2.0f));

                o.GetComponent <Util_PoolObject>().DestroyObject(time: 2.0f);
            }
        }
    }
示例#11
0
    public override void OnInspectorGUI()
    {
        serializedObject.Update();

        Color c = GUI.backgroundColor;         // store value

        GUI.backgroundColor = Color.cyan;
        EditorGUILayout.HelpBox("Auto play. Start initialization whe the object is acivated.", MessageType.Info);
        GUI.backgroundColor = c;

        EditorGUILayout.Space();

        myScript._autoplay = EditorGUILayout.Toggle("Play at Start: ", myScript._autoplay);

        EditorGUILayout.Space();
        EditorGUILayout.Space();

        GUI.backgroundColor = Color.cyan;
        EditorGUILayout.HelpBox("Don't destroy this gameObject!", MessageType.Info);
        GUI.backgroundColor = c;

        EditorGUILayout.Space();

        myScript._dontDestroy = EditorGUILayout.Toggle("Don't Destroy: ", myScript._dontDestroy);

        EditorGUILayout.Space();
        EditorGUILayout.Space();

        GUI.backgroundColor = Color.cyan;
        EditorGUILayout.HelpBox("Key list for load and unload a database. Default is kEverytime.", MessageType.Info);
        GUI.backgroundColor = c;

        EditorGUILayout.Space();

        // DrawDefaultInspector();
        for (int i = 1; i < myScript._keys.Count; ++i)
        {
            EditorGUILayout.Space();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.TextArea(myScript._keys[i], GUILayout.MaxWidth(150));
            GUI.backgroundColor = Color.red;
            if (GUILayout.Button("-", GUILayout.MaxWidth(30)))
            {
                myScript._keys.RemoveAt(i);
                return;
            }
            GUI.backgroundColor = c;
            EditorGUILayout.EndHorizontal();
        }

        GUI.backgroundColor = Color.green;
        if (GUILayout.Button("Add Key"))
        {
            myScript._keys.Add("");
        }
        GUI.backgroundColor = c;

        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUILayout.Space();

        GUI.backgroundColor = Color.cyan;
        EditorGUILayout.HelpBox("Database list:", MessageType.Info);
        GUI.backgroundColor = c;

        for (int i = 0; i < myScript.transform.childCount; ++i)
        {
            Transform t = myScript.transform.GetChild(i);

            Util_PoolManagerDatabase o = t.GetComponent <Util_PoolManagerDatabase>();
            if (o != null)
            {
                EditorGUILayout.Space();
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField(t.name, GUILayout.MaxWidth(150));
                GUI.backgroundColor = Color.red;
                if (GUILayout.Button("-", GUILayout.MaxWidth(30)))
                {
                    DestroyImmediate(t.gameObject);
                    myScript._database.RemoveAt(i);
                    return;
                }

                GUI.backgroundColor = c;
                if (GUILayout.Button(">", GUILayout.MaxWidth(30)))
                {
                    Selection.activeGameObject = t.gameObject;
                }
                EditorGUILayout.EndHorizontal();
            }
        }

        EditorGUILayout.Space();


        GUI.backgroundColor = Color.green;
        if (GUILayout.Button("Add Database"))
        {
            AddDatabase();
        }
        GUI.backgroundColor = c;

        Util_PoolLoading.Instance = myScript;

        serializedObject.ApplyModifiedProperties();
    }
示例#12
0
    private void OnEnable()
    {
        myScript = (Util_PoolManagerDatabase)(target);

        __refresh();
    }