using System.Collections.Generic; using UnityEngine; using System; using System.Linq; public class HeroManager : GameSystemManager { //武将和图鉴的关系 //同一个武将图鉴,可能有多个武将(物品)数据,或者没有武将,但是有图鉴信息 //初始创建(0725),后续跟随背包事件增加删除 key = guid protected Dictionary heroInfoDict = new Dictionary(); public Action onHeroChangeEvent; public Action onHeroDeleteEvent; public override void Init() { base.Init(); PackManager.Instance.ChangeItemEvent += ChangeHero; PackManager.Instance.DeleteItemEvent += DeleteHero; DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize; } public override void Release() { base.Release(); PackManager.Instance.ChangeItemEvent -= ChangeHero; PackManager.Instance.DeleteItemEvent -= DeleteHero; DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize; } void OnBeforePlayerDataInitialize() { heroInfoDict.Clear(); } // isCreate bool:true代表创建 false 刷新触发 void ChangeHero(PackType packType, string guid, bool isCreate) { if (packType == PackType.Hero) { HeroInfo heroInfo = null; if (!heroInfoDict.TryGetValue(guid, out heroInfo)) { heroInfo = new HeroInfo(PackManager.Instance.GetItemByGuid(guid)); heroInfoDict.Add(guid, heroInfo); } else { heroInfo.UpdateHero(PackManager.Instance.GetItemByGuid(guid)); } onHeroChangeEvent?.Invoke(heroInfo); } } void DeleteHero(PackType packType, string guid, int itemID, int index, int clearType) { if (packType == PackType.Hero) { HeroInfo heroInfo = null; heroInfoDict.TryGetValue(guid, out heroInfo); heroInfoDict.Remove(guid); onHeroDeleteEvent?.Invoke(itemID); } } public HeroInfo GetHero(string guid) { if (!heroInfoDict.ContainsKey(guid)) return null; return heroInfoDict[guid]; } public List GetHeroList() { return heroInfoDict.Values.ToList(); } public List GetHeroGuidList(int job = 0, int country = 0) { if (job == 0 && country == 0) return heroInfoDict.Keys.ToList(); List retGuidList = new List(); foreach (string guid in heroInfoDict.Keys) { HeroInfo heroInfo = heroInfoDict[guid]; //0代表全部 if (job == 0 || country == 0) { if (job != 0 && job == heroInfo.heroConfig.Class) retGuidList.Add(guid); if (country != 0 && country == heroInfo.heroConfig.Country) retGuidList.Add(guid); } else { if (job == heroInfo.heroConfig.Class && country == heroInfo.heroConfig.Country) retGuidList.Add(guid); } } return retGuidList; } public List GetPowerfulHeroList() { List heroList = new List(heroInfoDict.Values); heroList.Sort((a, b) => { long power1 = a.CalculatePower(false); long power2 = b.CalculatePower(false); if (power1 == power2) { return 0; } return power1 > power2 ? -1 : 1; }); List retList = new List(); for (int i = 0; i < TeamConst.MaxTeamHeroCount && i < heroList.Count; i++) { retList.Add(heroList[i]); } return retList; } public int GetHeroCount() { return heroInfoDict.Count; } public bool HasHero(int heroID) { return PackManager.Instance.GetSinglePack(PackType.Hero).HasItem(heroID); } public int GetHeroCountByID(int heroID) { return (int)PackManager.Instance.GetSinglePack(PackType.Hero).GetCountById(heroID); } }