Exemplo n.º 1
0
 public PoolBlock(int size, AP_enum.EmptyBehavior emptyBehavior, int maxSize, AP_enum.MaxEmptyBehavior maxEmptyBehavior, GameObject prefab, bool printLogOnQuit)
 {
     this.size             = size;
     this.emptyBehavior    = emptyBehavior;
     this.maxSize          = maxSize;
     this.maxEmptyBehavior = maxEmptyBehavior;
     this.prefab           = prefab;
     this.printLogOnQuit   = printLogOnQuit;
 }
Exemplo n.º 2
0
    static bool InitializeSpawn(GameObject prefab, float addPool, int minPool, AP_enum.EmptyBehavior emptyBehavior, AP_enum.MaxEmptyBehavior maxEmptyBehavior, bool modBehavior)
    {
        if (prefab == null)
        {
            return(false);
        }                                                       // object wasn't defined

        if (opmScript == null)                                  // object pool manager script not located yet
        {
            opmScript = Object.FindObjectOfType <AP_Manager>(); // find it in the scene
            if (opmScript == null)
            {
                Debug.Log("No Object Pool Manager found in scene."); return(false);
            }                                                                                                             // didn't find an object pool manager
        }
        // found an object pool manager
        return(opmScript.InitializeSpawn(prefab, addPool, minPool, emptyBehavior, maxEmptyBehavior, modBehavior));
    }
Exemplo n.º 3
0
 public static bool InitializeSpawn(GameObject prefab, float addPool, int minPool, AP_enum.EmptyBehavior emptyBehavior, AP_enum.MaxEmptyBehavior maxEmptyBehavior)
 {
     return(InitializeSpawn(prefab, addPool, minPool, emptyBehavior, maxEmptyBehavior, true));
 }
Exemplo n.º 4
0
        public bool InitializeSpawn(GameObject prefab, float addPool, int minPool, AP_enum.EmptyBehavior emptyBehavior, AP_enum.MaxEmptyBehavior maxEmptyBehavior, bool modBehavior)
        {
            if (prefab == null)
            {
                return(false);
            }
            CheckDict();
            bool result     = false;
            bool tempModify = false;

            if (poolRef.ContainsKey(prefab.name) == true && poolRef[prefab.name] == null)
            {                                // check for broken reference
                poolRef.Remove(prefab.name); // remove it
            }
            if (poolRef.ContainsKey(prefab.name) == true)
            {
                result = true; // already have refrence
            }
            else
            {
                if (MakePoolRef(prefab.name) == null)
                { // ref not found
                    if (allowCreate == true)
                    {
                        CreatePool(prefab, 0, 0, emptyBehavior, maxEmptyBehavior);
                        tempModify = true; // may modify a newly created pool
                        result     = true;
                    }
                    else
                    {
                        result = false;
                    }
                }
                else
                {
                    result = true; // ref was created
                }
            }

            if (result == true)
            {     // hava a valid pool ref
                if (allowModify == true || tempModify == true)
                { // may modify a newly created pool
                    if (addPool > 0 || minPool > 0)
                    {
                        int size = poolRef[prefab.name].poolBlock.size;
                        int l1 = 0; int l2 = 0;
                        if (addPool >= 0)
                        {     // not negative
                            if (addPool < 1)
                            { // is a percentage
                                l2 = Mathf.RoundToInt(size * addPool);
                            }
                            else
                            { // not a percentage
                                l1 = Mathf.RoundToInt(addPool);
                            }
                        }
                        int loop = 0;
                        int a    = size == 0 ? 0 : Mathf.Max(l1, l2);
                        if (size < minPool)
                        {
                            loop = minPool - size;
                        }
                        loop += a;
                        for (int i = 0; i < loop; i++)
                        {
                            poolRef[prefab.name].CreateObject(true);
                        }
                        poolRef[prefab.name].poolBlock.maxSize = poolRef[prefab.name].poolBlock.size * 2;
                        if (modBehavior == true)
                        {
                            poolRef[prefab.name].poolBlock.emptyBehavior    = emptyBehavior;
                            poolRef[prefab.name].poolBlock.maxEmptyBehavior = maxEmptyBehavior;
                        }
                    }
                }
            }

            return(result);
        }
Exemplo n.º 5
0
        public void CreatePool(GameObject prefab, int size, int maxSize, AP_enum.EmptyBehavior emptyBehavior, AP_enum.MaxEmptyBehavior maxEmptyBehavior)
        {
            GameObject obj = new GameObject("Object Pool");

            obj.transform.SetParent(transform);
            obj.transform.localPosition = Vector3.zero;
            obj.transform.localRotation = Quaternion.identity;
            AP_Pool script = obj.AddComponent <AP_Pool>();

            if (Application.isPlaying == true)
            {
                obj.name = prefab.name;
                script.poolBlock.size             = size;
                script.poolBlock.maxSize          = maxSize;
                script.poolBlock.emptyBehavior    = emptyBehavior;
                script.poolBlock.maxEmptyBehavior = maxEmptyBehavior;
                script.poolBlock.prefab           = prefab;
                if (prefab)
                {
                    MakePoolRef(prefab.name);
                }
            }
        }
Exemplo n.º 6
0
    static bool InitializeSpawn(GameObject prefab, float addPool, int minPool, AP_enum.EmptyBehavior emptyBehavior, AP_enum.MaxEmptyBehavior maxEmptyBehavior, bool modBehavior)
    {
        if (prefab == null)
        {
            return(false);
        }                                                       // 未定义对象

        if (opmScript == null)                                  // 尚未找到对象池管理器脚本
        {
            opmScript = Object.FindObjectOfType <AP_Manager>(); // 在场景中找到它
            if (opmScript == null)
            {
                Debug.Log("No Object Pool Manager found in scene."); return(false);
            }                                                                                                             // 找不到对象池管理器
        }
        // 找到一个对象池管理器
        return(opmScript.InitializeSpawn(prefab, addPool, minPool, emptyBehavior, maxEmptyBehavior, modBehavior));
    }