using System.Collections.Generic;
|
using UnityEngine;
|
using System;
|
|
public class HeroManager : GameSystemManager<HeroManager>
|
{
|
protected Dictionary<string, HeroInfo> heroInfoDict = new Dictionary<string, HeroInfo>();
|
|
public Action<HeroInfo> onNewHeroEvent;
|
|
public Action<HeroInfo> onHeroChangeEvent;
|
|
public override void Init()
|
{
|
base.Init();
|
|
// 注册一点事件
|
PackManager.Instance.refrechPackEvent += refrechPackEvent;
|
}
|
|
public override void Release()
|
{
|
base.Release();
|
PackManager.Instance.refrechPackEvent -= refrechPackEvent;
|
}
|
|
public override void RequestNessaryData()
|
{
|
base.RequestNessaryData();
|
|
|
}
|
|
public void refrechPackEvent(PackType packType)
|
{
|
if (packType == PackType.Hero)
|
{
|
// bool change = false;
|
bool isNew = false;
|
// 如果有分批次初始化可能还要麻烦一点?先看看
|
bool isInit = heroInfoDict.Count >= 0;
|
|
SinglePack heroPack = PackManager.Instance.GetSinglePack(packType);
|
|
Dictionary<int, ItemModel> heroes = heroPack.GetAllItems();
|
|
foreach (ItemModel hero in heroes.Values)
|
{
|
HeroInfo heroInfo = null;
|
if (!heroInfoDict.TryGetValue(hero.guid, out heroInfo))
|
{
|
heroInfo = new HeroInfo(hero);
|
heroInfoDict.Add(hero.guid, heroInfo);
|
if (!isInit)
|
{
|
isNew = true;
|
onNewHeroEvent?.Invoke(heroInfo);
|
}
|
}
|
else
|
{
|
heroInfo.UpdateHero(hero);
|
// 也有可能不是change
|
// change = true;
|
// onHeroChangeEvent?.Invoke(heroInfo);
|
}
|
}
|
}
|
}
|
|
public List<HeroInfo> GetPowerfulHeroList()
|
{
|
List<HeroInfo> heroList = new List<HeroInfo>(heroInfoDict.Values);
|
|
heroList.Sort((a, b) =>
|
{
|
int power1 = a.CalculatePower();
|
int power2 = b.CalculatePower();
|
|
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 override bool IsNessaryDataReady()
|
// {
|
// return true;
|
// }
|
|
}
|