using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using LitJson;
|
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
//天赋
|
public partial class HeroUIManager : GameSystemManager<HeroUIManager>
|
{
|
public int normalGiftMaxCnt = 4; //初始天赋格子数
|
public const int giftMaxCnt = 8; //关联界面排版问题,暂时写死,通过觉醒可以增加上限
|
public int maxGiftLevel; //单天赋最高等级,其他功能可能会增加这个上限
|
public int starLevelCanAwake; //x星可以觉醒
|
|
public int washItemID;
|
public int[] washByLockUseCounts;
|
public int canWashStarLevel; //达到X星可以洗练
|
|
public string selectHeroGuidForGiftFunc;//武将主体GUID
|
|
public int eatHeroIDForResult; //等待吞噬结果武将ID 为了弹成功界面使用
|
public string selectHeroGuidForGiftFuncForSuccessWin; //等待服务器返回的武将GUID 显示成功界面内容
|
public List<int> heroBeforeGiftIDList = new List<int>(); //会有重复的ID,不要用字典
|
public List<int> heroBeforeGiftLevelList = new List<int>();
|
|
|
public event Action SelectEatHeroEvent;
|
string m_SelectEatHeroGuid; //被吞噬武将GUID
|
public string selectEatHeroGuid
|
{
|
get { return m_SelectEatHeroGuid; }
|
set
|
{
|
m_SelectEatHeroGuid = value;
|
SelectEatHeroEvent?.Invoke();
|
}
|
}
|
|
#region 洗炼
|
public string selectWashHeroGUID; //被洗练武将GUID
|
public Action changeLockEvent;
|
|
#endregion
|
|
public List<string> heroEatList = new List<string>();
|
|
|
void ParseGiftConfig()
|
{
|
var config = FuncConfigConfig.Get("HeroStarTalent");
|
normalGiftMaxCnt = int.Parse(config.Numerical1);
|
maxGiftLevel = int.Parse(config.Numerical2);
|
starLevelCanAwake = int.Parse(config.Numerical4);
|
|
config = FuncConfigConfig.Get("HeroWash");
|
washItemID = int.Parse(config.Numerical1);
|
washByLockUseCounts = JsonMapper.ToObject<int[]>(config.Numerical2);
|
canWashStarLevel = int.Parse(config.Numerical3);
|
}
|
|
|
//根据天赋锁状态获取消耗的材料数量
|
public int GetTalentLockUseWashCount(HeroInfo hero)
|
{
|
int heroTalentLockCount = hero.GetTalentLockCount();
|
//不够取最后一个
|
if (heroTalentLockCount >= washByLockUseCounts.Length)
|
{
|
heroTalentLockCount = washByLockUseCounts.Length - 1;
|
}
|
return washByLockUseCounts[heroTalentLockCount];
|
}
|
|
|
//天赋格子总数上限
|
public int GetGiftGirdMaxCount(int heroID)
|
{
|
//没有觉醒配置的 为默认4,否则8
|
if (HeroAwakeConfig.GetHeroAwakeConfig(heroID, 1) == null)
|
{
|
return Instance.normalGiftMaxCnt;
|
}
|
return giftMaxCnt;
|
}
|
|
|
|
//星最终上限由品质 和 觉醒决定
|
public int GetMaxStarCount(int heroID, int quality)
|
{
|
if (HeroAwakeConfig.GetHeroAwakeConfig(heroID, 1) == null)
|
{
|
return HeroQualityConfig.Get(quality).InitStarUpper;
|
|
}
|
|
//根据觉醒累计提升星上限
|
int addStarCount = 0;
|
for (int i = 1; i <= HeroAwakeConfig.GetMaxAwakeLV(heroID); i++)
|
{
|
addStarCount += HeroAwakeConfig.GetHeroAwakeConfig(heroID, i).AddStarUpper;
|
}
|
return HeroQualityConfig.Get(quality).InitStarUpper + addStarCount;
|
}
|
|
|
|
//beforeGiftIDList用于对比变化的天赋格子
|
public void RefreshGiftCell(GiftBaseCell[] giftBaseCells, HeroInfo hero, List<int> beforeGiftIDList = null, List<int> beforeGiftLevelList = null)
|
{
|
int showCount = GetGiftGirdMaxCount(hero.heroId);
|
for (int i = 0; i < giftBaseCells.Length; i++)
|
{
|
if (i >= showCount)
|
{
|
giftBaseCells[i].SetActive(false);
|
continue;
|
}
|
|
giftBaseCells[i].SetActive(true);
|
if (i < hero.talentIDList.Count)
|
{
|
int giftID = hero.talentIDList[i];
|
int giftLV = hero.talentLvList[i];
|
int state = 0; //0:不显示 1:新增 2:提升
|
|
if (!beforeGiftIDList.IsNullOrEmpty())
|
{
|
if (i >= beforeGiftIDList.Count)
|
{
|
state = 1;
|
}
|
else
|
{
|
if (giftID != beforeGiftIDList[i])
|
{
|
state = 1;
|
}
|
else
|
{
|
if (giftLV > beforeGiftLevelList[i])
|
{
|
state = 2;
|
}
|
}
|
}
|
}
|
|
giftBaseCells[i].Init(giftID, giftLV, state, hero.heroId, i, hero.awakeLevel);
|
}
|
else
|
{
|
if (!beforeGiftIDList.IsNullOrEmpty())
|
{
|
//对比情况下不显示
|
giftBaseCells[i].SetActive(false);
|
continue;
|
}
|
|
//非对比的显示
|
if (i < normalGiftMaxCnt)
|
{
|
giftBaseCells[i].Init(0, 0);
|
}
|
else
|
{
|
giftBaseCells[i].Init(-1, 0, 0, hero.heroId, i);
|
}
|
}
|
|
}
|
}
|
|
|
public void CacheHeroEatList()
|
{
|
heroEatList = PackManager.Instance.GetSinglePack(PackType.Hero).GetItemGUIDListById(
|
HeroManager.Instance.GetHero(selectHeroGuidForGiftFunc).heroId);
|
heroEatList.Remove(selectHeroGuidForGiftFunc); //排除吞噬主体
|
heroEatList.Sort(CmpDeleteHero);
|
}
|
|
|
|
|
public void ShowStarImg(int starCount, Image[] starImages, bool noStarShow = true)
|
{
|
int imgCount = starImages.Length;
|
for (int i = 0; i < imgCount; i++)
|
{
|
if (starCount == 0 && i == 0)
|
{
|
if (noStarShow)
|
{
|
// 无星级 特殊处理 显示一个空星星
|
starImages[i].SetActive(true);
|
starImages[i].SetSprite("herostar" + starCount);
|
}
|
else
|
{
|
starImages[i].SetActive(false);
|
}
|
}
|
else if ((starCount - 1) % imgCount >= i)
|
{
|
starImages[i].SetActive(true);
|
starImages[i].SetSprite("herostar" + (((starCount - 1) / imgCount) + 1) * imgCount);
|
}
|
else
|
{
|
starImages[i].SetActive(false);
|
}
|
}
|
}
|
|
|
// public ushort ItemIndex; //武将物品所在武将背包位置索引
|
// public byte LockCnt;
|
// public byte[] LockTalentIndexs; //锁定天赋索引列表
|
// public byte OPType; // 操作类型:0-执行洗炼;1-替换原天赋;2-保留原天赋
|
public void SendWash(HeroInfo hero, byte opType)
|
{
|
var pack = new CB235_tagCSHeroWash();
|
pack.ItemIndex = (ushort)hero.itemHero.gridIndex;
|
pack.LockCnt = (byte)hero.talentLockList.Count;
|
pack.LockTalentIndexs = new byte[pack.LockCnt];
|
for (int i = 0; i < pack.LockCnt; i++)
|
{
|
pack.LockTalentIndexs[i] = (byte)hero.talentLockList[i];
|
}
|
pack.OPType = opType;
|
GameNetSystem.Instance.SendInfo(pack);
|
}
|
}
|