//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, December 12, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using TableConfig; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { [XLua.Hotfix] public class GatherSoulLevelUpWin : Window { [SerializeField] Text m_ItemName; [SerializeField] Text m_Level; [SerializeField] Image m_Icon; [SerializeField] PropertyBehaviour[] m_Propertys; [SerializeField] Image[] m_Arrows; [SerializeField] Text m_LevelUpCost; [SerializeField] Button m_LevelUp; [SerializeField] Button m_Close; [SerializeField] RectTransform m_ContainerHighest; [SerializeField] RectTransform m_ContainerLevelUp; public static int selectHole = 0; int level = 0; GatheringSoulModel model { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Close.onClick.AddListener(CloseClick); m_LevelUp.onClick.AddListener(LevelUp); } protected override void OnPreOpen() { Display(); PlayerDatas.Instance.PlayerDataRefreshInfoEvent += PlayerDataRefreshInfoEvent; model.gatherSoulHoleRefresh += GatherSoulHoleRefresh; } protected override void OnAfterOpen() { } protected override void OnPreClose() { PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= PlayerDataRefreshInfoEvent; model.gatherSoulHoleRefresh -= GatherSoulHoleRefresh; } protected override void OnAfterClose() { } #endregion void Display() { DisplayBase(); DisplayCost(); DisplayProperty(); } void DisplayBase() { GatherSoulItem item; if (model.TryGetItem(selectHole, out item)) { var itemConfig = Config.Instance.Get(item.id); m_ItemName.text = itemConfig.ItemName; m_ItemName.color = UIHelper.GetUIColor(itemConfig.ItemColor); m_Level.text = Language.Get("Z1024", item.level); m_Icon.SetSprite(itemConfig.IconKey); level = item.level; } } void DisplayProperty() { GatherSoulItem item; if (model.TryGetItem(selectHole, out item) && model.gatherSoulPropertys.ContainsKey(item.id)) { bool isMaxLevle = model.IsGatherSoulMaxLevel(item.id, item.level); var list = model.gatherSoulPropertys[item.id]; for (int i = 0; i < m_Propertys.Length; i++) { m_Propertys[i].gameObject.SetActive(i < list.Count); if (i < list.Count) { var valueNow = model.GetPropertyValue(item.id, list[i], item.level); var valueNext = isMaxLevle ? 0 : model.GetPropertyValue(item.id, list[i], item.level + 1); m_Propertys[i].DisplayUp(list[i], valueNow, valueNext); } } for (int i = 0; i < m_Arrows.Length; i++) { m_Arrows[i].gameObject.SetActive(!isMaxLevle); } } } void DisplayCost() { GatherSoulItem item; if (model.TryGetItem(selectHole, out item)) { var levelUpCost = model.RequireLevelUpCost(item); var soulDust = UIHelper.GetMoneyCnt(28); var satisfy = soulDust >= (ulong)levelUpCost; m_LevelUpCost.text = StringUtility.Contact( UIHelper.AppendStringColor(satisfy ? TextColType.NavyBrown : TextColType.Red, soulDust.ToString()) , "/", levelUpCost); bool isMaxLevle = model.IsGatherSoulMaxLevel(item.id, item.level); m_ContainerLevelUp.gameObject.SetActive(!isMaxLevle); m_ContainerHighest.gameObject.SetActive(isMaxLevle); } } private void PlayerDataRefreshInfoEvent(PlayerDataRefresh refreshType) { if (refreshType == PlayerDataRefresh.CDBPlayerRefresh_SoulDust) { DisplayCost(); } } private void GatherSoulHoleRefresh(int hole) { if (hole == selectHole) { GatherSoulItem item; if (!model.TryGetItem(hole, out item)) { CloseImmediately(); return; } var record = level; Display(); if (level > record && model.serverInited) { EffectMgr.Instance.PlayUIEffect(3078, 3100, m_Icon.transform, false); } } } private void LevelUp() { GatherSoulItem item; if (model.TryGetItem(selectHole, out item)) { var error = 0; if (!model.SatisfyLevelUp(item, out error)) { model.DisplayLevelUpError(error); } else { CA518_tagCMGatherSoulUp pak = new CA518_tagCMGatherSoulUp(); pak.PlaceType = (byte)item.placeType; pak.PlaceIndex = (ushort)item.index; GameNetSystem.Instance.SendInfo(pak); } } } } }