//-------------------------------------------------------- // [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(); } } #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 GetResetBackItems(int soulID) { var config = GatherTheSoulConfig.Get(soulID); var lv = model.GetSoulLevel(soulID); Dictionary itemCountDict = new Dictionary(); //只返包含消耗共用材料的部分 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 items = new List(); 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(); } } }