using System; using System.Collections.Generic; using System.Text.RegularExpressions; using UnityEngine; namespace ET.Client { public class GameObjectPool : Singleton<GameObjectPool> { private readonly Dictionary<string, AudioClip> audioPool = new(); private readonly Dictionary<string, Sprite> cardSpritePool = new(); //scroll item list //上下02 右1 左3 public Dictionary<int, List<GameObject>> fightCardItemPools = new Dictionary<int, List<GameObject>>(); public Dictionary<int, List<GameObject>> disCardItemPools = new Dictionary<int, List<GameObject>>(); public Dictionary<int, List<GameObject>> havCardItemPools = new Dictionary<int, List<GameObject>>(); public List<GameObject> chatFastItemPools = new List<GameObject>(); public List<GameObject> chatFaceItemPools = new List<GameObject>(); List<int> arealySelCardList = new List<int>(); public void ClearCache() { foreach(var ac in audioPool.Values) { ac.UnloadAudioData(); } audioPool.Clear(); cardSpritePool.Clear(); disCardItemPools.Clear(); fightCardItemPools.Clear(); chatFastItemPools.Clear(); arealySelCardList.Clear(); } public async ETTask<AudioClip> AcquireSound(string abName) { if(audioPool.TryGetValue(abName, out var ac)) { return ac; } //Log.Warning($"not cache audio: ({key})"); await ResourcesComponentHelper.Instance.LoadAssetAsync(GameUtil.Instance.GetSceneComponent(), "fightsound"); UnityEngine.Object soundObj = ResourcesComponentHelper.Instance.GetAssetAsync("fightsound", abName); var aac = soundObj as AudioClip ; aac.LoadAudioData(); audioPool.Add(abName, aac); return aac; } public async ETTask<Sprite> AcquireSprite(string abName) { if (cardSpritePool.ContainsKey(abName)) { return cardSpritePool[abName]; } await ResourcesComponentHelper.Instance.LoadAssetAsync(GameUtil.Instance.GetSceneComponent(), "majiangatlas"); UnityEngine.Object spriteObj = ResourcesComponentHelper.Instance.GetAssetAsync("majiangatlas", abName); Texture2D texture = spriteObj as Texture2D; var sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f), 100f); if (!cardSpritePool.ContainsKey(abName)) { cardSpritePool.Add(abName, sprite); } return sprite; } public void OperatoRarealySelCardList(int operatorType,int val) { if (operatorType == 0) { arealySelCardList.Add(val); } else { arealySelCardList.Remove(val); } } public void ClearRealySelCardList() { arealySelCardList.Clear(); } public List<int> GetRealySelCardList() { arealySelCardList.Sort(); return arealySelCardList; } } }