//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Monday, March 05, 2018
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
using TableConfig;
|
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] Image m_ActivityAd;
|
[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;
|
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();
|
}
|
|
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();
|
m_ActivityAd.SetSprite(StringUtility.Contact("ImpactRankType", model.presentSelectType));
|
}
|
|
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 = Config.Instance.Get<RealmConfig>(_playerData.value);
|
m_TargetImg.SetSprite(_realmConfig == null ? string.Empty : _realmConfig.Img);
|
}
|
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 _cfg = model.GetBillCfg(model.presentSelectType, _cell.index);
|
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<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 (_cfg is OSCBillTagAwardConfig)
|
{
|
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 >= (_cfg as OSCBillTagAwardConfig).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 (_cfg is OSCBillRankAwardConfig)
|
{
|
var _start = (_cfg as OSCBillRankAwardConfig).RankA;
|
var _end = (_cfg as OSCBillRankAwardConfig).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 1:
|
case 2:
|
case 3:
|
case 6:
|
if (_cfg is OSCBillRankAwardConfig)
|
{
|
OSCBillRankAwardConfig _billRankCfg = _cfg as OSCBillRankAwardConfig;
|
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);
|
}
|
}
|
else if (_cfg is OSCBillTagAwardConfig)
|
{
|
OSCBillTagAwardConfig _billTagCfg = _cfg as OSCBillTagAwardConfig;
|
_tip = Language.Get(StringUtility.Contact("ImpactRankCellType_Target_", model.presentSelectType),
|
_billTagCfg.Condition);
|
}
|
break;
|
case 5:
|
if (_cfg is OSCBillRankAwardConfig)
|
{
|
OSCBillRankAwardConfig _billRankCfg = _cfg as OSCBillRankAwardConfig;
|
if (_billRankCfg.RankA == _billRankCfg.RankB)
|
{
|
var _realmCfg = Config.Instance.Get<RealmConfig>(_condition.limit);
|
_tip = Language.Get(StringUtility.Contact("ImpactRankCellType_Single_", model.presentSelectType),
|
_billRankCfg.RankA, _realmCfg != null ? _realmCfg.Name : string.Empty);
|
}
|
else
|
{
|
var _realmCfg = Config.Instance.Get<RealmConfig>(_condition.limit);
|
_tip = Language.Get(StringUtility.Contact("ImpactRankCellType_Double_", model.presentSelectType),
|
_billRankCfg.RankA, _billRankCfg.RankB, _realmCfg != null ? _realmCfg.Name : string.Empty);
|
}
|
}
|
else if (_cfg is OSCBillTagAwardConfig)
|
{
|
OSCBillTagAwardConfig _billTagCfg = _cfg as OSCBillTagAwardConfig;
|
var _realmCfg = Config.Instance.Get<RealmConfig>(_billTagCfg.Condition);
|
_tip = Language.Get(StringUtility.Contact("ImpactRankCellType_Target_", model.presentSelectType),
|
_realmCfg != null ? _realmCfg.Name : string.Empty);
|
}
|
break;
|
case 4:
|
if (_cfg is OSCBillRankAwardConfig)
|
{
|
OSCBillRankAwardConfig _billRankCfg = _cfg as OSCBillRankAwardConfig;
|
if (_billRankCfg.RankA == _billRankCfg.RankB)
|
{
|
_tip = Language.Get(StringUtility.Contact("ImpactRankCellType_Single_", 4), _billRankCfg.RankA, _condition.limit);
|
}
|
else
|
{
|
_tip = Language.Get(StringUtility.Contact("ImpactRankCellType_Double_", 4),
|
_billRankCfg.RankA, _billRankCfg.RankB, _condition.limit);
|
}
|
}
|
else if (_cfg is OSCBillTagAwardConfig)
|
{
|
OSCBillTagAwardConfig _billTagCfg = _cfg as OSCBillTagAwardConfig;
|
_tip = Language.Get(StringUtility.Contact("ImpactRankCellType_Target_", 4), _billTagCfg.Condition);
|
}
|
break;
|
}
|
_cell.rankTip.text = _tip;
|
_cell.getBtn.onClick.RemoveAllListeners();
|
_cell.getBtn.onClick.AddListener(() =>
|
{
|
OnGetClick(_cfg, _cell.index);
|
});
|
}
|
|
private void OnGetClick(ConfigBase _cfg, int index)
|
{
|
var _index = model.GetBillIndex(model.presentSelectType, index);
|
model.SendGetAward(model.presentSelectType, (_cfg is OSCBillRankAwardConfig) ? 1 : 2,
|
(_cfg is OSCBillRankAwardConfig) ? _index : 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<RankModel>().rankType = (int)model.presentBillRankType;
|
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;
|
}
|
return 13;
|
}
|
}
|
|
}
|
|
|
|
|