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 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; } } }