local FestivalLogin_Controller = {} local private = {} local EventSystem = require('Event/EventSystem') local FestivalLoginActiveView = { Const_UI_Lua.UIEnum.OperationActivity.UIFestivalLoginReward, } function FestivalLogin_Controller.OnStartup() EventSystem.Regist(EventID.UI_OperationActivity_InfoChanged, private.CheckFuncOpenIssue) EventSystem.Regist(EventID.AcquireSystemRedAfterUnlock, private.CheckFuncOpenIssue) EventSystem.Regist(EventID.FunctionUnlockUpdate, private.RefreshInfoByFunction) private.endTimerHandle = {} end --GMS开关变化时刷新 function private.RefreshInfoByFunction(funcId, isUnlock) if funcId == MDL.Unlock.FunctionType.FestivalLogin then if not isUnlock then private.ForceCloseActivityView(funcId) end end end -- 关闭活动界面 function private.ForceCloseActivityView() logging.log(LTAG.LOG, "GoldHeroReprint Function(include GMS) ActivityEnd ") local activityInfoList = MDL.FestivalLogin.GetFestivalLoginInfoList() for k,v in ipairs(activityInfoList) do if v and v.activityId then private.EndAndCloseActivityView(v.activityId) end end end function private.EndAndCloseActivityView(activityId) local activityInfoList = MDL.FestivalLogin.GetFestivalLoginInfoList() for k,v in ipairs(activityInfoList) do if activityId == v.activityId then private.ShutDownPartActivityView(activityId) end end end function private.CheckFuncOpenIssue() if not MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.FestivalLogin) then private.ForceCloseActivityView() return end local festivalLoginInfoList = MDL.FestivalLogin.GetFestivalLoginInfoList() for k,festivalLoginInfo in ipairs(festivalLoginInfoList) do local activityTypeInfo = MDL.OperationActivity.GetOperationActivityInfo(MDL.OperationActivity.ActivityType.FestivalLogin, festivalLoginInfo.activityId) if activityTypeInfo and activityTypeInfo.activityId then local activityId = activityTypeInfo.activityId if private.endTimerHandle[activityId] then TimerUtil.Remove(private.endTimerHandle[activityId]) private.endTimerHandle[activityId] = nil end if not CTL.OperationActivity.IsOperationActivityOpen(activityTypeInfo) then private.EndAndCloseActivityView(activityId) else local deltaTime = activityTypeInfo.endTime - UTL.Time.GetServerTimestamp() if deltaTime <= UTL.Time.TotalSecondsOneDay then private.endTimerHandle[activityId] = TimerUtil.Interval(function() private.EndAndCloseActivityView(activityId) end, deltaTime - 1, 1) --时间减1s是为了防止有误差导致玩家点击出现报错 end end end end end function private.ShutDownPartActivityView(activityId) for i, v in ipairs(FestivalLoginActiveView) do EventSystem.Dispatch(EventID.UI_OperationActivity_CloseView, v, activityId) end end return FestivalLogin_Controller