using System; public class FestivalActivityCheckInManager : GameSystemManager, IOpenServerActivity { public readonly int ActNum = 30; public override void Init() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitializeEventOnRelogin; OperationTimeHepler.Instance.operationTimeUpdateEvent += OperationTimeUpdateEvent; OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent; OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent; OperationTimeHepler.Instance.operationAdvanceEvent += OperationAdvanceEvent; FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; GeneralActInfoManager.Instance.OnUpdateActSignInfosEvent += OnUpdateActSignInfosEvent; TimeMgr.Instance.OnDayEvent += OnDayEvent; } public override void Release() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= OnBeforePlayerDataInitializeEventOnRelogin; OperationTimeHepler.Instance.operationTimeUpdateEvent -= OperationTimeUpdateEvent; OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent; OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent; OperationTimeHepler.Instance.operationAdvanceEvent -= OperationAdvanceEvent; FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; GeneralActInfoManager.Instance.OnUpdateActSignInfosEvent -= OnUpdateActSignInfosEvent; TimeMgr.Instance.OnDayEvent -= OnDayEvent; } private void OnBeforePlayerDataInitializeEventOnRelogin() { } private void OnDayEvent() { UpdateRedPoint(); } private void OnUpdateActSignInfosEvent(int arg1, int arg2) { UpdateRedPoint(); } private void OnFuncStateChangeEvent(int obj) { if (obj != (int)FuncOpenEnum.FestivalActivity) return; UpdateRedPoint(); } public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_DateActivity; public const int activityID = (int)NewDayActivityID.FestivalActivityCheckInAct; public static OperationType operaType = OperationType.FestivalActivity_CheckIn; public Redpoint redPoint = new Redpoint(MainRedDot.FestivalActivityRepoint, FestivalActivityManager.Instance.GetRedPointId(FestivalActivityRepointType.CheckIn)); public bool IsOpen => OperationTimeHepler.Instance.SatisfyOpenCondition(operaType); public bool IsAdvance => OperationTimeHepler.Instance.SatisfyAdvanceCondition(operaType); public bool priorityOpen => redPoint.state == RedPointState.Simple; public event Action onStateUpdate; private void OperationTimeUpdateEvent(OperationType type) { if (type == operaType) { UpdateRedPoint(); } } private void OperationStartEvent(OperationType type, int state) { if (type == operaType && state == 0) { UpdateRedPoint(); onStateUpdate?.Invoke(activityID); } } private void OperationEndEvent(OperationType type, int state) { if (type == operaType) { UpdateRedPoint(); onStateUpdate?.Invoke(activityID); } } private void OperationAdvanceEvent(OperationType type) { if (type == operaType) { UpdateRedPoint(); onStateUpdate?.Invoke(activityID); } } public void UpdateRedPoint() { redPoint.state = RedPointState.None; if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.FestivalActivity)) return; if (!IsOpen) return; if (HasCheckInCanHave()) { redPoint.state = RedPointState.Simple; } } public OperationCheckInActivityInfo GetOperationCheckInInfo() { OperationTimeHepler.Instance.TryGetOperation(operaType, out OperationCheckInActivityInfo act); return act; } public bool GetActInfo(out OperationCheckInActivityInfo act, out ActSignConfig config) { config = null; act = GetOperationCheckInInfo(); if (act == null) return false; config = ActSignConfig.Get(act.CfgID); return config != null; } private int GetNowDayNum() { var act = GetOperationCheckInInfo(); if (act == null) return 0; int dayNum = act.IndexOfDays(TimeUtility.ServerNow); return dayNum < 0 ? 0 : dayNum + 1; } private bool IsCheckInGridUnlock(int gridDayNum) { int nowDayNum = GetNowDayNum(); if (nowDayNum <= 0) return false; return nowDayNum >= gridDayNum; } /// /// 0-未解锁 1-可签 2-已签 /// public int GetCheckInState(int gridDayNum) { // 签到活动的ActType默认为0 if (GeneralActInfoManager.Instance.IsDaySigned(0, ActNum, gridDayNum)) return 2; if (IsCheckInGridUnlock(gridDayNum)) return 1; return 0; } public void SendGetCheckInReward() { // 签到活动的ActType默认为0 GeneralActInfoManager.Instance.SendGetSignReward(0, ActNum); } public bool HasCheckInCanHave() { if (!GetActInfo(out var act, out var config)) return false; int templateID = config.SignTempID; var list = ActSignAwardConfig.GetDayNumSortList(templateID); if (list == null) return false; for (int i = 0; i < list.Count; i++) { int dayNum = list[i]; int state = GetCheckInState(dayNum); if (state == 1) return true; } return false; } public void GetActTimeStr(TextEx timeText, string key = "TimeRush05") { var act = GetOperationCheckInInfo(); if (act == null) { timeText.text = Language.Get("OSActivity6"); return; } timeText.text = Language.Get(key, TimeUtility.SecondsToShortDHMS(act.GetResetSurplusTime())); } }