//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, October 24, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System.Text; using Snxxz.UI; namespace Snxxz.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] 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()); } } 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() { } 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; } protected override void OnPreOpen() { 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 ItemTipsModel _itemTipsModel; ItemTipsModel itemTipsModel { get { return _itemTipsModel ?? (_itemTipsModel = ModelCenter.Instance.GetModel()); } } 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(); } } 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.gameObject.SetActive(!_hasVip); m_ContianerVip.gameObject.SetActive(_hasVip); m_ContainerVipExperience.gameObject.SetActive(model.IsVipExperience()); if (model.IsVipExperience()) { m_ContainerNoVip.gameObject.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.gameObject.SetActive(PlayerDatas.Instance.baseData.VIPLv == 0 && !_isVipExperience); m_VipLevel.gameObject.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.gameObject.SetActive(model.presentSelectVip > 1); m_ContainerNeedVip0.gameObject.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(""); 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(""); 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 = PlayerDatas.Instance.baseData.diamond.ToString(); } private void OnBuyGift() { model.SendBuyVipGift(model.presentSelectVip); } private void OnRefreshVipCell(ScrollerDataType type, CellView cell) { Text text = cell.GetComponent("Txt_VipLv"); text.text = cell.index.ToString(); Image img = cell.GetComponent(); 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: { RefreshJadeData(); } break; } } private void InitVipGiftBtn() { VipGiftData data = model.GetVipGift(model.presentSelectVip); m_BuyGift.gameObject.SetActive(true); m_HasBuySign.gameObject.SetActive(false); if (PlayerDatas.Instance.baseData.VIPLv < model.presentSelectVip) { m_BuyGift.interactable = false; } else if (data.hasBuy) { m_HasBuySign.gameObject.SetActive(true); m_BuyGift.gameObject.SetActive(false); } else { m_BuyGift.interactable = true; } } private void InitVipData() { m_SelectVipLevel.text = model.presentSelectVip.ToString(); 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(); ItemConfig itemConfig = ItemConfig.Get(award.id); if(itemConfig.Effect1 == 232) { effectModel.SetTreasureID(itemConfig.EffectValueA1, model.presentSelectVip); } else { ItemAttrData attrData = new ItemAttrData(award.id, true, (ulong)award.count); itemTipsModel.SetItemTipsModel(attrData); } }); } 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.gameObject.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].gameObject.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.gameObject.SetActive(giftRedState == -1); m_VipRightRed.gameObject.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() { VipPrivilegeWin.selectVipLevel = model.presentSelectVip; WindowCenter.Instance.Open(); } } }