//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Friday, October 27, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { [XLua.Hotfix] 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()); } } JadeDynastyGemModel jadeDynastyGemModel { get { return ModelCenter.Instance.GetModel(); } } PlayerPackModel m_PackModel; PlayerPackModel packModel { get { return m_PackModel ?? (m_PackModel = ModelCenter.Instance.GetModel()); } } public static PackType packType = PackType.rptEquip; public static int equipPlace = 0; public static int equipHole = 0; #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 { var _type = 0; var id = 0; int _count = 0; int _bind = 0; if (packType == PackType.rptEquip) { _type = FuncConfigConfig.GetGemTypeByEquipPos(equipPlace); uint[] stones = PlayerStoneData.Instance.GetStoneInfo(equipPlace); byte[] stoneBind = PlayerStoneData.Instance.GetStoneBindInfo(equipPlace); if (stones != null && equipHole < stones.Length) { id = (int)stones[equipHole]; if (stoneBind != null && equipHole < stoneBind.Length) { _bind = stoneBind[equipHole]; } } } else if (packType == PackType.rptJadeDynastyEquip) { _type = jadeDynastyGemModel.GetGemType(equipPlace); JadeDynastyGemModel.GemEquipData equipData; if (jadeDynastyGemModel.TryGetEquipGems(equipPlace, out equipData)) { id = (int)equipData.items[equipHole]; _bind = equipData.binds[equipHole]; } } ItemConfig cfg = ItemConfig.Get((int)id); if (packType == PackType.rptEquip) { _count = model.GemCountByLevel(_type, cfg.EffectValueB1); } else if (packType == PackType.rptJadeDynastyEquip) { _count = jadeDynastyGemModel.GemCountByLevel(_type, cfg.EffectValueB1); } if (_count < model.gemComposeCount - 1) { SysNotifyMgr.Instance.ShowTip("GemComposeFail"); return; } var realCount = 0; if (packType == PackType.rptEquip) { realCount = model.GemCountByLevel(_type, cfg.EffectValueB1, true, _bind); } else if (packType == PackType.rptJadeDynastyEquip) { realCount = jadeDynastyGemModel.GemCountByLevel(_type, cfg.EffectValueB1, true, _bind); } if (realCount < model.gemComposeCount - 1) { ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("GemComposeFail"), (bool isOk) => { if (isOk) { model.SendGemLevelUp(equipPlace, equipHole); } }); return; } } model.SendGemLevelUp(equipPlace, equipHole); } 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; jadeDynastyGemModel.equipGemRefresh += EquipGemRefresh; packModel.RefreshItemCountAct += RefreshItemCountAct; m_ContainerLevelType.gameObject.SetActive(false); if (packType == PackType.rptEquip) { if (equipHole < model.gemComposeReds.Count && model.gemComposeReds[equipHole].state == RedPointState.Simple) { model.levelUpType = 1; } m_ComposeRedpoint0.redpointId = GemModel.GEM_REDPOINT * GemModel.REDPOINT_INTERVAL + 20 + equipHole + 1; m_ComposeRedpoint1.redpointId = GemModel.GEM_REDPOINT * GemModel.REDPOINT_INTERVAL + 20 + equipHole + 1; m_SelectTypeBtn.gameObject.SetActive(true); } else if (packType == PackType.rptJadeDynastyEquip) { model.levelUpType = 1; m_ComposeRedpoint0.redpointId = 0; m_ComposeRedpoint1.redpointId = 0; var type = jadeDynastyGemModel.GetGemType(equipPlace); m_SelectTypeBtn.gameObject.SetActive(model.gemShopIds.ContainsKey(type)); if (model.gemShopIds.ContainsKey(type)) { if (equipHole < jadeDynastyGemModel.gemComposeReds.Count && jadeDynastyGemModel.gemComposeReds[equipHole].state == RedPointState.Simple) { model.levelUpType = 1; } else { model.levelUpType = 0; } } } OnUpdateLevelUp(); UpdateLevelUpType(); } private void EquipGemRefresh() { JadeDynastyGemModel.GemEquipData equipData; if(jadeDynastyGemModel.TryGetEquipGems(equipPlace,out equipData)) { int id = (int)equipData.items[equipHole]; if (jadeDynastyGemModel.IsHightestLevelGem(id)) { CloseClick(); } else { levelUpEffect.Play(); OnUpdateLevelUp(); } } } private void RefreshItemCountAct(PackType _type, int arg2, int arg3) { if (_type == PackType.rptItem || _type == PackType.rptJadeDynastyItem) { OnUpdateGemCount(); } } private void OnUpdateGemCount() { var type = -1; if (packType == PackType.rptEquip) { type = FuncConfigConfig.GetGemTypeByEquipPos(equipPlace); } else if (packType == PackType.rptJadeDynastyEquip) { type = jadeDynastyGemModel.GetGemType(equipPlace); } int _count = 0; if (type != -1) { var id = 0; if (packType == PackType.rptEquip) { uint[] stones = PlayerStoneData.Instance.GetStoneInfo(equipPlace); if (stones != null && equipHole < stones.Length) { id = (int)stones[equipHole]; } } else if (packType == PackType.rptJadeDynastyEquip) { JadeDynastyGemModel.GemEquipData equipData; if(jadeDynastyGemModel.TryGetEquipGems(equipPlace,out equipData)) { id = (int)equipData.items[equipHole]; } } ItemConfig cfg = ItemConfig.Get((int)id); if (packType == PackType.rptEquip) { _count = model.GemCountByLevel(type, cfg.EffectValueB1); } else if (packType == PackType.rptJadeDynastyEquip) { _count = jadeDynastyGemModel.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 && equipHole < stones.Length) { uint id = stones[equipHole]; ItemConfig cfg = ItemConfig.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; jadeDynastyGemModel.equipGemRefresh -= EquipGemRefresh; } protected override void OnAfterClose() { } #endregion void OnUpdateLevelUp() { var _bind = 0; var id = 0; if (packType == PackType.rptEquip) { uint[] stones = PlayerStoneData.Instance.GetStoneInfo(equipPlace); byte[] stoneBind = PlayerStoneData.Instance.GetStoneBindInfo(equipPlace); if (stones != null) { id = (int)stones[equipHole]; } if (stoneBind != null) { _bind = equipHole < stoneBind.Length ? stoneBind[equipHole] : 0; } } else if (packType == PackType.rptJadeDynastyEquip) { JadeDynastyGemModel.GemEquipData equipData; if (jadeDynastyGemModel.TryGetEquipGems(equipPlace, out equipData)) { _bind = equipData.binds[equipHole]; id = (int)equipData.items[equipHole]; } } ItemConfig config = ItemConfig.Get((int)id); if (id == 0 || config == null) { return; } _gemLevelUpPreIcon.SetSprite(config.IconKey); _gemLevelUpPreBG.SetItemBackGround(config.ItemColor); _gemLevelUpPreBind.gameObject.SetActive(_bind == 1); _gemLevelUpNextBind.gameObject.SetActive(_bind == 1); m_NowGemProperty.Display(config.ID); ItemConfig next = ItemConfig.GetGemDataByLevelAndType(config.EffectValueB1 + 1, config.EffectValueA1); if (next != null && config.Type == next.Type && config.EffectValueA1 == next.EffectValueA1) { _gemlevelUpBtn.interactable = true; _gemLevelUpNextBG.gameObject.SetActive(true); _gemLevelUpNextIcon.gameObject.SetActive(true); m_NextGemProperty.SetActive(true); gemUpCost = model.GemLevelUpCost(config.EffectValueB1, model.GetSingleGemPrice(config.EffectValueA1)); if (PlayerDatas.Instance.baseData.Gold < gemUpCost) { _gemLevelUpCost.text = UIHelper.AppendStringColor(TextColType.Red, gemUpCost.ToString(), true); } else { _gemLevelUpCost.text = UIHelper.AppendStringColor(TextColType.NavyBrown, gemUpCost.ToString()); } OnUpdateGemCount(); _gemLevelUpNextIcon.SetSprite(next.IconKey); _gemLevelUpNextBG.SetItemBackGround(next.ItemColor); m_NextGemProperty.Display(next.ID); _gemNewIcons[0].gameObject.SetActive(config.Effect2 == 0 && next.Effect2 != 0); m_NextGemProperty.Display(0, config.Effect2 == 0 && next.Effect2 != 0); _gemNewIcons[1].gameObject.SetActive(config.Effect3 == 0 && next.Effect3 != 0); m_NextGemProperty.Display(1, config.Effect3 == 0 && next.Effect3 != 0); _gemNewIcons[2].gameObject.SetActive(config.Effect4 == 0 && next.Effect4 != 0); m_NextGemProperty.Display(2, config.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 = ItemConfig.Get(_gemId); m_Property0.gameObject.SetActive(_itemCfg.Effect2 != 0); m_PropertyValue0.gameObject.SetActive(_itemCfg.Effect2 != 0); if (_itemCfg.Effect2 != 0) { PlayerPropertyConfig _propertyCfg = PlayerPropertyConfig.Get(_itemCfg.Effect2); m_Property0.text = _propertyCfg.Name; m_PropertyValue0.text = StringUtility.Contact("+", UIHelper.ReplacePercentage(_itemCfg.EffectValueA2, _propertyCfg.ISPercentage , _propertyCfg.ISPercentage == 1 ? 2 : 1), _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 = PlayerPropertyConfig.Get(_itemCfg.Effect3); m_Property1.text = _propertyCfg.Name; m_PropertyValue1.text = StringUtility.Contact("+", UIHelper.ReplacePercentage(_itemCfg.EffectValueA3, _propertyCfg.ISPercentage , _propertyCfg.ISPercentage == 1 ? 2 : 1), _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 = PlayerPropertyConfig.Get(_itemCfg.Effect4); m_Property2.text = _propertyCfg.Name; m_PropertyValue2.text = StringUtility.Contact("+", UIHelper.ReplacePercentage(_itemCfg.EffectValueA4, _propertyCfg.ISPercentage, _propertyCfg.ISPercentage == 1 ? 2 : 1), _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); } } } } }