//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Monday, March 05, 2018
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace vnxbqy.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<ImpactRankModel>());
|
}
|
}
|
|
RankModel m_RankModel;
|
RankModel rankModel {
|
get {
|
return m_RankModel ?? (m_RankModel = ModelCenter.Instance.GetModel<RankModel>());
|
}
|
}
|
|
private int m_LastSecond = -1;
|
private List<int> m_ActivityCloseList = new List<int>();
|
private Dictionary<int, DateTime> m_ActivityCloseTimeDict = new Dictionary<int, DateTime>();
|
#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;
|
rankModel.onRankRefresh += 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;
|
rankModel.onRankRefresh -= 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)
|
{
|
UpdateRanks();
|
m_RankAwardCtrl.m_Scorller.RefreshActiveCellViews();
|
}
|
}
|
|
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.SetActive(false);
|
m_TotalTargetValue.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 = 0;
|
//if (!rankModel.TryGetMyRank((int)model.GetRankType(model.presentSelectType), out _rank))
|
//{
|
// _rank = -1;
|
//}
|
RankData rankObj = rankModel.GetMyRank((int)model.GetRankType(model.presentSelectType));
|
var _rank = rankObj == null ? -1 : rankObj.index + 1;
|
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 RankType.OpenServerRealm:
|
m_TargetImg.SetActive(_hasData && _playerData.value >= 0);
|
m_TotalTargetValue.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.SetActive(false);
|
m_TotalTargetValue.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.GetBillRankPromotePaths(model.presentSelectType);
|
var _line = Mathf.CeilToInt((float)_array.Count / 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].SetActive(_itemList != null && i < _itemList.Count);
|
if (_itemList != null && i < _itemList.Count)
|
{
|
var _item = _itemList[i];
|
ItemCellModel _ItemData = new ItemCellModel(_item.id, true, (ulong)_item.count);
|
_cell.items[i].SetItemRare(_ItemData, 5);
|
_cell.items[i].button.RemoveAllListeners();
|
_cell.items[i].button.AddListener(() =>
|
{
|
ItemTipUtility.Show(_item.id);
|
});
|
}
|
}
|
|
var _tip = string.Empty;
|
_cell.objTop3.SetActive(false);
|
_cell.objRankIndex.SetActive(false);
|
_cell.objTarget.SetActive(false);
|
|
_cell.getBtn.SetActive(false);
|
_cell.unCompleteImg.SetActive(false);
|
_cell.hasGetImg.SetActive(false);
|
_cell.effect.SetActive(false);
|
//_cell.rankImg.SetActive(false);
|
//_cell.countText.SetActive(false);
|
//_cell.nameText.SetActive(false);
|
_cell.nowText.SetActive(false);
|
_cell.nameText.text = "-";
|
_cell.countText.text = "-";
|
|
ImpactRankModel.OpenServerPlayerData _playerData;
|
var _hasData = model.TryGetOpenServerPlayerData(model.presentSelectType, out _playerData);
|
|
if (awardType == ImpactRankModel.ImpactRankAwardType.Target)
|
{
|
_cell.objTarget.SetActive(true);
|
_tip = Language.Get(StringUtility.Contact("ImpactRankCellType_Target_", model.presentSelectType),
|
_billTagCfg.Condition);
|
_cell.rankTip.text = _tip;
|
if (!_hasData)
|
{
|
_cell.unCompleteImg.SetActive(true);
|
}
|
else
|
{
|
var _index = model.GetBillIndex(model.presentSelectType, _cell.index);
|
if (_playerData.IsTagGet(model.GetTagIndex(model.presentSelectType, _index)))
|
{
|
_cell.hasGetImg.SetActive(true);
|
}
|
else
|
{
|
var _complete = _playerData.value >= _billTagCfg.Condition;
|
_cell.unCompleteImg.SetActive(!_complete);
|
_cell.getBtn.SetActive(_complete);
|
_cell.effect.SetActive(_complete);
|
}
|
}
|
}
|
else if (awardType == ImpactRankModel.ImpactRankAwardType.Rank)
|
{
|
|
if (!model.IsActivityClose(model.presentSelectType))
|
_cell.nowText.SetActive(true);
|
|
var _condition = model.impactRankTypeOpenDict[model.presentSelectType];
|
if (_billRankCfg.RankA == _billRankCfg.RankB)
|
{
|
_cell.objTop3.SetActive(true);
|
_cell.rankImg.SetSprite(_billRankCfg.RankA == 1 ? "Rank_First" : _billRankCfg.RankA == 2 ? "Rank_Second" : "Rank_Third");
|
|
|
var rankInfo = rankModel.GetRankPageDatas((int)model.presentBillRankType);
|
|
//top3 名字和 数值
|
RankData data = null;
|
if (rankInfo != null)
|
{
|
if (rankInfo.ContainsKey(_billRankCfg.RankA - 1))
|
{
|
data = rankInfo[_billRankCfg.RankA - 1];
|
}
|
if (data != null)
|
{
|
_cell.nameText.text = data.name1;
|
var billName = Language.Get(StringUtility.Contact("ImpactRankType_", model.presentSelectType));
|
_cell.countText.text = billName.Substring(0, billName.Length / 2) + ":" + data.cmpValue.ToString();
|
}
|
|
}
|
}
|
else
|
{
|
_cell.objRankIndex.SetActive(true);
|
_cell.rankIndexsText.text = _billRankCfg.RankA.ToString() + "-" + _billRankCfg.RankB.ToString();
|
|
_cell.btnBill.onClick.RemoveAllListeners();
|
_cell.btnBill.onClick.AddListener(() =>
|
{
|
OnViewRank(_billRankCfg.RankA-1);
|
});
|
}
|
|
}
|
|
|
_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;
|
}
|
model.viewRankStartIndex = 0;
|
WindowCenter.Instance.Open<ImpactBillRankWin>();
|
}
|
private void OnViewRank(int rank)
|
{
|
if (model.IsLock(model.presentSelectType))
|
{
|
SysNotifyMgr.Instance.ShowTip("FunctionNotOpen", Language.Get(StringUtility.Contact("ImpactRankType_", model.presentSelectType)));
|
return;
|
}
|
model.viewRankStartIndex = rank;
|
rankModel.QueryRankByPage((int)model.presentBillRankType, rank);
|
WindowCenter.Instance.Open<ImpactBillRankWin>();
|
}
|
private void OnRuleBtn()
|
{
|
ModelCenter.Instance.GetModel<HowToPlayModel>().ruleId = GetRuleId();
|
WindowCenter.Instance.Open<HowToPlayWin>();
|
}
|
|
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;
|
case 11:
|
return 57;
|
case 12:
|
return 49;
|
case 13:
|
return 58;
|
}
|
return 13;
|
}
|
}
|
|
}
|
|
|
|
|