using System.Collections.Generic; using System.Linq; using UnityEngine; namespace TyphoonPool { [AddComponentMenu("")] public class PoolManageImpl : MonoBehaviour { //所有池 public readonly Dictionary Pools = new Dictionary(); //增加池 public void AddPool(Pool pool) { Pools[pool.PoolID] = pool; } //移除池 public void RemovePool(ulong poolID) { Pools.Remove(poolID); } //尝试获取池 public bool TryGetPool(ulong poolID, out Pool match) { return Pools.TryGetValue(poolID, out match); } //是否存在池 public bool ContainsPool(ulong poolID) { return Pools.ContainsKey(poolID); } //获取池,如果没有找到会报错 public Pool GetPool(ulong poolID) { return Pools[poolID]; } //获取池,如果没有找到返回null public Pool GetPoolOrDefault(ulong poolID) { if (TryGetPool(poolID, out var match)) { return match; } return null; } public void Recycle(PoolObjectOperation operation) { if (!operation.IsValid) { return; } } //回收池对象 public void Recycle(IPoolObject poolObject) { if (poolObject == null) { #if UNITY_EDITOR Debug.Log($" 警告! {poolObject} 已被销毁,无法回收"); #endif return; } if (Pools.TryGetValue(poolObject.PoolObjectOperation.PoolID, out var match)) { if (match != null) { match.Internal_RecycleObject(poolObject); return; } } #if UNITY_EDITOR Debug.Log($" 警告! {poolObject} 已被销毁,无法回收"); #endif } //回收池对象 public void Recycle(ulong poolID, ulong objectID) { if (TryGetPool(poolID, out var match)) { if (match != null) { match.Internal_RecycleObject(objectID); return; } } #if UNITY_EDITOR Debug.Log($" 警告! 池 PoolID:{poolID} 已被销毁,无法回收"); #endif } //回收池对象 public void Recycle(ulong objectID) { var pools = Pools.Values.ToList(); foreach (var pool in pools) { if (pool != null) { if (pool.ContainsObject(objectID)) { pool.Internal_RecycleObject(objectID); return; } } } #if UNITY_EDITOR Debug.Log($"回收失败,找不到从属的池 objectID:{objectID}"); #endif } } }