using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
namespace vnxbqy.UI
|
{
|
|
public class MultipleExpModel : Model, IPlayerLoginOk, IBeforePlayerDataInitialize, IOpenServerActivity
|
{
|
private bool showTip = false;
|
private bool todayRemind = false;
|
public override void Init()
|
{
|
OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
|
OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
|
OperationTimeHepler.Instance.operationTimeUpdateEvent += OperationTimeUpdateEvent;
|
WindowCenter.Instance.windowAfterOpenEvent += WindowAfterOpenEvent;
|
StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
|
OpenServerActivityCenter.Instance.Register(5, this);
|
}
|
|
private void OnStageLoadFinish()
|
{
|
if (!(StageLoad.Instance.stageType == Stage.E_StageType.Dungeon))
|
{
|
showTip = true;
|
todayRemind = false;
|
}
|
}
|
|
private void WindowAfterOpenEvent(Window _win)
|
{
|
if (_win is MainInterfaceWin && StageLoad.Instance.stageType == Stage.E_StageType.Dungeon && showTip)
|
{
|
OperationBase operationBase;
|
if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.MultipleExp, out operationBase)
|
&& operationBase.InDay(TimeUtility.ServerNow) && operationBase.SatisfyOpenCondition())
|
{
|
OperationMultiExp operation = operationBase as OperationMultiExp;
|
if (operationBase.allDay || operation.InTime(TimeUtility.ServerNow))
|
{
|
SysNotifyMgr.Instance.ShowTip("ExpActivity_Goahead",
|
operation.GetMultipleCHS());
|
}
|
else
|
{
|
for (int i = 0; i < operationBase.times.Count; i++)
|
{
|
if (operationBase.times[i].CompareTime(TimeUtility.ServerNow) == -1)
|
{
|
SysNotifyMgr.Instance.ShowTip("ExpActivity_Ready",
|
operation.GetMultipleCHS(),
|
operationBase.times[i].ToString());
|
break;
|
}
|
}
|
}
|
}
|
showTip = false;
|
}
|
}
|
|
public void OnBeforePlayerDataInitialize()
|
{
|
}
|
|
public void OnPlayerLoginOk()
|
{
|
UpdateRedpoint();
|
}
|
|
public override void UnInit()
|
{
|
OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent;
|
OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent;
|
OperationTimeHepler.Instance.operationTimeUpdateEvent -= OperationTimeUpdateEvent;
|
WindowCenter.Instance.windowAfterOpenEvent -= WindowAfterOpenEvent;
|
}
|
|
private void OperationStartEvent(Operation type, int state)
|
{
|
if (type == Operation.MultipleExp && state == 1)
|
{
|
UpdateRedpoint();
|
if (onStateUpdate != null)
|
{
|
onStateUpdate(5);
|
}
|
}
|
}
|
|
private void OperationEndEvent(Operation type, int state)
|
{
|
if (type == Operation.MultipleExp && state == 1)
|
{
|
UpdateRedpoint();
|
if (onStateUpdate != null)
|
{
|
onStateUpdate(5);
|
}
|
}
|
}
|
|
private void OperationTimeUpdateEvent(Operation _type)
|
{
|
if (_type == Operation.MultipleExp)
|
{
|
UpdateRedpoint();
|
}
|
}
|
|
public Redpoint multipleExpRedpoint = new Redpoint(MainRedDot.REDPOINT_OPENSERVER, 20905);
|
|
public event Action<int> onStateUpdate;
|
|
public bool IsOpen
|
{
|
get
|
{
|
return Open();
|
}
|
}
|
|
public bool priorityOpen
|
{
|
get
|
{
|
return multipleExpRedpoint.state == RedPointState.Simple;
|
}
|
}
|
|
public bool IsAdvance
|
{
|
get
|
{
|
return OperationTimeHepler.Instance.SatisfyAdvanceCondition(Operation.MultipleExp);
|
}
|
}
|
|
public void SetDayRemind()
|
{
|
if (multipleExpRedpoint.state == RedPointState.Simple)
|
{
|
todayRemind = true;
|
UpdateRedpoint();
|
}
|
}
|
|
public bool Open()
|
{
|
OperationBase operation;
|
OperationTimeHepler.Instance.TryGetOperationTime(Operation.MultipleExp, out operation);
|
return operation != null && operation.SatisfyOpenCondition() && operation.InDay(TimeUtility.ServerNow);
|
}
|
|
bool LastDayOutTime()
|
{
|
OperationBase operation;
|
if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.MultipleExp, out operation))
|
{
|
if (operation.allDay)
|
{
|
return false;
|
}
|
if (operation.IsLastDay)
|
{
|
bool outTime = true;
|
for (int i = 0; i < operation.times.Count; i++)
|
{
|
if (operation.times[i].CompareTime(TimeUtility.ServerNow) != 1)
|
{
|
outTime = false;
|
break;
|
}
|
}
|
return outTime;
|
}
|
}
|
return false;
|
}
|
|
private void UpdateRedpoint()
|
{
|
multipleExpRedpoint.state = RedPointState.None;
|
if (todayRemind || !Open() || LastDayOutTime())
|
{
|
multipleExpRedpoint.state = RedPointState.None;
|
return;
|
}
|
multipleExpRedpoint.state = RedPointState.Simple;
|
}
|
}
|
}
|
|