using System.Collections; using System.Collections.Generic; using UnityEngine; using vnxbqy.UI; public class DropItemPool { static Dictionary dropItemPools = new Dictionary(); public static DropItem RequireDropItem(DropItemType _type) { GameObjectPoolManager.GameObjectPool pool = null; var poolKey = (int)_type; if (!dropItemPools.ContainsKey(poolKey)) { var prefab = UILoader.LoadPrefab(StringUtility.Contact("DropItem_Pattern_", (int)_type)); if (prefab != null) { pool = GameObjectPoolManager.Instance.RequestPool(prefab); dropItemPools[poolKey] = pool; } } else { pool = dropItemPools[poolKey]; } if (pool != null) { var instance = pool.Request(); var dropItem = instance.GetComponent(); dropItem.dropItemType = _type; dropItem.SetActive(true); return dropItem; } else { return null; } } public static void ReycleDropItem(DropItem _dropItem) { var dropItemType = _dropItem.dropItemType; GameObjectPoolManager.GameObjectPool pool; if (dropItemPools.TryGetValue((int)dropItemType, out pool)) { pool.Release(_dropItem.gameObject); _dropItem.transform.SetParent(null); _dropItem.SetActive(false); } } static GameObjectPoolManager.GameObjectPool dropItemNamePool; public static DropItemName RequireDropItemName() { if (dropItemNamePool == null) { var prefab = UILoader.LoadPrefab("DropItemName"); if (prefab != null) { dropItemNamePool = GameObjectPoolManager.Instance.RequestPool(prefab); } } if (dropItemNamePool != null) { var instance = dropItemNamePool.Request(); instance.SetActive(true); return instance.GetComponent(); } else { return null; } } public static void ReycleDropItemName(DropItemName _dropItemName) { if (dropItemNamePool != null) { dropItemNamePool.Release(_dropItemName.gameObject); _dropItemName.transform.SetParent(null); _dropItemName.SetActive(false); } } static GameObjectPoolManager.GameObjectPool dropTracePool; public static DropItemTrace RequireDropItemTrace() { if (dropTracePool == null) { var prefab = UILoader.LoadPrefab("DropItemTrace"); if (prefab != null) { dropTracePool = GameObjectPoolManager.Instance.RequestPool(prefab); } } if (dropTracePool != null) { var instance = dropTracePool.Request(); instance.SetActive(true); return instance.GetComponent(); } else { return null; } } public static void ReycleDropItemTrace(DropItemTrace _dropItemTrace) { if (dropTracePool != null) { dropTracePool.Release(_dropItemTrace.gameObject); _dropItemTrace.transform.SetParent(null); _dropItemTrace.SetActive(false); } } }