using System.Collections.Generic;
|
using UnityEngine;
|
using System;
|
using System.Linq;
|
|
public class HeroManager : GameSystemManager<HeroManager>
|
{
|
//武将和图鉴的关系
|
//同一个武将图鉴,可能有多个武将(物品)数据,或者没有武将,但是有图鉴信息
|
//初始创建(0725),后续跟随背包事件增加删除 key = guid
|
protected Dictionary<string, HeroInfo> heroInfoDict = new Dictionary<string, HeroInfo>();
|
|
|
|
//武将红点
|
//MainRedDot.HeroCardRedpoint * 1000 + hero.itemHero.gridIndex;
|
|
public Action<HeroInfo> onNewHeroEvent;
|
|
public Action<HeroInfo> onHeroChangeEvent;
|
|
public Action<HeroInfo> 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);
|
|
if (null != heroInfo)
|
onHeroDeleteEvent?.Invoke(heroInfo);
|
}
|
}
|
|
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.CalculatePower(false);
|
long power2 = b.CalculatePower(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);
|
}
|
}
|