//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Friday, October 27, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TableConfig; using Snxxz.UI; namespace Snxxz.UI { public class PrayerWin : Window { [Header("Coin Pray")] [SerializeField] Text coinPrayerText; [SerializeField] Button coinPrayerBtn; [SerializeField] Text coinPrayerBtnText; [SerializeField] Image coinPrayerBtnImg; [SerializeField] Text coinPrayerCnt; [SerializeField] Text coinPrayerCost; [SerializeField] Text surplusTimeText; [SerializeField] Text prayerCoinRuneCount; [SerializeField] RectTransform freeCoinPrayerTip; [SerializeField] RectTransform costCoinPrayerTip; [SerializeField] RectTransform m_ContaienrRuneCoinPrayer; [SerializeField] RectTransform m_MoneyPrayerEffect; [Header("Exp Pray")] [SerializeField] Text expPrayerText; [SerializeField] Text expPrayerCntText; [SerializeField] Text expPrayerCostText; [SerializeField] Button expPrayerBtn; [SerializeField] Text expPrayerBtnTxt; [SerializeField] Image expPrayerBtnImg; [SerializeField] RectTransform m_ContainerExpOpen; [SerializeField] Text m_ExpPrayNoOpenTip; [SerializeField] RectTransform m_ContainerJadeCost; [SerializeField] RectTransform m_ContainerRuneCost; [SerializeField] Image m_RuneIcon; [SerializeField] Text m_RuneNum; [SerializeField] RectTransform m_ExpPrayerEffect; PrayerModel m_Model; PrayerModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel()); } } PlayerPackModel _playerPack; PlayerPackModel playerPack { get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel()); } } private float surplusTime = 0; private bool initedCoin = false; #region Built-in protected override void BindController() { } protected override void AddListeners() { coinPrayerBtn.onClick.AddListener(OnCoinPrayerClick); expPrayerBtn.onClick.AddListener(OnExpPrayerClick); } protected override void OnPreOpen() { model.OnCoinPrayerEvent += OnCoinPrayerEvent; model.OnExpPrayerEvent += OnExpPrayerEvent; PlayerDatas.Instance.PlayerDataRefreshInfoEvent += RefreshInfo; FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; playerPack.RefreshItemCountAct += RefreshItemCountAct; SysNotifyMgr.Instance.OnSystemNotifyEvent += SysNotifyEvent; InitData(); } private void SysNotifyEvent(string _key) { if (_key == "MoneyPray_HowMuch") { EffectMgr.Instance.PlayUIEffect(1079, 2500, m_MoneyPrayerEffect, false); } else if (_key == "ExpPray_HowMuch") { EffectMgr.Instance.PlayUIEffect(1080, 2500, m_ExpPrayerEffect, false); } } private void RefreshInfo(PlayerDataRefresh refreshType) { switch (refreshType) { case PlayerDataRefresh.VIPLv: { OnExpPrayerEvent(); OnCoinPrayerEvent(); } break; case PlayerDataRefresh.LV: { OnExpPrayerEvent(); } break; } } protected override void OnAfterOpen() { HandleAchievement(); } protected override void OnPreClose() { model.OnCoinPrayerEvent -= OnCoinPrayerEvent; model.OnExpPrayerEvent -= OnExpPrayerEvent; PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= RefreshInfo; FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; playerPack.RefreshItemCountAct -= RefreshItemCountAct; SysNotifyMgr.Instance.OnSystemNotifyEvent -= SysNotifyEvent; } protected override void OnAfterClose() { } protected override void LateUpdate() { base.LateUpdate(); if (!model.CanFreeCoinPrayer()) { TimeSpan t = TimeUtility.ServerNow - TimeUtility.GetTime(model.lastCoinPrayerTime); int _value = (int)t.TotalSeconds; if (_value != surplusTime) { surplusTime = _value; surplusTime = Mathf.Max(0, surplusTime); RefreshCoinPrayerTime(); } } else { if (initedCoin) return; OnCoinPrayerEvent(); } } #endregion private void OnExpPrayerClick() { if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.ExpPray)) { FuncOpen.Instance.ProcessorFuncErrorTip((int)FuncOpenEnum.ExpPray); return; } model.SendExpPrayer(); } private void OnCoinPrayerClick() { if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.CoinPray)) { FuncOpen.Instance.ProcessorFuncErrorTip((int)FuncOpenEnum.CoinPray); return; } model.SendCoinPrayer(); } private void InitData() { OnCoinPrayerEvent(); OnExpPrayerEvent(); } private void OnCoinPrayerEvent() { coinPrayerText.text = Language.Get("PrayerWin_1", model.specialCoinPrayer < model.prayerSpecialCoinCount ? model.prayerSpecialCoinValue : model.prayerGetCoin); costCoinPrayerTip.gameObject.SetActive(false); freeCoinPrayerTip.gameObject.SetActive(false); m_ContaienrRuneCoinPrayer.gameObject.SetActive(false); if (model.CanFreeCoinPrayer()) { initedCoin = true; if (model.FreeCoinPrayerTime()) { freeCoinPrayerTip.gameObject.SetActive(true); } else { m_ContaienrRuneCoinPrayer.gameObject.SetActive(true); var _coinRuneCnt = playerPack.GetItemCountByID(PackType.rptItem, model.prayerCoinRune); prayerCoinRuneCount.text = StringUtility.Contact(_coinRuneCnt, "/1"); } coinPrayerBtnText.text = Language.Get("PrayerWin_7"); coinPrayerBtnText.color = new Color32(51, 8, 0, 255); coinPrayerBtnImg.SetSprite("FreePrayBtn_a"); } else { initedCoin = false; costCoinPrayerTip.gameObject.SetActive(true); coinPrayerBtnText.text = Language.Get("PrayerWin_8"); coinPrayerBtnText.color = new Color32(247, 225, 188, 255); coinPrayerCnt.text = StringUtility.Contact(model.GetAllCoinPrayCnt() - model.coinPrayerCnt, "/", model.GetAllCoinPrayCnt()); coinPrayerCost.text = model.GetCoinPrayerCost().ToString(); coinPrayerBtnImg.SetSprite("CostPrayBtn_a"); RefreshCoinPrayerTime(); } } private void OnFuncStateChangeEvent(int funcId) { if (funcId == (int)FuncOpenEnum.ExpPray) { OnExpPrayerEvent(); } } private void RefreshItemCountAct(PackType _packType, int arg2, int _itemId) { if (_packType != PackType.rptItem || (_itemId != model.prayerExpRune && _itemId != model.prayerCoinRune)) { return; } OnCoinPrayerEvent(); OnExpPrayerEvent(); } private void OnExpPrayerEvent() { bool _open = FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.ExpPray); m_ContainerExpOpen.gameObject.SetActive(_open); m_ExpPrayNoOpenTip.gameObject.SetActive(!_open); if (!_open) { m_ExpPrayNoOpenTip.text = Language.Get("ExpPray_LevelLimit", FuncOpen.Instance.GetLimitLv((int)FuncOpenEnum.ExpPray)); return; } expPrayerText.text = Language.Get("PrayerWin_2", model.GetExpPrayerVal()); var _expRuneCnt = playerPack.GetItemCountByID(PackType.rptItem, model.prayerExpRune); m_ContainerJadeCost.gameObject.SetActive(_expRuneCnt <= 0); m_ContainerRuneCost.gameObject.SetActive(_expRuneCnt > 0); if (_expRuneCnt > 0) { expPrayerBtnImg.SetSprite("FreePrayBtn_a"); expPrayerBtnTxt.color = new Color32(51, 8, 0, 255); m_RuneNum.text = StringUtility.Contact(_expRuneCnt, "/", 1); ItemConfig _itemCfg = ConfigManager.Instance.GetTemplate(model.prayerExpRune); if (_itemCfg != null) { m_RuneIcon.SetSprite(_itemCfg.IconKey); } } else { expPrayerBtnImg.SetSprite("CostPrayBtn_a"); expPrayerBtnTxt.color = new Color32(255, 244, 205, 255); expPrayerCntText.text = StringUtility.Contact(model.GetAllExpPrayCnt() - model.expPrayerCnt, "/", model.GetAllExpPrayCnt()); expPrayerCostText.text = model.GetExpPrayerCost().ToString(); } } private void RefreshCoinPrayerTime() { TimeSpan t = TimeUtility.GetTime(model.lastCoinPrayerTime + (uint)model.prayerCoinFreeTime) - TimeUtility.ServerNow; surplusTimeText.text = Language.Get("PrayerWin_10", t.Hours, t.Minutes, Mathf.Max(0, t.Seconds)); if (t.Hours <= 0 && t.Minutes <= 0 && t.Seconds <= 0) { OnCoinPrayerEvent(); } } private void HandleAchievement() { if (AchievementGoto.guideAchievementId == AchievementGoto.CoinPrayer) { var _effect = AchievementGuideEffectPool.Require(1); _effect.transform.SetParentEx(coinPrayerBtn.transform, Vector3.zero, Vector3.zero, Vector3.one); AchievementGoto.guideAchievementId = 0; } else if (AchievementGoto.guideAchievementId == AchievementGoto.ExpPrayer) { var _effect = AchievementGuideEffectPool.Require(1); _effect.transform.SetParentEx(expPrayerBtn.transform, Vector3.zero, Vector3.zero, Vector3.one); AchievementGoto.guideAchievementId = 0; } } } }