//--------------------------------------------------------
|
// [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<Image> _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<GemModel>());
|
}
|
}
|
|
PlayerPackModel m_PackModel;
|
PlayerPackModel packModel
|
{
|
get
|
{
|
return m_PackModel ?? (m_PackModel = ModelCenter.Instance.GetModel<PlayerPackModel>());
|
}
|
}
|
#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<RechargeTipWin>();
|
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<ItemConfig>((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<ItemConfig>((int)id);
|
_count = model.GemCountByLevel(_type, cfg.EffectValueB1);
|
var _countStr = StringUtility.Contact(_count < model.gemComposeCount - 1 ? "<color=#ff0303>" : "<color=#109d06>", model.gemComposeCount - 1, "</color>");
|
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<ItemConfig>((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<ItemConfig>((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<ItemConfig>(_gemId);
|
m_Property0.gameObject.SetActive(_itemCfg.Effect2 != 0);
|
m_PropertyValue0.gameObject.SetActive(_itemCfg.Effect2 != 0);
|
if (_itemCfg.Effect2 != 0)
|
{
|
PlayerPropertyConfig _propertyCfg = Config.Instance.Get<PlayerPropertyConfig>(_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<PlayerPropertyConfig>(_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<PlayerPropertyConfig>(_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);
|
}
|
}
|
}
|
}
|
|
|
}
|
|
|
|
|