//--------------------------------------------------------
|
// [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<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();
|
}
|
}
|
|
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 = 0;
|
if(!rankModel.TryGetMyRank((int)model.GetRankType(model.presentSelectType),out _rank))
|
{
|
_rank = -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.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.id, true, (ulong)_item.count);
|
_cell.items[i].SetItemRare(_ItemData, 5);
|
_cell.items[i].button.RemoveAllListeners();
|
_cell.items[i].button.AddListener(() =>
|
{
|
ItemAttrData _itemPropertyData = new ItemAttrData(_item.id, true, (ulong)_item.count);
|
ModelCenter.Instance.GetModel<ItemTipsModel>().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 = 0;
|
if (!rankModel.TryGetMyRank((int)model.GetRankType(model.presentSelectType), out _rank))
|
{
|
_rank = -1;
|
}
|
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;
|
}
|
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;
|
}
|
return 13;
|
}
|
}
|
|
}
|
|
|
|
|