//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Friday, October 27, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using TableConfig; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class GemLevelUpWin : Window { [SerializeField] Image _gemLevelUpPreIcon; [SerializeField] Image _gemLevelUpPreBG; [SerializeField] Image _gemLevelUpPreBind; [SerializeField] GemProperty m_NowGemProperty; [SerializeField] Image _gemLevelUpNextIcon; [SerializeField] Image _gemLevelUpNextBG; [SerializeField] Image _gemLevelUpNextBind; [SerializeField] GemProperty m_NextGemProperty; [SerializeField] List _gemNewIcons; [SerializeField] Text _gemLevelUpCost; [SerializeField] Button _gemlevelUpBtn; [SerializeField] Button _gemlevelCloseBtn; [SerializeField] UIEffect levelUpEffect; [SerializeField] RectTransform m_ContainerCostMoney; [SerializeField] RectTransform m_ContainerCostGem; [SerializeField] RectTransform m_ContainerLevelType; [SerializeField] Button m_MoneyTypeBtn; [SerializeField] Button m_ComposeTypeBtn; [SerializeField] Text m_LevelUpTypeText; [SerializeField] Text m_LevelUpCostGemText; [SerializeField] Button m_SelectTypeBtn; [SerializeField] RedpointBehaviour m_ComposeRedpoint0; [SerializeField] RedpointBehaviour m_ComposeRedpoint1; int gemUpCost = 0; GemModel m_Model; GemModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel()); } } PlayerPackModel m_PackModel; PlayerPackModel packModel { get { return m_PackModel ?? (m_PackModel = ModelCenter.Instance.GetModel()); } } #region Built-in protected override void BindController() { } private void OnGemLevelUp() { if (model.levelUpType == 0) { if (PlayerDatas.Instance.baseData.Gold < gemUpCost) { if (VersionConfig.Get().isBanShu) { SysNotifyMgr.Instance.ShowTip("GoldErr"); return; } WindowCenter.Instance.Open(); return; } } else { int _type = FuncConfigConfig.GetGemTypeByEquipPos(model.presentGemEquip); uint[] stones = PlayerStoneData.Instance.GetStoneInfo(model.presentGemEquip); byte[] stoneBind = PlayerStoneData.Instance.GetStoneBindInfo(model.presentGemEquip); uint id = 0; int _count = 0; int _bind = 0; if (stones != null && model.presentGemHole <= stones.Length) { id = stones[model.presentGemHole - 1]; if(stoneBind!=null&& model.presentGemHole - 1< stoneBind.Length) { _bind = stoneBind[model.presentGemHole - 1]; } } ItemConfig cfg = Config.Instance.Get((int)id); _count = model.GemCountByLevel(_type, cfg.EffectValueB1); if (_count < model.gemComposeCount - 1) { SysNotifyMgr.Instance.ShowTip("GemComposeFail"); return; } if (model.GemCountByLevel(_type, cfg.EffectValueB1, true, _bind) < model.gemComposeCount - 1) { ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("GemComposeFail"), (bool isOk) => { if (isOk) { model.SendGemLevelUp(model.presentGemEquip, model.presentGemHole); } }); return; } } model.SendGemLevelUp(model.presentGemEquip, model.presentGemHole); } protected override void AddListeners() { _gemlevelCloseBtn.onClick.AddListener(CloseClick); _gemlevelUpBtn.onClick.AddListener(OnGemLevelUp); m_MoneyTypeBtn.onClick.AddListener(() => { SelectLevelUpType(0); m_ContainerLevelType.gameObject.SetActive(false); }); m_ComposeTypeBtn.onClick.AddListener(() => { SelectLevelUpType(1); m_ContainerLevelType.gameObject.SetActive(false); }); m_SelectTypeBtn.onClick.AddListener(OnClickSelectType); } protected override void OnPreOpen() { PlayerStoneData.OnRefreshStoneData += OnUpdateGem; packModel.RefreshItemCountAct += RefreshItemCountAct; m_ContainerLevelType.gameObject.SetActive(false); var _hole = Mathf.Max(0, model.presentGemHole - 1); if (_hole < model.gemComposeReds.Count && model.gemComposeReds[_hole].state == RedPointState.Simple) { model.levelUpType = 1; } OnUpdateLevelUp(); UpdateLevelUpType(); m_ComposeRedpoint0.redpointId = GemModel.GEM_REDPOINT * GemModel.REDPOINT_INTERVAL + 20 + model.presentGemHole; m_ComposeRedpoint1.redpointId = GemModel.GEM_REDPOINT * GemModel.REDPOINT_INTERVAL + 20 + model.presentGemHole; } private void RefreshItemCountAct(PackType _type, int arg2, int arg3) { if (_type == PackType.rptItem) { OnUpdateGemCount(); } } private void OnUpdateGemCount() { int _type = FuncConfigConfig.GetGemTypeByEquipPos(model.presentGemEquip); int _count = 0; if (_type != -1) { uint[] stones = PlayerStoneData.Instance.GetStoneInfo(model.presentGemEquip); uint id = 0; if (stones != null && model.presentGemHole <= stones.Length) { id = stones[model.presentGemHole - 1]; } ItemConfig cfg = Config.Instance.Get((int)id); _count = model.GemCountByLevel(_type, cfg.EffectValueB1); var _countStr = StringUtility.Contact(_count < model.gemComposeCount - 1 ? "" : "", model.gemComposeCount - 1, ""); m_LevelUpCostGemText.text = Language.Get("GemLevelUpCostGem", cfg.ItemName, _countStr); } } private void OnUpdateGem() { uint[] stones = PlayerStoneData.Instance.GetStoneInfo(model.presentGemEquip); if (stones != null && model.presentGemHole <= stones.Length) { uint id = stones[model.presentGemHole - 1]; ItemConfig cfg = Config.Instance.Get((int)id); ItemConfig next = ItemConfig.GetGemDataByLevelAndType(cfg.EffectValueB1 + 1, cfg.EffectValueA1); if (next == null) { CloseClick(); } else { levelUpEffect.Play(); OnUpdateLevelUp(); } } } protected override void OnAfterOpen() { } protected override void OnPreClose() { PlayerStoneData.OnRefreshStoneData -= OnUpdateGem; packModel.RefreshItemCountAct -= RefreshItemCountAct; } protected override void OnAfterClose() { } #endregion void OnUpdateLevelUp() { int pos = model.presentGemEquip; uint[] stones = PlayerStoneData.Instance.GetStoneInfo(model.presentGemEquip); byte[] stoneBind= PlayerStoneData.Instance.GetStoneBindInfo(model.presentGemEquip); if (stones != null) { if (model.presentGemHole - 1 >= stones.Length) { return; } var _bind = 0; if (stoneBind != null) { _bind = (model.presentGemHole - 1) < stoneBind.Length ? stoneBind[model.presentGemHole - 1] : 0; } uint id = stones[model.presentGemHole - 1]; ItemConfig cfg = Config.Instance.Get((int)id); if (id == 0 || cfg == null) { return; } _gemLevelUpPreIcon.SetSprite(cfg.IconKey); _gemLevelUpPreBG.SetItemBackGround(cfg.ItemColor); _gemLevelUpPreBind.gameObject.SetActive(_bind == 1); _gemLevelUpNextBind.gameObject.SetActive(_bind == 1); m_NowGemProperty.Display(cfg.ID); ItemConfig next = ItemConfig.GetGemDataByLevelAndType(cfg.EffectValueB1 + 1, cfg.EffectValueA1); if (next != null && cfg.Type == next.Type && cfg.EffectValueA1 == next.EffectValueA1) { _gemlevelUpBtn.interactable = true; _gemLevelUpNextBG.gameObject.SetActive(true); _gemLevelUpNextIcon.gameObject.SetActive(true); m_NextGemProperty.SetActive(true); gemUpCost = model.GemLevelUpCost(cfg.EffectValueB1, model.GetSingleGemPrice(cfg.EffectValueA1)); if (PlayerDatas.Instance.baseData.Gold < gemUpCost) { _gemLevelUpCost.text = UIHelper.GetTextColorByItemColor(TextColType.Red, gemUpCost.ToString(), true); } else { _gemLevelUpCost.text = UIHelper.GetTextColorByItemColor(TextColType.NavyBrown, gemUpCost.ToString()); } OnUpdateGemCount(); _gemLevelUpNextIcon.SetSprite(next.IconKey); _gemLevelUpNextBG.SetItemBackGround(next.ItemColor); m_NextGemProperty.Display(next.ID); _gemNewIcons[0].gameObject.SetActive(cfg.Effect2 == 0 && next.Effect2 != 0); m_NextGemProperty.Display(0, cfg.Effect2 == 0 && next.Effect2 != 0); _gemNewIcons[1].gameObject.SetActive(cfg.Effect3 == 0 && next.Effect3 != 0); m_NextGemProperty.Display(1, cfg.Effect3 == 0 && next.Effect3 != 0); _gemNewIcons[2].gameObject.SetActive(cfg.Effect4 == 0 && next.Effect4 != 0); m_NextGemProperty.Display(2, cfg.Effect4 == 0 && next.Effect4 != 0); } else { _gemLevelUpNextBG.gameObject.SetActive(false); _gemLevelUpNextIcon.gameObject.SetActive(false); m_NextGemProperty.SetActive(false); _gemlevelUpBtn.interactable = false; _gemLevelUpCost.text = (0).ToString(); } } } void UpdateLevelUpType() { m_LevelUpTypeText.text = model.levelUpType == 0 ? Language.Get("GemLevelUpWin_XianYu") : Language.Get("GemLevelUpWin_ TongJiBaoShi"); m_ComposeTypeBtn.image.SetSprite(model.levelUpType == 0 ? "Title_TabDark" : "Title_TabRight"); m_MoneyTypeBtn.image.SetSprite(model.levelUpType == 1 ? "Title_TabDark" : "Title_TabRight"); m_ContainerCostGem.gameObject.SetActive(model.levelUpType == 1); m_ContainerCostMoney.gameObject.SetActive(model.levelUpType == 0); } private void OnClickSelectType() { m_ContainerLevelType.gameObject.SetActive(true); } void SelectLevelUpType(int _type) { model.levelUpType = _type; UpdateLevelUpType(); } [Serializable] public class GemProperty { [SerializeField] Text m_Property0; [SerializeField] Text m_PropertyValue0; [SerializeField] Text m_Property1; [SerializeField] Text m_PropertyValue1; [SerializeField] Text m_Property2; [SerializeField] Text m_PropertyValue2; public void Display(int _gemId) { var _itemCfg = Config.Instance.Get(_gemId); m_Property0.gameObject.SetActive(_itemCfg.Effect2 != 0); m_PropertyValue0.gameObject.SetActive(_itemCfg.Effect2 != 0); if (_itemCfg.Effect2 != 0) { PlayerPropertyConfig _propertyCfg = Config.Instance.Get(_itemCfg.Effect2); m_Property0.text = _propertyCfg.Name; m_PropertyValue0.text = StringUtility.Contact("+", UIHelper.ReplacePercentage(_itemCfg.EffectValueA2, _propertyCfg.ISPercentage), _propertyCfg.ISPercentage == 1 ? "%" : string.Empty); } m_Property1.gameObject.SetActive(_itemCfg.Effect3 != 0); m_PropertyValue1.gameObject.SetActive(_itemCfg.Effect3 != 0); if (_itemCfg.Effect3 != 0) { PlayerPropertyConfig _propertyCfg = Config.Instance.Get(_itemCfg.Effect3); m_Property1.text = _propertyCfg.Name; m_PropertyValue1.text = StringUtility.Contact("+", UIHelper.ReplacePercentage(_itemCfg.EffectValueA3, _propertyCfg.ISPercentage), _propertyCfg.ISPercentage == 1 ? "%" : string.Empty); } m_Property2.gameObject.SetActive(_itemCfg.Effect4 != 0); m_PropertyValue2.gameObject.SetActive(_itemCfg.Effect4 != 0); if (_itemCfg.Effect4 != 0) { PlayerPropertyConfig _propertyCfg = Config.Instance.Get(_itemCfg.Effect4); m_Property2.text = _propertyCfg.Name; m_PropertyValue2.text = StringUtility.Contact("+", UIHelper.ReplacePercentage(_itemCfg.EffectValueA4, _propertyCfg.ISPercentage), _propertyCfg.ISPercentage == 1 ? "%" : string.Empty); } } public void SetActive(bool _active) { m_Property0.gameObject.SetActive(_active); m_PropertyValue0.gameObject.SetActive(_active); m_Property1.gameObject.SetActive(_active); m_PropertyValue1.gameObject.SetActive(_active); m_Property2.gameObject.SetActive(_active); m_PropertyValue2.gameObject.SetActive(_active); } public void Display(int _index,bool _new) { if (_index == 0) { m_Property0.color = _new ? UIHelper.GetUIColor(TextColType.DarkGreen) : UIHelper.GetUIColor(TextColType.NavyBrown); m_PropertyValue0.color = _new ? UIHelper.GetUIColor(TextColType.DarkGreen) : UIHelper.GetUIColor(TextColType.NavyBrown); } else if (_index == 1) { m_Property1.color = _new ? UIHelper.GetUIColor(TextColType.DarkGreen) : UIHelper.GetUIColor(TextColType.NavyBrown); m_PropertyValue1.color = _new ? UIHelper.GetUIColor(TextColType.DarkGreen) : UIHelper.GetUIColor(TextColType.NavyBrown); } else if (_index == 2) { m_Property2.color = _new ? UIHelper.GetUIColor(TextColType.DarkGreen) : UIHelper.GetUIColor(TextColType.NavyBrown); m_PropertyValue2.color = _new ? UIHelper.GetUIColor(TextColType.DarkGreen) : UIHelper.GetUIColor(TextColType.NavyBrown); } } } } }