//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Wednesday, December 12, 2018
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
using UnityEngine.UI;
|
using vnxbqy.UI;
|
|
namespace vnxbqy.UI
|
{
|
|
public class GatherSoulLevelUpWin : Window
|
{
|
[SerializeField] Text m_HoleTitle;
|
[SerializeField] Button m_Close;
|
[SerializeField] Button m_Reset;
|
[SerializeField] Text m_ItemNameLV;
|
[SerializeField] Image m_Icon;
|
[SerializeField] Image m_IconBG;
|
[SerializeField] Button m_OnFight;
|
[SerializeField] Text m_FightState;
|
[SerializeField] PropertyBehaviour[] m_Propertys;
|
[SerializeField] Image[] m_Arrows;
|
[SerializeField] RichText m_SkillDesc;
|
[SerializeField] Text m_LevelUpCost;
|
[SerializeField] Text m_PieceCost;
|
[SerializeField] Image m_PieceImg;
|
[SerializeField] Button m_LevelUp;
|
[SerializeField] Text m_LevelText; //激活或升级
|
[SerializeField] Transform m_MaxLV;
|
[SerializeField] UIEffect m_ContainerLevelUp;
|
|
|
GatheringSoulModel model
|
{
|
get { return ModelCenter.Instance.GetModel<GatheringSoulModel>(); }
|
}
|
#region Built-in
|
protected override void BindController()
|
{
|
}
|
|
protected override void AddListeners()
|
{
|
m_Close.AddListener(CloseClick);
|
m_Reset.AddListener(ResetClick);
|
m_OnFight.AddListener(() => {
|
model.SendGatherTheSoulOP(model.selectSoulID, 1);
|
});
|
m_LevelUp.AddListener(LevelUP);
|
}
|
|
protected override void OnPreOpen()
|
{
|
model.UpdateSoulInfos += UpdateSoulInfo;
|
model.OnGatherSoulHoleRefresh += UpdateHoleInfo;
|
Display();
|
}
|
|
protected override void OnAfterOpen()
|
{
|
}
|
|
protected override void OnPreClose()
|
{
|
model.UpdateSoulInfos -= UpdateSoulInfo;
|
model.OnGatherSoulHoleRefresh -= UpdateHoleInfo;
|
}
|
|
protected override void OnAfterClose()
|
{
|
}
|
#endregion
|
|
void Display()
|
{
|
var config = GatherTheSoulConfig.Get(model.selectSoulID);
|
m_HoleTitle.text = UIHelper.AppendColor(config.SoulColor, Language.Get("GatherSoulName_" + config.HoleNum), true);
|
|
m_Icon.SetSprite(string.Format("FuncSoul_{0}", model.selectSoulID));
|
m_IconBG.SetItemBackGround(config.SoulColor);
|
|
UpdateSoulInfo(false);
|
UpdateHoleInfo();
|
|
}
|
|
void UpdateSoulInfo(bool noChangeCnt)
|
{
|
var config = GatherTheSoulConfig.Get(model.selectSoulID);
|
int lv = model.GetSoulLevel(model.selectSoulID);
|
var lvConfig = GatherTheSoulLVConfig.GetSoulLVConfig(model.selectSoulID, lv);
|
var nextLVConfig = GatherTheSoulLVConfig.GetSoulLVConfig(model.selectSoulID, lv + 1);
|
|
m_ItemNameLV.text = UIHelper.AppendColor(config.SoulColor, Language.Get("FuncSoul_" + model.selectSoulID) + " " + Language.Get("PlayerDetail_Level", model.GetSoulLevel(model.selectSoulID)), true);
|
|
int attrCount = lvConfig == null ? nextLVConfig.LVAttrType.Length : lvConfig.LVAttrType.Length;
|
bool isMaxLV = nextLVConfig == null;
|
for (int i = 0;i < m_Propertys.Length; i++)
|
{
|
if (i < attrCount)
|
{
|
m_Propertys[i].SetActive(true);
|
if (isMaxLV)
|
{
|
m_Propertys[i].DisplayResul(lvConfig.LVAttrType[i], lvConfig.LVAttrValue[i], 0);
|
m_Arrows[i].SetActive(false);
|
}
|
else
|
{
|
m_Propertys[i].DisplayResul(nextLVConfig.LVAttrType[i], lvConfig == null ? 0 : lvConfig.LVAttrValue[i], nextLVConfig.LVAttrValue[i]);
|
m_Arrows[i].SetActive(true);
|
}
|
}
|
else
|
{
|
m_Propertys[i].SetActive(false);
|
}
|
}
|
|
//L1120 ({0}级解锁)
|
//MountPanel_ImpactTxt_2 下一级效果
|
// 下一级效果({0}级解锁)
|
//TreasureSkillLv 技能等级:
|
var skillLVInfo = model.GetNextSkillLV(model.selectSoulID); //下一个技能等级 下一个激活聚魂等级
|
|
if (lvConfig == null)
|
{
|
//未激活只显示下一个技能描述
|
var nextSkillConfig = SkillConfig.Get(config.SoulSkillTypeID + skillLVInfo.x - 1);
|
m_SkillDesc.text = StringUtility.Contact(Language.Get("MountPanel_ImpactTxt_2"), " ", Language.Get("L1120", skillLVInfo.y), "\n",
|
nextSkillConfig.Description);
|
}
|
else if (skillLVInfo.x == 0)
|
{
|
//满级
|
var skillConfig = SkillConfig.Get(config.SoulSkillTypeID + config.SoulSkillLVList.Length - 1);
|
m_SkillDesc.text = StringUtility.Contact(Language.Get("TreasureSkillLv"), " ", skillConfig.SkillLV, "\n",
|
skillConfig.Description);
|
}
|
else
|
{
|
//升级
|
var nextSkillConfig = SkillConfig.Get(config.SoulSkillTypeID + skillLVInfo.x - 1);
|
var skillConfig = SkillConfig.Get(config.SoulSkillTypeID + skillLVInfo.x - 2);
|
m_SkillDesc.text = StringUtility.Contact(Language.Get("TreasureSkillLv"), " ", skillConfig.SkillLV, "\n",
|
skillConfig.Description, "\n", Language.Get("MountPanel_ImpactTxt_2"), " ", Language.Get("L1120", skillLVInfo.y), "\n",
|
nextSkillConfig.Description);
|
}
|
|
m_MaxLV.SetActive(isMaxLV);
|
m_LevelUp.SetActive(!isMaxLV);
|
|
if (!isMaxLV)
|
{
|
m_LevelUpCost.text = UIHelper.AppendColor((ulong)nextLVConfig.NeedSoulValue > UIHelper.GetMoneyCnt(44) ? TextColType.Red: TextColType.Green,
|
string.Format("{0}/{1}", UIHelper.GetMoneyCnt(44), nextLVConfig.NeedSoulValue));
|
m_PieceCost.text = UIHelper.AppendColor(model.GetSoulItemCount(model.selectSoulID) < nextLVConfig.NeedPiece ? TextColType.Red : TextColType.Green,
|
string.Format("{0}/{1}", model.GetSoulItemCount(model.selectSoulID), nextLVConfig.NeedPiece));
|
m_PieceImg.SetSprite(ItemConfig.Get(config.PieceItemID).IconKey);
|
|
m_LevelText.text = lvConfig == null ? Language.Get("L1130") : Language.Get("ItemHandle_LevelUp");
|
}
|
|
UpdateHoleInfo();
|
}
|
|
|
|
void UpdateHoleInfo()
|
{
|
var config = GatherTheSoulConfig.Get(model.selectSoulID);
|
bool isOnFight = model.GetHoleSoulID(config.HoleNum) == model.selectSoulID;
|
m_OnFight.SetActive(model.GetSoulLevel(model.selectSoulID) != 0);
|
if (isOnFight)
|
{
|
//出战中
|
m_FightState.text = Language.Get("Petwin5");
|
m_OnFight.interactable = false;
|
m_OnFight.SetColorful(null, false);
|
}
|
else
|
{
|
m_FightState.text = Language.Get("DogzFunc105");
|
m_OnFight.interactable = true;
|
m_OnFight.SetColorful(null, true);
|
}
|
}
|
|
|
|
void ResetClick()
|
{
|
int lv = model.GetSoulLevel(model.selectSoulID);
|
var config = GatherTheSoulLVConfig.GetSoulLVConfig(model.selectSoulID, lv);
|
if (config == null || config.NeedSoulValue <= 0)
|
{
|
SysNotifyMgr.Instance.ShowTip("FuncNoReset");
|
return;
|
}
|
|
ConfirmCancel.ShowItemsConfirm(GetResetBackItems(model.selectSoulID), Language.Get("tdlb14"), Language.Get("FuncResetInfo"), Language.Get("tdlb14"), () => {
|
|
if (UIHelper.GetMoneyCnt(model.resetMoneyType) < (ulong)model.resetMoney)
|
{
|
SysNotifyMgr.Instance.ShowTip("LackMoney", model.resetMoneyType);
|
return;
|
}
|
|
model.SendGatherTheSoulOP(model.selectSoulID, 3);
|
}, model.resetMoney, model.resetMoneyType);
|
}
|
|
List<Item> GetResetBackItems(int soulID)
|
{
|
|
var config = GatherTheSoulConfig.Get(soulID);
|
var lv = model.GetSoulLevel(soulID);
|
|
Dictionary<int, int> itemCountDict = new Dictionary<int, int>();
|
|
//只返包含消耗共用材料的部分
|
for (int level = lv; level > 1; level--)
|
{
|
var lvConfig = GatherTheSoulLVConfig.GetSoulLVConfig(soulID, level);
|
if (lvConfig == null)
|
{
|
break;
|
}
|
if (lvConfig.NeedSoulValue == 0)
|
break;
|
|
if (itemCountDict.ContainsKey(GatheringSoulModel.soulDustItemID))
|
{
|
itemCountDict[GatheringSoulModel.soulDustItemID] += lvConfig.NeedSoulValue;
|
}
|
else
|
{
|
itemCountDict.Add(GatheringSoulModel.soulDustItemID, lvConfig.NeedSoulValue);
|
}
|
|
if (lvConfig.NeedPiece > 0)
|
{
|
if (itemCountDict.ContainsKey(config.PieceItemID))
|
{
|
itemCountDict[config.PieceItemID] += lvConfig.NeedPiece;
|
}
|
else
|
{
|
itemCountDict.Add(config.PieceItemID, lvConfig.NeedPiece);
|
}
|
}
|
|
}
|
|
List<Item> items = new List<Item>();
|
foreach (var item in itemCountDict)
|
{
|
items.Add(new Item(item.Key, item.Value));
|
}
|
|
return items;
|
}
|
|
void LevelUP()
|
{
|
LimitedTimeLuxuryGiftModel.Instance.IsItemIdShow(29, GatheringSoulModel.xbItemID, 100, 1, 0);
|
int lv = model.GetSoulLevel(model.selectSoulID);
|
var config = GatherTheSoulLVConfig.GetSoulLVConfig(model.selectSoulID, lv + 1);
|
if (config.NeedSoulValue > 0 && UIHelper.GetMoneyCnt(44) < (ulong)config.NeedSoulValue)
|
{
|
SysNotifyMgr.Instance.ShowTip("NotEnoughMaterial");
|
return;
|
}
|
|
if (config.NeedPiece > 0 && model.GetSoulItemCount(model.selectSoulID) < config.NeedPiece)
|
{
|
SysNotifyMgr.Instance.ShowTip("NotEnoughMaterial");
|
return;
|
}
|
|
model.SendGatherTheSoulOP(model.selectSoulID, 0);
|
m_ContainerLevelUp.Play();
|
}
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|