using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.Linq;
|
using UnityEngine;
|
using UnityEngine.UI;
|
#if UNITY_EDITOR
|
using UnityEditor;
|
using UnityEditorInternal;
|
#endif
|
namespace vnxbqy.UI
|
{
|
|
public class OpenServerActivityWin : Window
|
{
|
[SerializeField] ScrollerController m_ActivityCtrl;
|
[SerializeField] Button m_BtnClose;
|
|
List<int> m_OpenServerActivities = new List<int>();
|
Dictionary<int, bool> m_ActivitySpreadDict = new Dictionary<int, bool>();
|
|
//ImpactRankModel impactRankModel { get { return ModelCenter.Instance.GetModel<ImpactRankModel>(); } }
|
OSRedEnvelopeModel envelopeModel { get { return ModelCenter.Instance.GetModel<OSRedEnvelopeModel>(); } }
|
FairyLeagueModel fairyLeagueModel { get { return ModelCenter.Instance.GetModel<FairyLeagueModel>(); } }
|
OSGiftModel giftModel { get { return ModelCenter.Instance.GetModel<OSGiftModel>(); } }
|
FestivalRedpackModel festivalRedpackModel { get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); } }
|
MonthWeekInvestModel monthWeekInvestModel { get { return ModelCenter.Instance.GetModel<MonthWeekInvestModel>(); } }
|
|
List<int> openActivitys = new List<int>();
|
List<int> priorityActivitys = new List<int>();
|
List<int> alreadyOpenActivitys = new List<int>();
|
|
public static event Func<bool> tryCloseEvent;
|
|
protected override void BindController()
|
{
|
var configs = OpenServerActivityConfig.GetValues();
|
foreach (var item in configs)
|
{
|
m_OpenServerActivities.Add(item.id);
|
}
|
m_OpenServerActivities.Sort((x, y) =>
|
{
|
var config_x = OpenServerActivityConfig.Get(x);
|
var config_y = OpenServerActivityConfig.Get(y);
|
return config_x.order.CompareTo(config_y.order);
|
});
|
}
|
|
protected override void AddListeners()
|
{
|
m_ActivityCtrl.OnRefreshCell += OnOpenServerActivityRefresh;
|
m_ActivityCtrl.OnGetDynamicSize += OnGetDynamicSize;
|
m_ActivityCtrl.lockType = EnhanceLockType.KeepVertical;
|
m_BtnClose.onClick.AddListener(TryClose);
|
}
|
|
protected override void OnPreOpen()
|
{
|
TimeUtility.OnServerOpenDayRefresh += OnStepServerDayEvent;
|
OperationTimeHepler.Instance.operationTimeUpdateEvent += OperationTimeUpdateEvent;
|
OpenServerActivityCenter.Instance.openServerActivityStateChange += OpenServerActivityStateChange;
|
for (int i = 0; i < m_OpenServerActivities.Count; i++)
|
{
|
m_ActivitySpreadDict[m_OpenServerActivities[i]] = false;
|
}
|
//var impactDefaultType = impactRankModel.GetDefaultSelectType();
|
//if (impactRankModel.IsLock(impactDefaultType))
|
//{
|
// impactDefaultType = impactRankModel.impactRankSorts[0];
|
//}
|
//impactRankModel.presentSelectType = impactDefaultType;
|
//impactRankModel.gotoImpactRankType = 0;
|
envelopeModel.selectType = 1;
|
festivalRedpackModel.selectType = 1;
|
monthWeekInvestModel.selectType = monthWeekInvestModel.investTypes[0];
|
giftModel.SetAreadyOpens();
|
GlobalTimeEvent.Instance.secondEvent += SecondEvent;
|
CheckAlreadyOpen();
|
UpdateFunctionBtns();
|
}
|
|
protected override void OnActived()
|
{
|
if (alreadyOpenActivitys.Count == 0)
|
{
|
CloseImmediately();
|
return;
|
}
|
if (functionOrder == 0 && !WindowJumpMgr.Instance.IsJumpState)
|
{
|
functionOrder = GetDefaultSelect();
|
if (RequireAutoSpread(functionOrder))
|
{
|
m_ActivitySpreadDict[functionOrder] = true;
|
}
|
UpdateFunctionBtns();
|
}
|
else
|
{
|
if (!alreadyOpenActivitys.Contains(functionOrder))
|
{
|
functionOrder = GetDefaultSelect();
|
}
|
if (RequireAutoSpread(functionOrder))
|
{
|
m_ActivitySpreadDict[functionOrder] = true;
|
}
|
if (functionOrder == 2)
|
{
|
envelopeModel.selectType = envelopeModel.JumpType != 0 ? envelopeModel.JumpType : 1;
|
envelopeModel.JumpType = 0;
|
}
|
else if (functionOrder == 6)
|
{
|
giftModel.selectIndex = giftModel.GetDefaultSelect();
|
}
|
else if (functionOrder == 19)
|
{
|
festivalRedpackModel.selectType = festivalRedpackModel.jumpType != 0 ? festivalRedpackModel.jumpType : 1;
|
festivalRedpackModel.jumpType = 0;
|
}
|
else if (functionOrder == 22)
|
{
|
monthWeekInvestModel.selectType = monthWeekInvestModel.GetSelectType();
|
}
|
|
UpdateFunctionBtns();
|
}
|
OnOpenActivity(functionOrder);
|
|
var index = alreadyOpenActivitys.IndexOf(functionOrder);
|
if (alreadyOpenActivitys.Contains(6))
|
{
|
if (index > alreadyOpenActivitys.IndexOf(6))
|
{
|
index = index + giftModel.alreadyOpens.Count - 1;
|
}
|
else if (index == alreadyOpenActivitys.IndexOf(6))
|
{
|
index = index + giftModel.selectIndex;
|
}
|
}
|
m_ActivityCtrl.JumpIndex(index);
|
}
|
|
protected override void OnAfterOpen()
|
{
|
//impactRankModel.OSCEffectOpen = false;
|
}
|
|
protected override void OnPreClose()
|
{
|
TimeUtility.OnServerOpenDayRefresh -= OnStepServerDayEvent;
|
OperationTimeHepler.Instance.operationTimeUpdateEvent -= OperationTimeUpdateEvent;
|
OpenServerActivityCenter.Instance.openServerActivityStateChange -= OpenServerActivityStateChange;
|
GlobalTimeEvent.Instance.secondEvent -= SecondEvent;
|
CloseOtherWin();
|
//impactRankModel.gotoImpactRankType = 0;
|
}
|
|
protected override void OnAfterClose()
|
{
|
if (!WindowJumpMgr.Instance.IsJumpState)
|
{
|
WindowCenter.Instance.Open<MainInterfaceWin>();
|
}
|
}
|
|
private bool RequireAutoSpread(int order)
|
{
|
switch (order)
|
{
|
case 22:
|
return true;
|
default:
|
return false;
|
}
|
}
|
|
private void TryClose()
|
{
|
switch (functionOrder)
|
{
|
case 18:
|
if (tryCloseEvent != null)
|
{
|
if (!tryCloseEvent())
|
{
|
return;
|
}
|
}
|
break;
|
}
|
CloseClick();
|
}
|
|
int GetDefaultSelect()
|
{
|
openActivitys.Clear();
|
priorityActivitys.Clear();
|
|
for (int i = 0; i < m_OpenServerActivities.Count; i++)
|
{
|
var activityId = m_OpenServerActivities[i];
|
if (OpenServerActivityCenter.Instance.IsActivityOpen(activityId))
|
{
|
openActivitys.Add(activityId);
|
if (OpenServerActivityCenter.Instance.IsPriorityOpenOpen(activityId))
|
{
|
priorityActivitys.Add(activityId);
|
|
switch (activityId)
|
{
|
case 2:
|
envelopeModel.selectType = envelopeModel.m_RedAchieveRedpoint.state == RedPointState.Simple ? 1 : 2;
|
break;
|
case 6:
|
giftModel.selectIndex = giftModel.GetDefaultSelect();
|
break;
|
case 19:
|
if (festivalRedpackModel.systemRedpoint.state == RedPointState.Simple)
|
{
|
festivalRedpackModel.selectType = 1;
|
break;
|
}
|
else if (festivalRedpackModel.taskRedpoint.state == RedPointState.Simple)
|
{
|
festivalRedpackModel.selectType = 2;
|
break;
|
}
|
else if (festivalRedpackModel.receiveRedpoint.state == RedPointState.Simple)
|
{
|
festivalRedpackModel.selectType = 3;
|
break;
|
}
|
festivalRedpackModel.selectType = 1;
|
break;
|
case 22:
|
monthWeekInvestModel.selectType = monthWeekInvestModel.GetSelectType();
|
break;
|
default:
|
break;
|
}
|
}
|
}
|
}
|
if (priorityActivitys.Count > 0)
|
{
|
priorityActivitys.Sort(Compare);
|
return priorityActivitys[0];
|
}
|
else
|
{
|
openActivitys.Sort(Compare);
|
return openActivitys[0];
|
}
|
}
|
|
private void SecondEvent()
|
{
|
var cell = m_ActivityCtrl.GetActiveCellView(12, ScrollerDataType.Header);
|
if (cell != null)
|
{
|
var activityCell = cell as OpenServerActivityCell;
|
var seconds = fairyLeagueModel.GetBeforeFirstLeagueTime();
|
activityCell.timer.text = TimeUtility.SecondsToHMS(seconds);
|
activityCell.containerTimer.SetActive(seconds > 0);
|
}
|
}
|
|
void CheckAlreadyOpen()
|
{
|
alreadyOpenActivitys.Clear();
|
for (int i = 0; i < m_OpenServerActivities.Count; i++)
|
{
|
if (OpenServerActivityCenter.Instance.IsActivityOpen(m_OpenServerActivities[i]))
|
{
|
alreadyOpenActivitys.Add(m_OpenServerActivities[i]);
|
}
|
}
|
}
|
|
private void OnOpenServerActivityRefresh(ScrollerDataType type, CellView cell)
|
{
|
switch (type)
|
{
|
case ScrollerDataType.Header:
|
RefreshOpenActivityCell(cell as OpenServerActivityCell);
|
break;
|
case ScrollerDataType.Normal:
|
RefreshActivityTypeCell(cell as OpenActivityRankTypeCell);
|
break;
|
}
|
}
|
|
private bool OnGetDynamicSize(ScrollerDataType type, int index, out float height)
|
{
|
height = 74;
|
var sort = index;
|
if (type == ScrollerDataType.Header)
|
{
|
if (!m_ActivitySpreadDict.ContainsKey(sort) || !m_ActivitySpreadDict[sort]
|
|| !OpenServerActivityCenter.Instance.ExistChildBookmark(sort))
|
{
|
height = 121;
|
return true;
|
}
|
}
|
return false;
|
}
|
|
private void RefreshOpenActivityCell(OpenServerActivityCell _cell)
|
{
|
var activityType = 0;
|
activityType = _cell.index >= 1000 ? _cell.index / 1000 : _cell.index;
|
var extraValue = _cell.index % 1000;
|
|
var customActivity = m_OpenServerActivities.Find((x) =>
|
{
|
return x == activityType;
|
});
|
|
switch (activityType)
|
{
|
case 12:
|
{
|
var seconds = fairyLeagueModel.GetBeforeFirstLeagueTime();
|
_cell.containerTimer.SetActive(seconds > 0);
|
if (seconds > 0)
|
{
|
_cell.timer.text = TimeUtility.SecondsToHMS(seconds);
|
}
|
}
|
break;
|
default:
|
_cell.containerTimer.SetActive(false);
|
break;
|
}
|
|
_cell.activityType = activityType;
|
|
var config = OpenServerActivityConfig.Get(activityType);
|
|
switch (activityType)
|
{
|
case 6:
|
_cell.redpoint.redpointId = 20906 * 100 + extraValue;
|
var payType = giftModel.gifts[extraValue].payType;
|
_cell.SetSelect(extraValue == giftModel.selectIndex && functionOrder == activityType);
|
_cell.icon.SetSprite(StringUtility.Contact(config.icon, payType));
|
break;
|
default:
|
_cell.redpoint.redpointId = MainRedDot.REDPOINT_OPENSERVER * 100 + activityType;
|
_cell.SetSelect(_cell.activityType == functionOrder);
|
_cell.icon.SetSprite(config.icon);
|
break;
|
}
|
|
_cell.downArrow.SetActive(false);
|
_cell.upArrow.SetActive(false);
|
|
if (OpenServerActivityCenter.Instance.ExistChildBookmark(_cell.activityType))
|
{
|
_cell.downArrow.SetActive(m_ActivitySpreadDict[_cell.activityType]);
|
_cell.upArrow.SetActive(!m_ActivitySpreadDict[_cell.activityType]);
|
}
|
|
_cell.funcBtn.onClick.RemoveAllListeners();
|
_cell.funcBtn.onClick.AddListener(() =>
|
{
|
OnActivityClick(_cell.activityType, extraValue);
|
});
|
}
|
|
private void OnStepServerDayEvent()
|
{
|
UpdateFunctionBtns();
|
}
|
|
private void RefreshActivityTypeCell(OpenActivityRankTypeCell _cell)
|
{
|
int _order = _cell.index / 100;
|
int _type = _cell.index % 100;
|
|
_cell.redpoint.redpointId = (209 * 100 + _order) * 100 + _type;
|
switch (_order)
|
{
|
//case 0:
|
// _cell.titleTxt.text = Language.Get(StringUtility.Contact("ImpactRankType_", _type));
|
// _cell.SetSelect(_type == impactRankModel.presentSelectType);
|
// break;
|
case 2:
|
_cell.titleTxt.text = Language.Get(StringUtility.Contact("OSRedEnvelopeType_", _type));
|
_cell.SetSelect(_type == envelopeModel.selectType);
|
break;
|
case 19:
|
_cell.titleTxt.text = Language.Get(StringUtility.Contact("FestivalRedpackType_", _type));
|
_cell.SetSelect(_type == festivalRedpackModel.selectType);
|
break;
|
case 22:
|
_cell.titleTxt.text = Language.Get(StringUtility.Contact("MonthWeekInvestType_", _type));
|
_cell.SetSelect(_type == monthWeekInvestModel.selectType);
|
break;
|
default:
|
break;
|
}
|
|
_cell.functionBtn.onClick.RemoveAllListeners();
|
_cell.functionBtn.onClick.AddListener(() =>
|
{
|
OnActivityType(_cell.index);
|
});
|
}
|
|
private void UpdateFunctionBtns()
|
{
|
m_ActivityCtrl.Refresh();
|
for (int i = 0; i < m_OpenServerActivities.Count; i++)
|
{
|
var activityId = m_OpenServerActivities[i];
|
if (!alreadyOpenActivitys.Contains(activityId))
|
{
|
continue;
|
}
|
switch (activityId)
|
{
|
//case 0:
|
// m_ActivityCtrl.AddCell(ScrollerDataType.Header, activityId);
|
// if (functionOrder != activityId)
|
// {
|
// m_ActivitySpreadDict[activityId] = false;
|
// break;
|
// }
|
// if (!m_ActivitySpreadDict[activityId])
|
// {
|
// break;
|
// }
|
//foreach (var _type in impactRankModel.impactRankSorts)
|
//{
|
// //if (impactRankModel.IsLock(_type))
|
// //{
|
// // continue;
|
// //}
|
// m_ActivityCtrl.AddCell(ScrollerDataType.Normal, activityId * 100 + _type);
|
//}
|
//break;
|
case 2:
|
m_ActivityCtrl.AddCell(ScrollerDataType.Header, activityId);
|
if (!m_ActivitySpreadDict[activityId])
|
{
|
m_ActivitySpreadDict[activityId] = false;
|
break;
|
}
|
m_ActivityCtrl.AddCell(ScrollerDataType.Normal, activityId * 100 + 1);
|
m_ActivityCtrl.AddCell(ScrollerDataType.Normal, activityId * 100 + 2);
|
break;
|
case 6:
|
for (int k = 0; k < giftModel.alreadyOpens.Count; k++)
|
{
|
m_ActivityCtrl.AddCell(ScrollerDataType.Header, activityId * 1000 + giftModel.alreadyOpens[k]);
|
}
|
break;
|
case 19:
|
m_ActivityCtrl.AddCell(ScrollerDataType.Header, activityId);
|
if (!m_ActivitySpreadDict[activityId])
|
{
|
m_ActivitySpreadDict[activityId] = false;
|
break;
|
}
|
m_ActivityCtrl.AddCell(ScrollerDataType.Normal, activityId * 100 + 1);
|
m_ActivityCtrl.AddCell(ScrollerDataType.Normal, activityId * 100 + 2);
|
m_ActivityCtrl.AddCell(ScrollerDataType.Normal, activityId * 100 + 3);
|
break;
|
case 22:
|
m_ActivityCtrl.AddCell(ScrollerDataType.Header, activityId);
|
if (!m_ActivitySpreadDict[activityId])
|
{
|
m_ActivitySpreadDict[activityId] = false;
|
break;
|
}
|
for (int k = 0; k < monthWeekInvestModel.investTypes.Count; k++)
|
{
|
m_ActivityCtrl.AddCell(ScrollerDataType.Normal, activityId * 100 + monthWeekInvestModel.investTypes[k]);
|
}
|
break;
|
default:
|
m_ActivityCtrl.AddCell(ScrollerDataType.Header, activityId);
|
if (OpenServerActivityCenter.Instance.ExistChildBookmark(activityId))
|
{
|
if (!m_ActivitySpreadDict[activityId])
|
{
|
m_ActivitySpreadDict[activityId] = false;
|
break;
|
}
|
var childTypes = OpenServerActivityCenter.Instance.GetChildTypes(activityId);
|
for (int k = 0; k < childTypes.Length; k++)
|
{
|
m_ActivityCtrl.AddCell(ScrollerDataType.Normal, activityId * 100 + childTypes[k]);
|
}
|
}
|
break;
|
}
|
}
|
m_ActivityCtrl.Restart();
|
m_ActivityCtrl.m_Scorller.RefreshActiveCellViews();
|
}
|
|
private void OnActivityClick(int _order, int extra = 0)
|
{
|
if (functionOrder == _order && _order != 6)
|
{
|
m_ActivitySpreadDict[_order] = !m_ActivitySpreadDict[_order];
|
UpdateFunctionBtns();
|
return;
|
}
|
else
|
{
|
m_ActivitySpreadDict[functionOrder] = false;
|
m_ActivitySpreadDict[_order] = true;
|
}
|
|
if (functionOrder != _order)
|
{
|
functionOrder = _order;
|
OnOpenActivity(functionOrder);
|
}
|
|
switch (functionOrder)
|
{
|
case 6:
|
giftModel.selectIndex = extra;
|
break;
|
}
|
|
UpdateFunctionBtns();
|
}
|
|
private void OnOpenActivity(int _order)
|
{
|
CloseOtherWin();
|
|
var functionInfos = WindowConfig.GetWindowFunctionInfos("OpenServerActivityWin");
|
var index = functionInfos.FindIndex((x) =>
|
{
|
return x.order == _order;
|
});
|
|
if (index != -1)
|
{
|
WindowCenter.Instance.Open(functionInfos[index].window, true);
|
}
|
}
|
|
private void OnActivityType(int _index)
|
{
|
var _order = _index / 100;
|
var _type = _index % 100;
|
switch (_order)
|
{
|
//case 0:
|
// if (impactRankModel.IsLock(_type))
|
// {
|
// SysNotifyMgr.Instance.ShowTip("ImpactRankActivityUnOpen");
|
// return;
|
// }
|
// impactRankModel.presentSelectType = _type;
|
// break;
|
case 2:
|
envelopeModel.selectType = _type;
|
break;
|
case 19:
|
festivalRedpackModel.selectType = _type;
|
break;
|
case 22:
|
monthWeekInvestModel.selectType = _type;
|
break;
|
default:
|
break;
|
}
|
m_ActivityCtrl.m_Scorller.RefreshActiveCellViews();
|
}
|
|
private void CloseOtherWin()
|
{
|
var children = WindowConfig.GetChildWindows("OpenServerActivityWin");
|
foreach (var window in children)
|
{
|
WindowCenter.Instance.Close(window);
|
}
|
}
|
|
private int Compare(int order_x, int order_y)
|
{
|
var index_x = m_OpenServerActivities.FindIndex((x) =>
|
{
|
return order_x == x;
|
});
|
var index_y = m_OpenServerActivities.FindIndex((x) =>
|
{
|
return order_y == x;
|
});
|
return index_x.CompareTo(index_y);
|
}
|
|
private void OperationTimeUpdateEvent(Operation type)
|
{
|
if (type == Operation.MultipleExp || type == Operation.MultipRealmPoint)
|
{
|
m_ActivityCtrl.m_Scorller.RefreshActiveCellViews();
|
}
|
}
|
|
private void OpenServerActivityStateChange()
|
{
|
bool _update = false;
|
for (int i = 0; i < m_OpenServerActivities.Count; i++)
|
{
|
var activityId = m_OpenServerActivities[i];
|
if (OpenServerActivityCenter.Instance.IsActivityOpen(activityId)
|
&& !alreadyOpenActivitys.Contains(activityId))
|
{
|
alreadyOpenActivitys.Add(activityId);
|
_update = true;
|
}
|
}
|
if (_update)
|
{
|
UpdateFunctionBtns();
|
}
|
}
|
}
|
}
|
|