//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Thursday, March 07, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class EquipGemLevelUpWin : Window { [SerializeField] Transform m_ContainerNow; [SerializeField] ItemBehaviour m_Gem; [SerializeField] PropertyBehaviour[] m_Propertys; [SerializeField] Transform m_ContainerNext; [SerializeField] ItemBehaviour m_LevelUpGem; [SerializeField] PropertyBehaviour[] m_LevelUpPropertys; [SerializeField] Transform[] m_NewSigns; [SerializeField] Transform m_ContainerCostMoney; [SerializeField] Transform m_ContainerCostGem; [SerializeField] Transform m_ContainerLevelType; [SerializeField] Button m_SelectLevelUpType; [SerializeField] Button m_UseMoney; [SerializeField] Button m_UseGem; [SerializeField] Text m_LevelUpType; [SerializeField] Text m_CostMoney; [SerializeField] Text m_CostGem; [SerializeField] RedpointBehaviour m_ComposeRedpoint0; [SerializeField] RedpointBehaviour m_ComposeRedpoint1; [SerializeField] UIEffect m_Effect; [SerializeField] Button m_LevelUp; [SerializeField] Button m_Close; EquipGemModel model { get { return ModelCenter.Instance.GetModel(); } } PackModel packModel { get { return ModelCenter.Instance.GetModel(); } } public static GemEquipType equipType = GemEquipType.MultiEquip; public static int equipLevel = 0; public static int equipPlace = 0; public static int equipHole = 0; int levelUpType = 0; int levelUpCost = 0; #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Close.onClick.AddListener(CloseClick); m_LevelUp.onClick.AddListener(LevelUp); m_UseMoney.onClick.AddListener(() => { SelectLevelUpType(0); m_ContainerLevelType.SetActive(false); }); m_UseGem.onClick.AddListener(() => { SelectLevelUpType(1); m_ContainerLevelType.SetActive(false); }); m_SelectLevelUpType.onClick.AddListener(OnClickSelectType); } protected override void OnPreOpen() { model.equipGemRefresh += EquipGemRefresh; packModel.refreshItemCountEvent += RefreshItemCountAct; m_ContainerLevelType.SetActive(false); int equipGem; model.TryGetEquipGem(equipLevel, equipPlace, equipHole, out equipGem); if (equipGem == 0) { return; } var config = ItemConfig.Get(equipGem); var type = config.EffectValueA1; GemType gemType; if (model.TryGetGemType(type, out gemType)) { m_SelectLevelUpType.SetActive(gemType.shopItemId != 0); if (gemType.shopItemId == 0) { levelUpType = 1; } else { levelUpType = 0; EquipGemRedpoint equipGemRedpoint; if (model.TryGetRedpoint(equipLevel, equipPlace, out equipGemRedpoint)) { var composeRedpoint = equipGemRedpoint.GetComposeRedpoint(equipHole); if (composeRedpoint.state == RedPointState.Simple) { levelUpType = 1; } m_ComposeRedpoint0.redpointId = composeRedpoint.id; m_ComposeRedpoint1.redpointId = composeRedpoint.id; } } } DisplayLevelUp(); DisplayLevelUpType(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { packModel.refreshItemCountEvent -= RefreshItemCountAct; model.equipGemRefresh -= EquipGemRefresh; } protected override void OnAfterClose() { } #endregion private void LevelUp() { if (levelUpType == 0) { if (PlayerDatas.Instance.baseData.diamond < levelUpCost) { if (VersionConfig.Get().isBanShu) { SysNotifyMgr.Instance.ShowTip("GoldErr"); return; } WindowCenter.Instance.Open(); return; } model.SendGemLevelUp(equipLevel, equipPlace, equipHole, levelUpType); } else { int equipGem; model.TryGetEquipGem(equipLevel, equipPlace, equipHole, out equipGem); var config = ItemConfig.Get(equipGem); GemType gemType; model.TryGetGemType(config.EffectValueA1, out gemType); var count = model.GetGemCount(config.EffectValueA1, config.EffectValueB1); if (count < gemType.composeCount - 1) { SysNotifyMgr.Instance.ShowTip("GemComposeFail"); return; } if (gemType.composeItems.ContainsKey(config.EffectValueB1 + 1)) { var item = gemType.composeItems[config.EffectValueB1 + 1]; count = packModel.GetItemCountByID(PackType.Item, item.id); if (count < item.count) { SysNotifyMgr.Instance.ShowTip("GemComposeFail"); return; } } model.SendGemLevelUp(equipLevel, equipPlace, equipHole, levelUpType); } } private void EquipGemRefresh(int level, int place) { if (equipLevel == level && equipPlace == place) { int equipGem; model.TryGetEquipGem(level, place, equipHole, out equipGem); if (model.IsEquipGemMaxLevel(equipGem)) { CloseClick(); } else { m_Effect.Play(); DisplayLevelUp(); } } } private void RefreshItemCountAct(PackType _type, int arg2, int arg3) { if (_type == PackType.Item) { DisplayGemCount(); } } private void DisplayGemCount() { int equipGem; model.TryGetEquipGem(equipLevel, equipPlace, equipHole, out equipGem); var config = ItemConfig.Get(equipGem); var type = config.EffectValueA1; GemType gemType; model.TryGetGemType(type, out gemType); var count = 0; count = model.GetGemCount(type, config.EffectValueB1); var displayString = StringUtility.Contact(count < gemType.composeCount - 1 ? "" : "", gemType.composeCount - 1, ""); var matLabel = string.Empty; if (gemType.composeItems.ContainsKey(config.EffectValueB1 + 1)) { var item = gemType.composeItems[config.EffectValueB1 + 1]; var matConfig = ItemConfig.Get(item.id); count = packModel.GetItemCountByID(PackType.Item, item.id); matLabel = StringUtility.Contact(matConfig.ItemName, "x", count < item.count ? "" : "", item.count, ""); } m_CostGem.text = Language.Get("GemLevelUpCostGem", config.ItemName, displayString + " " + matLabel); } void DisplayLevelUp() { int equipGem; model.TryGetEquipGem(equipLevel, equipPlace, equipHole, out equipGem); EquipGemWin.DisplayProperty(equipGem, m_Propertys); var config = ItemConfig.Get(equipGem); m_Gem.SetItem(equipGem, 1); if (!model.IsEquipGemMaxLevel(equipGem)) { m_ContainerNext.SetActive(true); m_LevelUp.interactable = true; var upConfig = model.GetNextLevelConfig(equipGem); m_LevelUpGem.SetItem(upConfig.ID, 1); EquipGemWin.DisplayProperty(upConfig.ID, m_LevelUpPropertys); var index = 0; bool isNew = config.Effect2 == 0 && upConfig.Effect2 != 0; m_NewSigns[index].SetActive(isNew); m_LevelUpPropertys[index].SetColor(isNew ? TextColType.DarkGreen : TextColType.NavyBrown, false); index++; isNew = config.Effect3 == 0 && upConfig.Effect3 != 0; m_NewSigns[index].SetActive(isNew); m_LevelUpPropertys[index].SetColor(isNew ? TextColType.DarkGreen : TextColType.NavyBrown, false); index++; isNew = config.Effect4 == 0 && upConfig.Effect4 != 0; m_NewSigns[index].SetActive(isNew); m_LevelUpPropertys[index].SetColor(isNew ? TextColType.DarkGreen : TextColType.NavyBrown, false); index++; levelUpCost = model.GetGemLevelUpCost(config.EffectValueA1, config.EffectValueB1); if (PlayerDatas.Instance.baseData.diamond < levelUpCost) { m_CostMoney.text = UIHelper.AppendColor(TextColType.Red, levelUpCost.ToString(), true); } else { m_CostMoney.text = UIHelper.AppendColor(TextColType.NavyBrown, levelUpCost.ToString()); } DisplayGemCount(); } else { m_ContainerNext.SetActive(false); m_LevelUp.interactable = false; m_CostMoney.text = (0).ToString(); } } void DisplayLevelUpType() { m_LevelUpType.text = levelUpType == 0 ? Language.Get("GemLevelUpWin_XianYu") : Language.Get("GemLevelUpWin_ TongJiBaoShi"); m_UseGem.image.SetSprite(levelUpType == 0 ? "Title_TabDark" : "Title_TabRight"); m_UseMoney.image.SetSprite(levelUpType == 1 ? "Title_TabDark" : "Title_TabRight"); m_ContainerCostGem.SetActive(levelUpType == 1); m_ContainerCostMoney.SetActive(levelUpType == 0); } private void OnClickSelectType() { m_ContainerLevelType.SetActive(true); } void SelectLevelUpType(int _type) { levelUpType = _type; DisplayLevelUpType(); } } }