//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, March 05, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class ImpactRankWin : Window { [SerializeField] ScrollerController m_RankAwardCtrl; [SerializeField] Text m_RankTxt; [SerializeField] Text m_TotalTarget; [SerializeField] Text m_TotalTargetValue; [SerializeField] Image m_TargetImg; [SerializeField] Text m_ActivityCoolDown; [SerializeField] Button m_ViewRankBtn; [SerializeField] Button m_RulesBtn; [SerializeField] ScrollerController m_PromotePathCtrl; ImpactRankModel m_Model; ImpactRankModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel()); } } RankModel m_RankModel; RankModel rankModel { get { return m_RankModel ?? (m_RankModel = ModelCenter.Instance.GetModel()); } } private int m_LastSecond = -1; private List m_ActivityCloseList = new List(); private Dictionary m_ActivityCloseTimeDict = new Dictionary(); #region Built-in protected override void BindController() { } protected override void AddListeners() { m_RankAwardCtrl.OnRefreshCell += OnRefreshCell; m_RankAwardCtrl.lockType = EnhanceLockType.KeepVertical; m_ViewRankBtn.onClick.AddListener(OnViewRank); m_RulesBtn.onClick.AddListener(OnRuleBtn); } protected override void OnPreOpen() { TimeUtility.OnServerOpenDayRefresh += OnServerOpenDayRefresh; model.OnSelectRankTypeEvent += OnSelectRankTypeEvent; PlayerDatas.Instance.rank.OnRefreshRank += OnRefreshRankList; model.OnAwardGetEvent += OnAwardGetEvent; m_ActivityCloseList.Clear(); m_ActivityCloseTimeDict.Clear(); } protected override void OnActived() { base.OnActived(); OnSelectRankTypeEvent(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { TimeUtility.OnServerOpenDayRefresh -= OnServerOpenDayRefresh; model.OnSelectRankTypeEvent -= OnSelectRankTypeEvent; PlayerDatas.Instance.rank.OnRefreshRank -= OnRefreshRankList; model.OnAwardGetEvent -= OnAwardGetEvent; } protected override void OnAfterClose() { } protected override void LateUpdate() { base.LateUpdate(); if (model.IsLock(model.presentSelectType)) { return; } if (TimeUtility.Second != m_LastSecond) { m_LastSecond = TimeUtility.Minute; if (m_ActivityCloseList.Contains(model.presentSelectType)) { return; } UpdateTime(); } } #endregion private void OnServerOpenDayRefresh() { UpdateRanks(); m_RankAwardCtrl.m_Scorller.RefreshActiveCellViews(); } private void OnRefreshRankList(int type) { if (type == (int)model.presentBillRankType) { rankModel.rankType = type; UpdateRanks(); } } private void OnAwardGetEvent() { UpdateRanks(); m_RankAwardCtrl.m_Scorller.RefreshActiveCellViews(); } private void OnSelectRankTypeEvent() { UpdateAwards(); UpdateRanks(); UpdateGetPaths(); UpdateTime(); } private void UpdateAwards() { m_RankAwardCtrl.Refresh(); if (model.billRankAwardDict.ContainsKey(model.presentSelectType)) { for (int i = 0; i < model.GetAllBillCfgCount(model.presentSelectType); i++) { m_RankAwardCtrl.AddCell(ScrollerDataType.Header, i); } } m_RankAwardCtrl.Restart(); var _index = 0; if (model.CanGetAward(model.presentSelectType, out _index)) { m_RankAwardCtrl.JumpIndex(_index); } else { m_RankAwardCtrl.JumpIndex(0); } } private void UpdateTime() { if (model.IsLock(model.presentSelectType)) { var _day = model.GetOpenDay(model.presentSelectType); m_ActivityCoolDown.color = UIHelper.GetUIColor(TextColType.NavyYellow); if (_day == 1) { m_ActivityCoolDown.text = Language.Get("OpenTomorrow"); } else { m_ActivityCoolDown.text = Language.Get("OpenAfterDays", _day); } return; } if (m_ActivityCloseList.Contains(model.presentSelectType)) { m_ActivityCoolDown.color = UIHelper.GetUIColor(TextColType.NavyYellow); m_ActivityCoolDown.text = Language.Get("ActivityEnd"); return; } var _surplusDay = model.GetSurplusDay(model.presentSelectType); if (_surplusDay <= 0) { m_ActivityCloseList.Add(model.presentSelectType); if (m_ActivityCloseTimeDict.ContainsKey(model.presentSelectType)) { m_ActivityCloseTimeDict.Remove(model.presentSelectType); } m_ActivityCoolDown.color = UIHelper.GetUIColor(TextColType.NavyYellow); m_ActivityCoolDown.text = Language.Get("ActivityEnd"); m_RankAwardCtrl.m_Scorller.RefreshActiveCellViews(); } else { m_ActivityCoolDown.color = UIHelper.GetUIColor(TextColType.LightGreen); if (!m_ActivityCloseTimeDict.ContainsKey(model.presentSelectType)) { DateTime _result = TimeUtility.ServerNow; DateTime.TryParse(TimeUtility.ServerNow.AddDays(_surplusDay).ToString("yyyy-MM-dd"), out _result); m_ActivityCloseTimeDict.Add(model.presentSelectType, _result); } m_ActivityCoolDown.text = StringUtility.Contact(Language.Get("OSActivityCoolDown"), TimeUtility.SecondsToDHMSCHS((int)(m_ActivityCloseTimeDict[model.presentSelectType] - TimeUtility.ServerNow).TotalSeconds)); } } private void UpdateRanks() { DisplayTargetDesc(); m_RankTxt.color = UIHelper.GetUIColor(TextColType.NavyYellow); m_TotalTargetValue.color = UIHelper.GetUIColor(TextColType.NavyYellow); if (model.IsMissImpactRank((int)model.presentSelectType)) { m_TargetImg.gameObject.SetActive(false); m_TotalTargetValue.gameObject.SetActive(true); m_RankTxt.text = Language.Get("OSCMissActivity"); m_TotalTargetValue.text = Language.Get("OSCMissActivity"); return; } if (model.IsLock(model.presentSelectType)) { m_RankTxt.text = Language.Get("OSCActivityNotOpen"); } else { var _rank = PlayerDatas.Instance.rank.GetSelfRank((int)model.GetRankType(model.presentSelectType)); if (_rank == -1) { m_RankTxt.text = Language.Get("FamilyMatchUnBeOnList"); } else { m_RankTxt.text = _rank.ToString(); m_RankTxt.color = UIHelper.GetUIColor(TextColType.LightGreen); } } ImpactRankModel.OpenServerPlayerData _playerData; var _hasData=model.TryGetOpenServerPlayerData(model.presentSelectType, out _playerData); switch (model.GetRankType(model.presentSelectType)) { case PlayerRankData.RankType.OpenServerRealm: m_TargetImg.gameObject.SetActive(_hasData && _playerData.value >= 0); m_TotalTargetValue.gameObject.SetActive(!_hasData); if (_hasData && _playerData.value >= 0) { var _realmConfig = RealmConfig.Get(_playerData.value); m_TargetImg.SetSprite(_realmConfig == null ? string.Empty : _realmConfig.Img); m_TargetImg.SetNativeSize(); } else { m_TotalTargetValue.text = Language.Get("OSCActivityNotOpen"); } break; default: m_TargetImg.gameObject.SetActive(false); m_TotalTargetValue.gameObject.SetActive(true); m_TotalTargetValue.color = UIHelper.GetUIColor(TextColType.LightGreen); m_TotalTargetValue.text = !_hasData ? "0" : _playerData.value.ToString(); break; } } private void DisplayTargetDesc() { m_TotalTarget.text = Language.Get(StringUtility.Contact("OSTargetType_", model.GetRankType(model.presentSelectType))); } private void UpdateGetPaths() { m_PromotePathCtrl.Refresh(); if (model.billRankPromotePathDict.ContainsKey(model.presentSelectType)) { var _array = model.billRankPromotePathDict[model.presentSelectType]; var _line = Mathf.CeilToInt((float)_array.Length / 2); for (int i = 0; i < _line; i++) { m_PromotePathCtrl.AddCell(ScrollerDataType.Header, i); } } m_PromotePathCtrl.Restart(); } private void OnRefreshCell(ScrollerDataType type, CellView cell) { ImpactRankAwardCell _cell = cell as ImpactRankAwardCell; ImpactRankModel.RankAwardItem _award = model.GetBillAward(model.presentSelectType, _cell.index); var _itemList = _award.GetAwardItem(PlayerDatas.Instance.baseData.Job); var awardType = model.GetAwardType(model.presentSelectType, _cell.index); var _billRankCfg = awardType == ImpactRankModel.ImpactRankAwardType.Rank ? model.GetRankAwardConfig(model.presentSelectType, _cell.index) : null; var _billTagCfg = awardType == ImpactRankModel.ImpactRankAwardType.Target ? model.GetTagAwardConfig(model.presentSelectType, _cell.index) : null; for (int i = 0; i < _cell.items.Length; i++) { _cell.items[i].gameObject.SetActive(_itemList != null && i < _itemList.Count); if (_itemList != null && i < _itemList.Count) { var _item = _itemList[i]; ItemCellModel _ItemData = new ItemCellModel(_item.item.id, false, (ulong)_item.item.count, _item.isBind); _cell.items[i].SetItemRare(_ItemData, 5); _cell.items[i].cellBtn.RemoveAllListeners(); _cell.items[i].cellBtn.AddListener(() => { ItemAttrData _itemPropertyData = new ItemAttrData(_item.item.id, false, (ulong)_item.item.count, -1, _item.isBind); ModelCenter.Instance.GetModel().SetItemTipsModel(_itemPropertyData); }); } } var _tip = string.Empty; _cell.getBtn.gameObject.SetActive(false); _cell.unCompleteImg.gameObject.SetActive(false); _cell.hasGetImg.gameObject.SetActive(false); _cell.effect.gameObject.SetActive(false); ImpactRankModel.OpenServerPlayerData _playerData; var _hasData = model.TryGetOpenServerPlayerData(model.presentSelectType, out _playerData); if (model.IsMissImpactRank(model.presentSelectType) || model.IsLock(model.presentSelectType)) { _cell.unCompleteImg.gameObject.SetActive(true); } else if (awardType == ImpactRankModel.ImpactRankAwardType.Target) { if (!_hasData) { _cell.unCompleteImg.gameObject.SetActive(true); } else { var _index = model.GetBillIndex(model.presentSelectType, _cell.index); if (_playerData.IsTagGet(model.GetTagIndex(model.presentSelectType, _index))) { _cell.hasGetImg.gameObject.SetActive(true); } else { var _complete = _playerData.value >= _billTagCfg.Condition; _cell.unCompleteImg.gameObject.SetActive(!_complete); _cell.getBtn.gameObject.SetActive(_complete); _cell.effect.gameObject.SetActive(_complete); } } } else if (model.IsActivityClose(model.presentSelectType)) { if (!_hasData) { _cell.unCompleteImg.gameObject.SetActive(true); } else { if (awardType == ImpactRankModel.ImpactRankAwardType.Rank) { var _start = _billRankCfg.RankA; var _end = _billRankCfg.RankB; var _rank = PlayerDatas.Instance.rank.GetSelfRank((int)model.GetRankType(model.presentSelectType)); if (_rank == -1 || _rank < _start || _rank > _end) { _cell.unCompleteImg.gameObject.SetActive(!model.InImpactRank(model.presentSelectType)); } else { _cell.unCompleteImg.gameObject.SetActive(false); _cell.hasGetImg.gameObject.SetActive(_playerData.billAwardGet); _cell.getBtn.gameObject.SetActive(!_playerData.billAwardGet); _cell.effect.gameObject.SetActive(!_playerData.billAwardGet); } } } } var _condition = model.impactRankTypeOpenDict[model.presentSelectType]; switch (model.presentSelectType) { case 5: switch (awardType) { case ImpactRankModel.ImpactRankAwardType.Rank: { if (_billRankCfg.RankA == _billRankCfg.RankB) { var _realmCfg = RealmConfig.Get(_condition.limit); _tip = Language.Get(StringUtility.Contact("ImpactRankCellType_Single_", model.presentSelectType), _billRankCfg.RankA, _realmCfg != null ? _realmCfg.Name : string.Empty); } else { var _realmCfg = RealmConfig.Get(_condition.limit); _tip = Language.Get(StringUtility.Contact("ImpactRankCellType_Double_", model.presentSelectType), _billRankCfg.RankA, _billRankCfg.RankB, _realmCfg != null ? _realmCfg.Name : string.Empty); } } break; case ImpactRankModel.ImpactRankAwardType.Target: { var _realmCfg = RealmConfig.Get(_billTagCfg.Condition); _tip = Language.Get(StringUtility.Contact("ImpactRankCellType_Target_", model.presentSelectType), _realmCfg != null ? _realmCfg.Name : string.Empty); } break; } break; default: { switch (awardType) { case ImpactRankModel.ImpactRankAwardType.Rank: { if (_billRankCfg.RankA == _billRankCfg.RankB) { _tip = Language.Get(StringUtility.Contact("ImpactRankCellType_Single_", model.presentSelectType), _billRankCfg.RankA, _condition.limit); } else { _tip = Language.Get(StringUtility.Contact("ImpactRankCellType_Double_", model.presentSelectType), _billRankCfg.RankA, _billRankCfg.RankB, _condition.limit); } } break; case ImpactRankModel.ImpactRankAwardType.Target: { _tip = Language.Get(StringUtility.Contact("ImpactRankCellType_Target_", model.presentSelectType), _billTagCfg.Condition); } break; } } break; } _cell.rankTip.text = _tip; _cell.getBtn.onClick.RemoveAllListeners(); _cell.getBtn.onClick.AddListener(() => { if (awardType == ImpactRankModel.ImpactRankAwardType.Target) { OnGetClick(_billTagCfg, _cell.index); } else { OnGetClick(_billRankCfg, _cell.index); } }); } private void OnGetClick(OSCBillRankAwardConfig _cfg, int index) { var _index = model.GetBillIndex(model.presentSelectType, index); model.SendGetAward(model.presentSelectType, 1, _index); } private void OnGetClick(OSCBillTagAwardConfig _cfg, int index) { var _index = model.GetBillIndex(model.presentSelectType, index); model.SendGetAward(model.presentSelectType, 2, model.GetTagIndex(model.presentSelectType, _index)); } private void OnViewRank() { if (model.IsLock(model.presentSelectType)) { SysNotifyMgr.Instance.ShowTip("FunctionNotOpen", Language.Get(StringUtility.Contact("ImpactRankType_", model.presentSelectType))); return; } ModelCenter.Instance.GetModel().rankType = (int)model.presentBillRankType; WindowCenter.Instance.Open(); } private void OnRuleBtn() { ModelCenter.Instance.GetModel().ruleId = GetRuleId(); WindowCenter.Instance.Open(); } private int GetRuleId() { switch (model.presentSelectType) { case 1: return 13; case 2: return 14; case 3: return 15; case 4: return 16; case 5: return 17; case 6: return 18; case 7: return 31; case 8: return 38; case 9: return 39; case 10: return 40; } return 13; } } }