| | |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | | using System; |
| | | using System.Linq; |
| | | |
| | | public class HeroManager : GameSystemManager<HeroManager> |
| | | { |
| | | protected Dictionary<long, HeroInfo> heroInfoDict = new Dictionary<long, HeroInfo>(); |
| | | //武将和图鉴的关系 |
| | | //同一个武将图鉴,可能有多个武将(物品)数据,或者没有武将,但是有图鉴信息 |
| | | //初始创建(0725),后续跟随背包事件增加删除 key = guid |
| | | protected Dictionary<string, HeroInfo> heroInfoDict = new Dictionary<string, HeroInfo>(); |
| | | |
| | | public Action<HeroInfo> onHeroChangeEvent; |
| | | |
| | | public Action<int> 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; |
| | | } |
| | | |
| | | public override void RequestNessaryData() |
| | | void OnBeforePlayerDataInitialize() |
| | | { |
| | | base.RequestNessaryData(); |
| | | |
| | | heroInfoDict.Clear(); |
| | | } |
| | | |
| | | // public override bool IsNessaryDataReady() |
| | | // { |
| | | // return true; |
| | | // } |
| | | |
| | | // 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<HeroInfo> GetHeroList() |
| | | { |
| | | return heroInfoDict.Values.ToList(); |
| | | } |
| | | |
| | | public List<string> GetHeroGuidList(int job = 0, int country = 0) |
| | | { |
| | | if (job == 0 && country == 0) |
| | | return heroInfoDict.Keys.ToList(); |
| | | |
| | | |
| | | List<string> retGuidList = new List<string>(); |
| | | 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<HeroInfo> GetPowerfulHeroList() |
| | | { |
| | | List<HeroInfo> heroList = new List<HeroInfo>(heroInfoDict.Values); |
| | | |
| | | heroList.Sort((a, b) => |
| | | { |
| | | long power1 = a.CalculateFightPower(false); |
| | | long power2 = b.CalculateFightPower(false); |
| | | |
| | | if (power1 == power2) |
| | | { |
| | | return 0; |
| | | } |
| | | |
| | | return power1 > power2 ? -1 : 1; |
| | | }); |
| | | |
| | | List<HeroInfo> retList = new List<HeroInfo>(); |
| | | |
| | | 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); |
| | | } |
| | | } |