//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Tuesday, October 24, 2017
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
using System.Text;
|
using vnxbqy.UI;
|
|
namespace vnxbqy.UI
|
{
|
|
public class VipWin : Window
|
{
|
#region 组件
|
[SerializeField] Transform m_ContainerNoVip;
|
[SerializeField] Transform m_ContianerVip;
|
[SerializeField] Transform m_ContainerVipExperience;
|
[SerializeField] RectTransform m_ContainerNeedVip0;
|
[SerializeField] RectTransform m_ContainerNeedVip;
|
[SerializeField] Text m_NeedRecharge;
|
[SerializeField] Text m_TargetVipLevel;
|
[SerializeField] Button m_Func;
|
[SerializeField] Text m_FuncBtnTxt;
|
[SerializeField] Text m_VipLevel;
|
[SerializeField] Image m_NoneVipSign;
|
[SerializeField] Text m_VipExperienceTime;
|
[SerializeField] Text m_Jade;
|
[SerializeField] Slider m_VipExpSlider;
|
[SerializeField] Text m_VipExp;
|
[SerializeField] Text m_NextTarget;
|
|
[SerializeField] Button m_ViewPrivilege;
|
[SerializeField] Text m_AddFightPower;
|
[SerializeField] Text m_SelectVipLevel;
|
[SerializeField] ScrollerController m_SelectVipList;
|
[SerializeField] Image m_GainTitle;
|
[SerializeField] Image m_LeftPrivilegeIcon;
|
[SerializeField] Image m_RightPrivilegeIcon;
|
[SerializeField] ItemCell[] m_Items;
|
[SerializeField] Image m_SpecialGiftType;
|
[SerializeField] Text m_GiftOriginalPrice;
|
[SerializeField] Text m_GiftNowPrice;
|
[SerializeField] Button m_BuyGift;
|
[SerializeField] Image m_HasBuySign;
|
[SerializeField] Button m_Left;
|
[SerializeField] Button m_Right;
|
[SerializeField] Image m_VipLeftRed;
|
[SerializeField] Image m_VipRightRed;
|
|
private int vipSurplusTime = 0;
|
private static StringBuilder textBuilder = new StringBuilder();
|
|
private VipModel m_Model;
|
private VipModel model
|
{
|
get
|
{
|
return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<VipModel>());
|
}
|
}
|
|
protected override void AddListeners()
|
{
|
m_Func.onClick.AddListener(OnFunc);
|
m_BuyGift.onClick.AddListener(OnBuyGift);
|
m_Left.onClick.AddListener(OnLeft);
|
m_Right.onClick.AddListener(OnRight);
|
m_ViewPrivilege.onClick.AddListener(ViewPrivilege);
|
}
|
|
protected override void BindController()
|
{
|
m_SelectVipList.lockType = EnhanceLockType.KeepVertical;
|
}
|
|
protected override void OnAfterClose()
|
{
|
}
|
|
protected override void OnAfterOpen()
|
{
|
}
|
|
protected override void OnPreClose()
|
{
|
PlayerDatas.Instance.playerDataRefreshEvent -= RefreshInfo;
|
model.OnVipExpEvent -= OnVipExpEvent;
|
model.OnVipGiftEvent -= OnVipGiftEvent;
|
model.OnVipTimeEvent -= OnVipTimeEvent;
|
model.giftRedpointStateEvent -= OnVipGiftRedpointChange;
|
WindowCenter.Instance.windowBeforeOpenEvent -= WindowBeforeOpenEvent;
|
m_SelectVipList.OnRefreshCell -= OnRefreshCell;
|
}
|
|
protected override void OnPreOpen()
|
{
|
m_SelectVipList.OnRefreshCell += OnRefreshCell;
|
PlayerDatas.Instance.playerDataRefreshEvent += RefreshInfo;
|
model.OnVipExpEvent += OnVipExpEvent;
|
model.OnVipGiftEvent += OnVipGiftEvent;
|
model.OnVipTimeEvent += OnVipTimeEvent;
|
model.giftRedpointStateEvent += OnVipGiftRedpointChange;
|
if (model.gotoVipLv != 0)
|
{
|
model.presentSelectVip = model.gotoVipLv;
|
model.gotoVipLv = 0;
|
}
|
else
|
{
|
int _vipLv = 0;
|
if ((_vipLv = model.IsVipGiftRedpoint()) > 0
|
|| (_vipLv = model.VipGiftMinLevel()) > 0)
|
{
|
model.presentSelectVip = _vipLv;
|
}
|
else
|
{
|
model.presentSelectVip = Mathf.Max(1, PlayerDatas.Instance.baseData.VIPLv);
|
}
|
}
|
OnVipTimeEvent();
|
RefreshJadeData();
|
InitVipData();
|
|
|
WindowCenter.Instance.windowBeforeOpenEvent += WindowBeforeOpenEvent;
|
}
|
|
protected override void LateUpdate()
|
{
|
base.LateUpdate();
|
if (vipSurplusTime <= 0) return;
|
if (PlayerDatas.Instance.baseData.VIPLv < 1)
|
{
|
vipSurplusTime = Mathf.Max(0, (int)(model.vipExperienceOverdue - TimeUtility.ServerNow).TotalSeconds);
|
RefreshVipExperienceTime();
|
}
|
if (vipSurplusTime == 0)
|
{
|
RefreshVipData();
|
}
|
}
|
#endregion
|
|
private void OnRight()
|
{
|
if (model.presentSelectVip < model.vipMaxLv)
|
{
|
model.presentSelectVip = model.presentSelectVip + 1;
|
InitVipData();
|
RefreshVipNextExp();
|
RefreshVipNextJade();
|
}
|
}
|
|
private void WindowBeforeOpenEvent(Window win)
|
{
|
if (win is TreasureNewGotWin)
|
{
|
WindowJumpMgr.Instance.ClearJumpData();
|
WindowCenter.Instance.Close<VipRechargeWin>();
|
}
|
}
|
|
private void OnLeft()
|
{
|
if (model.presentSelectVip > 1)
|
{
|
model.presentSelectVip = model.presentSelectVip - 1;
|
InitVipData();
|
RefreshVipNextExp();
|
RefreshVipNextJade();
|
}
|
}
|
|
private void OnFunc()
|
{
|
if (VersionConfig.Get().isBanShu)
|
{
|
SysNotifyMgr.Instance.ShowTip("FuncNoOpen_Nowaday");
|
return;
|
}
|
if (FuncOpen.Instance.IsFuncOpen(113))
|
{
|
model.OpenVipPayUI(VipModel.VipWinType.Pay);
|
}
|
else
|
{
|
FuncOpen.Instance.ProcessorFuncErrorTip(113);
|
}
|
}
|
|
void RefreshVipData()
|
{
|
bool _hasVip = PlayerDatas.Instance.baseData.VIPLv > 0;
|
m_ContainerNoVip.SetActive(!_hasVip);
|
m_ContianerVip.SetActive(_hasVip);
|
m_ContainerVipExperience.SetActive(model.IsVipExperience());
|
if (model.IsVipExperience())
|
{
|
m_ContainerNoVip.SetActive(false);
|
RefreshVipExperienceTime();
|
}
|
else
|
{
|
RefreshVipProgress();
|
}
|
m_FuncBtnTxt.text = _hasVip ? Language.Get("VipWin_7") : Language.Get("VipWin_8");
|
bool _isVipActive = model.IsVipActive();
|
bool _isVipExperience = model.IsVipExperience();
|
RefreshVipNextExp();
|
RefreshVipNextJade();
|
m_NoneVipSign.SetActive(PlayerDatas.Instance.baseData.VIPLv == 0 && !_isVipExperience);
|
m_VipLevel.SetActive(PlayerDatas.Instance.baseData.VIPLv > 0 || _isVipExperience);
|
m_VipLevel.text = _isVipExperience ? "1" : PlayerDatas.Instance.baseData.VIPLv.ToString();
|
}
|
|
void RefreshVipNextExp()
|
{
|
if (PlayerDatas.Instance.baseData.VIPLv >= model.vipMaxLv)
|
{
|
m_NextTarget.text = Language.Get("VipWin_11");
|
}
|
else
|
{
|
var _nextVip = model.presentSelectVip;
|
if (_nextVip <= PlayerDatas.Instance.baseData.VIPLv)
|
{
|
_nextVip = PlayerDatas.Instance.baseData.VIPLv + 1;
|
}
|
m_NextTarget.text = Language.Get("VipWin_10", model.GetVipPreExp(_nextVip) - model.vipTotalExp, _nextVip);
|
}
|
}
|
|
void RefreshVipNextJade()
|
{
|
bool _hasVip = PlayerDatas.Instance.baseData.VIPLv > 0;
|
if (!_hasVip && !model.IsVipExperience())
|
{
|
m_ContainerNeedVip.SetActive(model.presentSelectVip > 1);
|
m_ContainerNeedVip0.SetActive(model.presentSelectVip == 1);
|
if (model.presentSelectVip > 1)
|
{
|
m_NeedRecharge.text = (model.GetVipPreExp(model.presentSelectVip) - model.vipTotalExp).ToString();
|
m_TargetVipLevel.text = model.presentSelectVip.ToString();
|
}
|
}
|
}
|
|
void RefreshVipExperienceTime()
|
{
|
if (vipSurplusTime == 0)
|
{
|
m_VipExperienceTime.text = Language.Get("VipWin_6");
|
}
|
else
|
{
|
TimeSpan t = new TimeSpan(vipSurplusTime * TimeSpan.TicksPerSecond);
|
textBuilder.Length = 0;
|
textBuilder.Append(Language.Get("VipExperienceTime"));
|
textBuilder.Append("<color=#109d06>");
|
if (t.Days / 365 > 0) textBuilder.Append(StringUtility.Contact(t.Days / 365, Language.Get("L1137")));
|
if (t.Days % 365 > 0) textBuilder.Append(StringUtility.Contact(t.Days % 365, Language.Get("L1074")));
|
if (t.Hours > 0) textBuilder.Append(StringUtility.Contact(t.Hours, Language.Get("L1072")));
|
if (t.Minutes > 0) textBuilder.Append(StringUtility.Contact(t.Minutes, Language.Get("L1073")));
|
if (t.Days == 0 && t.Hours == 0 && t.Minutes == 0)
|
{
|
textBuilder.Append(StringUtility.Contact(1, Language.Get("L1073")));
|
}
|
textBuilder.Append("</color>");
|
m_VipExperienceTime.text = textBuilder.ToString();
|
}
|
}
|
|
void RefreshVipProgress()
|
{
|
m_VipExpSlider.minValue = 0;
|
if (PlayerDatas.Instance.baseData.VIPLv >= model.vipMaxLv)
|
{
|
m_VipExpSlider.maxValue = 1;
|
m_VipExpSlider.value = 1;
|
m_VipExp.text = model.vipExp.ToString();
|
}
|
else
|
{
|
m_VipExpSlider.maxValue = model.GetVipLevelUpExp(PlayerDatas.Instance.baseData.VIPLv);
|
m_VipExpSlider.value = model.vipExp;
|
m_VipExp.text = StringUtility.Contact(m_VipExpSlider.value, "/", m_VipExpSlider.maxValue);
|
}
|
}
|
|
void RefreshJadeData()
|
{
|
m_Jade.text = UIHelper.GetMoneyCntEx(1).ToString();
|
}
|
|
private void OnBuyGift()
|
{
|
model.SendBuyVipGift(model.presentSelectVip);
|
}
|
|
private void OnRefreshVipCell(ScrollerDataType type, CellView cell)
|
{
|
Text text = cell.GetComponent<Text>("Txt_VipLv");
|
text.text = cell.index.ToString();
|
Image img = cell.GetComponent<Image>();
|
if (model.presentSelectVip == cell.index)
|
{
|
img.SetSprite("VipSelected");
|
}
|
else
|
{
|
img.SetSprite("VipUnSelected");
|
}
|
}
|
|
private void RefreshInfo(PlayerDataType refreshType)
|
{
|
switch (refreshType)
|
{
|
case PlayerDataType.VIPLv:
|
{
|
RefreshVipData();
|
}
|
break;
|
case PlayerDataType.Gold:
|
case PlayerDataType.default5:
|
{
|
RefreshJadeData();
|
}
|
break;
|
}
|
}
|
|
private void InitVipGiftBtn()
|
{
|
VipGiftData data = model.GetVipGift(model.presentSelectVip);
|
m_BuyGift.SetActive(true);
|
m_HasBuySign.SetActive(false);
|
if (PlayerDatas.Instance.baseData.VIPLv < model.presentSelectVip)
|
{
|
m_BuyGift.interactable = false;
|
}
|
else if (data.hasBuy)
|
{
|
m_HasBuySign.SetActive(true);
|
m_BuyGift.SetActive(false);
|
}
|
else
|
{
|
m_BuyGift.interactable = true;
|
}
|
}
|
|
private bool GetPrivilegeText(int id, out string privilegeStr)
|
{
|
var config = VipPrivilegeInfoConfig.Get(id);
|
var value = VipPrivilegeInfoConfig.GetPrivilegeDataEx(id, model.presentSelectVip);
|
if (value == 0)
|
{
|
privilegeStr = string.Empty;
|
return false;
|
}
|
var label = VipPrivilegeInfoConfig.GetPrivilegeLabel(id, model.presentSelectVip);
|
string valueStr = string.Empty;
|
switch (config.displayType)
|
{
|
case 1:
|
break;
|
case 2:
|
case 5:
|
if (!string.IsNullOrEmpty(label))
|
{
|
valueStr = string.Format(label, value);
|
}
|
else
|
{
|
valueStr = value.ToString();
|
}
|
break;
|
case 3:
|
if (!string.IsNullOrEmpty(label))
|
{
|
valueStr = string.Format(label, value / 100);
|
}
|
else
|
{
|
valueStr = (value / 100).ToString();
|
}
|
break;
|
case 4:
|
valueStr = label;
|
break;
|
case 6:
|
var isEmptyLabel = label.Equals("Null");
|
if (!isEmptyLabel)
|
{
|
valueStr = label;
|
}
|
break;
|
default:
|
break;
|
}
|
|
privilegeStr = config.name + valueStr;
|
return true;
|
}
|
|
private void RefreshVipList()
|
{
|
m_SelectVipList.Refresh();
|
|
m_SelectVipList.AddCell(ScrollerDataType.Header, 0);
|
List<int> tmpIDList = new List<int>();
|
tmpIDList.Clear();
|
//筛选出核心特权
|
foreach (string idstr in VipPrivilegeInfoConfig.GetKeys())
|
{
|
int id = int.Parse(idstr);
|
var value = VipPrivilegeInfoConfig.GetPrivilegeDataEx(id, model.presentSelectVip);
|
if (value == 0)
|
{
|
continue;
|
}
|
var config = VipPrivilegeInfoConfig.Get(id);
|
|
|
if (config.important == 1)
|
{
|
m_SelectVipList.AddCell(ScrollerDataType.Normal, id);
|
}
|
else
|
{
|
tmpIDList.Add(id);
|
}
|
}
|
//其他特权
|
m_SelectVipList.AddCell(ScrollerDataType.Header, 1);
|
foreach (var id in tmpIDList)
|
{
|
m_SelectVipList.AddCell(ScrollerDataType.Normal, id);
|
}
|
|
m_SelectVipList.Restart();
|
m_SelectVipList.m_Scorller.RefreshActiveCellViews();
|
}
|
|
private void OnRefreshCell(ScrollerDataType type, CellView cell)
|
{
|
if (type == ScrollerDataType.Header)
|
{
|
VipListHeaderCell headerCell = cell as VipListHeaderCell;
|
headerCell.ShowUI(headerCell.index);
|
}
|
else if (type == ScrollerDataType.Normal)
|
{
|
VipListNormalCell normalCell = cell as VipListNormalCell;
|
string vipStr;
|
bool result = GetPrivilegeText(normalCell.index, out vipStr);
|
if (result)
|
normalCell.ShowUI(vipStr);
|
}
|
|
}
|
|
|
private void InitVipData()
|
{
|
m_SelectVipLevel.text = model.presentSelectVip.ToString();
|
RefreshVipList();
|
VipGiftData data = model.GetVipGift(model.presentSelectVip);
|
int index = 0;
|
if (data != null)
|
{
|
int _job = PlayerDatas.Instance.baseData.Job;
|
var _list = data.giftItems.GetAwardItem(_job);
|
foreach (var award in _list)
|
{
|
if (index < m_Items.Length)
|
{
|
ItemCellModel cellModel = new ItemCellModel(award.id, false, (ulong)award.count);
|
m_Items[index].Init(cellModel);
|
m_Items[index].button.RemoveAllListeners();
|
m_Items[index].button.AddListener(() =>
|
{
|
TreasureEffectModel effectModel = ModelCenter.Instance.GetModel<TreasureEffectModel>();
|
ItemConfig itemConfig = ItemConfig.Get(award.id);
|
if(itemConfig.Effect1 == 232)
|
{
|
effectModel.SetTreasureID(itemConfig.EffectValueA1, model.presentSelectVip);
|
}
|
else
|
{
|
ItemTipUtility.Show(award.id);
|
}
|
});
|
}
|
index++;
|
}
|
m_GiftOriginalPrice.text = data.giftOldPrice.ToString();
|
m_GiftNowPrice.text = data.giftNowPrice.ToString();
|
var config = VIPAwardConfig.Get(model.presentSelectVip);
|
m_LeftPrivilegeIcon.SetSprite(config.privilegeIcon1);
|
m_RightPrivilegeIcon.SetSprite(config.privilegeIcon2);
|
m_SpecialGiftType.SetActive(!config.specialGiftIcon.Equals(string.Empty));
|
if (!config.specialGiftIcon.Equals(string.Empty))
|
{
|
m_SpecialGiftType.SetSprite(config.specialGiftIcon);
|
m_SpecialGiftType.SetNativeSize();
|
}
|
}
|
for (int i = m_Items.Length - 1; i >= index; i--)
|
{
|
m_Items[i].SetActive(false);
|
}
|
InitVipGiftBtn();
|
|
m_AddFightPower.text = model.GetTitlePower(model.presentSelectVip).ToString();
|
DienstgradConfig title = model.GetVipTitle(model.presentSelectVip);
|
if (title != null)
|
{
|
m_GainTitle.SetSprite(title.Image);
|
m_GainTitle.SetNativeSize();
|
}
|
OnVipGiftRedpointChange();
|
}
|
|
private void OnVipGiftRedpointChange()
|
{
|
int giftRedState = model.IsGiftRedpointActive(model.presentSelectVip);
|
m_VipLeftRed.SetActive(giftRedState == -1);
|
m_VipRightRed.SetActive(giftRedState == 1);
|
if (giftRedState == 0)
|
{
|
model.ResetGiftRedpoint = false;
|
model.UpdateGiftRedpoint();
|
DayRemind.Instance.SetDayRemind(DayRemind.VIP_GIFT_REDPOINT, true);
|
}
|
}
|
|
private void OnVipGiftEvent()
|
{
|
InitVipGiftBtn();
|
}
|
|
private void OnVipTimeEvent()
|
{
|
if (model.IsVipExperience())
|
{
|
vipSurplusTime = Mathf.Max(0, (int)(model.vipExperienceOverdue - TimeUtility.ServerNow).TotalSeconds);
|
}
|
RefreshVipData();
|
}
|
|
private void OnVipExpEvent()
|
{
|
RefreshVipProgress();
|
RefreshVipNextExp();
|
}
|
|
private void ViewPrivilege()
|
{
|
WindowCenter.Instance.Open<VipPrivilegeInfoWin>();
|
}
|
}
|
}
|
|
|
|
|