local UIGoldenHeroStoryPath = UIViewClass() local MOVE_DURATION = 0.5 --移动的时间 local ScreenWidth = UnityEngine.Screen.width local function StringFormat(ids) return string.FormatByIdsId(Const_IDS.IDS_GoldHeroActivity_ActivityLevel_OpenHint, UIUtils.GetLocalizedTxt(Const_IDS[ids])) end function UIGoldenHeroStoryPath:TimerFunc() UIUtils.SetActive(self.group_Time, false) end function UIGoldenHeroStoryPath:OnOpened(context) self.parentView = context.parentView self.activityId = context.parentView.activityId self.heroType = context.parentView.heroType self.activityType = MDL.OperationActivity.ActivityType.GoldenHero if context.parentView.storyLevelInfo then self.curLevelID = context.parentView.storyLevelInfo.levelCfg.ID end if context.parentView.storyTaskInfo then self.gotoTaskID = context.parentView.storyTaskInfo.taskCfg.TaskID end self:RegistSystemEvent(EventID.UI_GoldenHeroStory_RefreshStoryPanel, self.RefreshGoldenHeroStoryTaskAndLevel) -- 关卡成就奖励领取后刷新关卡 self:RegistSystemEvent(EventID.UI_GoldenHeroStory_RefreshStoryStarPanel, self.RefreshGoldenHeroStoryLevelList) -- 关卡成就奖励领取后刷新关卡 self:RegistSystemEvent(EventID.UI_GoldenHeroStory_RecoverPathPosition, self.GoldenHeroStoryRecoverPathPosition) self:RegistSystemEvent(EventID.UI_GoldenHeroStory_GoldHeroSkipAllStory, self.InitPathTimer) self:RegistSystemEvent(CTL.GoldenHeroMain.RpEventId[self.activityId].StoryNewLevel, self.RefreshGoldenHeroStoryTaskAndLevel) -- 新关卡红点 self:RegistSystemEvent(CTL.GoldenHeroMain.RpEventId[self.activityId].StoryAchievementReward, self.RefreshGoldenHeroStoryTaskAndLevel) -- 成就奖励可领红点 self:RegistSystemEvent(EventID.UI_GoldenHero_RefreshCurrency, self.RefreshGoldenHeroStoryLevelList) self:InitPathTimer() self:RefreshGoldenHeroStoryTaskAndLevel() end function UIGoldenHeroStoryPath:OnButtonClicked(comp) self.gotoTaskID = 0 self.curLevelID = 0 for k,v in ipairs(self.group_Task) do if v.state_SelectTask then v.state_SelectTask:SetState(0) else v.group_Task.state_SelectTask:SetState(0) end end for k,v in ipairs(self.group_Level) do local levelCell = v if v.level_Cell then levelCell = v.level_Cell end levelCell.effect_Btn:StopUIEffect() end for k,v in ipairs(self.group_Task) do local cellTable = v.group_Task and v.group_Task or v if comp == cellTable.btn_Task then self.parentView.subView:CloseAll() if self:IsGoldenHeroStoryTaskUnlock(self.taskInfoList[k].taskCfg.TaskID) then if self.taskInfoList[k].taskState == MDL.GoldenHeroStory.Enum_TaskState.Lock then CTL.Tips.AddTipsMsg(Const_IDS.IDS_GoldHeroActivity_ActivityLevel_LockHint2) else cellTable.state_SelectTask:SetState(1) self:SetGoldenHeroStoryContentPosition(v.gameObject.transform) self.parentView:ChangeSunUIPanel(0, self.taskInfoList[k]) end else CTL.Tips.AddTipsMsg(Const_IDS.IDS_GoldHeroActivity_ActivityLevel_LockHint2) end end end for k,v in ipairs(self.group_Level) do local levelCell = v if v.level_Cell then levelCell = v.level_Cell end if comp == levelCell.btn_Level then if self:IsGoldenHeroStoryLevelUnlock(self.levelInfoList[k].levelCfg.ID) then if self.levelInfoList[k].levelState == MDL.GoldenHeroStory.LevelState.Lock then CTL.Tips.AddTipsMsg(Const_IDS.IDS_GoldHeroActivity_ActivityLevel_LockHint1) else levelCell.effect_Btn:PlayUIEffect() self.curLevelID = DataSheetManager.GoldHeroActivityLevel:GetDataByID(self.levelIDList[k]).ID self:SetGoldenHeroStoryContentPosition(v.gameObject.transform) self.parentView:ChangeSunUIPanel(1, self.levelInfoList[k]) end else CTL.Tips.AddTipsMsg(Const_IDS.IDS_GoldHeroActivity_ActivityLevel_LockHint1) end end end end function UIGoldenHeroStoryPath:InitPathTimer() local isShowTimer = MDL.GoldenHeroStory.IsShowNextLevelTimerByActivityID(self.activityId, self.heroType) UIUtils.SetActive(self.group_Time, isShowTimer) self:StartRepeatFunc(self.TimerFunc, UTL.Time.GetServerIntervalTimeToRefresh(1)) if isShowTimer then self.cdTimer:SetDHMSStr(StringFormat("IDS_PreviewTime1"), StringFormat("IDS_PreviewTime2"), StringFormat("IDS_PreviewTime3"), StringFormat("IDS_PreviewTime4")) self:SetCDTimer(self.cdTimer, UTL.Time.GetServerIntervalTimeToRefresh(1)) end end function UIGoldenHeroStoryPath:RefreshGoldenHeroStoryTaskAndLevel() self:InitGoldenHeroStoryGroupData() self:RefreshGoldenHeroStoryTaskList() self:RefreshGoldenHeroStoryLevelList() end function UIGoldenHeroStoryPath:RefreshGoldenHeroStoryTaskList() self.taskIDList = MDL.GoldenHeroStory.GetTaskIDListByGoldenHeroID(self.heroType) self.taskInfoList = {} for k,v in ipairs(self.group_Task) do local cellTable = v.group_Task and v.group_Task or v local taskCfg = DataSheetManager.GoldHeroActivityTask:GetDataByTaskID(self.taskIDList[k]) local taskState = MDL.GoldenHeroStory.GetTaskStateByActivityID_HeroType_TaskFatherID(self.activityId, self.heroType, taskCfg.TaskID) local taskInfo = {taskCfg = taskCfg, taskState = taskState} self:RefreshGoldenHeroStoryTaskInfo(cellTable, taskInfo) table.insert(self.taskInfoList, taskInfo) if self.gotoTaskID and self.gotoTaskID == taskCfg.TaskID then cellTable.state_SelectTask:SetState(1) self:SetGoldenHeroStoryContentPosition(v.gameObject.transform) end end end function UIGoldenHeroStoryPath:RefreshGoldenHeroStoryLevelList() self.levelIDList = MDL.GoldenHeroStory.GetLevelIDListByGoldenHeroID(self.heroType) self.levelInfoList = {} for k,v in ipairs(self.group_Level) do local levelCell = v if v.level_Cell then levelCell = v.level_Cell end levelCell.effect_Btn:StopUIEffect() local levelCfg = DataSheetManager.GoldHeroActivityLevel:GetDataByID(self.levelIDList[k]) local levelState = MDL.GoldenHeroStory.GetGoldHeroLevelStateByActivityID_LevelID(self.activityId, levelCfg.ID) -- 关卡状态 local levelInfo = {levelCfg = levelCfg, levelState = levelState} self:RefreshGoldenHeroStoryLevelInfo(v, levelInfo) table.insert(self.levelInfoList, levelInfo) if self.curLevelID and self.curLevelID == levelCfg.ID then levelCell.effect_Btn:PlayUIEffect() self:SetGoldenHeroStoryContentPosition(v.gameObject.transform) end local levelId = levelCfg.ID if MDL.GoldenHeroStory.GetSweepRedPointByActivityID_LevelID(self.activityId, levelId) then UIUtils.SetActive(levelCell.group_Sweep, true) else UIUtils.SetActive(levelCell.group_Sweep, false) end levelCell.btn_Level:SetRedPoint(MDL.GoldenHeroStory.GetAchievementRewardRedPointByActivityID_LevelID(self.activityId, levelId)) -- 新关卡红点 + 成就奖励可领红点 end end function UIGoldenHeroStoryPath:RefreshGoldenHeroStoryTaskInfo(cellTable, data) local taskCell = {} local line = {} if cellTable.state_SelectTask then taskCell = cellTable line = taskCell.state_Line else taskCell = cellTable.group_Task line = cellTable.state_Line end taskCell.state_SelectTask:SetState(0) if data.taskState == MDL.GoldenHeroStory.Enum_TaskState.Done then taskCell.state_Icon:SetState(1) elseif data.taskState == MDL.GoldenHeroStory.Enum_TaskState.Lock then taskCell.state_Icon:SetState(0) end if line then line:SetState(data.taskState ~= MDL.GoldenHeroStory.Enum_TaskState.Lock and 1 or 0) end if taskCell.state_SubLine then local taskIsDone = false for k,v in DataSheetManager.GoldHeroActivityGroup[self.heroType]:GetEnumerator() do if v.TaskID[1] == data.taskCfg.TaskID then for _,groupID in ipairs(v.NextGroupID) do if taskIsDone == false then local taskID = DataSheetManager.GoldHeroActivityGroup[self.heroType]:GetDataByGroupID(groupID).TaskID[1] local taskState = MDL.GoldenHeroStory.GetTaskStateByActivityID_HeroType_TaskFatherID(self.activityId, self.heroType, taskID) taskIsDone = taskState ~= MDL.GoldenHeroStory.Enum_TaskState.Lock end end end end taskCell.state_SubLine:SetState(taskIsDone and 1 or 0) end local taskData = DataSheetManager.TaskFatherData:GetDataByID(data.taskCfg.TaskChainID) UIUtils.SetLabelText(taskCell.lab_Task, Const_IDS[taskData.Brief]) -- 任务名称 UIUtils.SetActive(taskCell.img_Mask, data.taskState == MDL.GoldenHeroStory.Enum_TaskState.Lock) UIUtils.SetActive(taskCell.img_TxtBg, data.taskState ~= MDL.GoldenHeroStory.Enum_TaskState.Lock) end function UIGoldenHeroStoryPath:RefreshGoldenHeroStoryLevelInfo(cellTable, data) local levelCell = cellTable if cellTable.level_Cell then levelCell = cellTable.level_Cell end levelCell.effect_Btn:StopUIEffect() UIUtils.SetLabelText(levelCell.lab_Level, Const_IDS[data.levelCfg.BarrierName]) -- 关卡名称 UIUtils.SetImageByAssetBundle(levelCell.img_Level, data.levelCfg.BarrierPic) -- 关卡图片 levelCell.state_Img:SetState(data.levelState == MDL.GoldenHeroStory.LevelState.Lock and 0 or 1) local achievementStateList = MDL.GoldenHeroStory.GetAchievementRewardRedPointListByActivityID_LevelID(self.activityId, data.levelCfg.ID) for k,v in ipairs(levelCell.group_Star) do UIUtils.SetActive(v, achievementStateList[k] >= MDL.GoldenHeroStory.Enum_LevelAchieveState.WaitForGet) end if cellTable.state_Line then cellTable.state_Line:SetState(data.levelState ~= MDL.GoldenHeroStory.LevelState.Lock and 1 or 0) end end function UIGoldenHeroStoryPath:InitGoldenHeroStoryGroupData() local startTime = MDL.OperationActivity.GetOperationActivityInfo(self.activityType, self.activityId).startTime self.curDay = UTL.Time.GetTimestampDay(startTime) self.totalDays = DataSheetManager.GoldHeroActivityOpen[self.heroType]:GetDataCount() self.unLockTaskIDList = {} self.unLockLevelIDList = {} self.serverGroupIDList = MDL.GoldenHeroStory.GetServerGroupInfoByActivityID(self.activityId) for _,groupID in ipairs(self.serverGroupIDList) do local groupCfg = DataSheetManager.GoldHeroActivityGroup[self.heroType]:GetDataByGroupID(groupID) for _,taskID in ipairs(groupCfg.TaskID) do table.insert(self.unLockTaskIDList, taskID) end for _,levelID in ipairs(groupCfg.LevelID) do if levelID > 0 then table.insert(self.unLockLevelIDList, levelID) end end end end function UIGoldenHeroStoryPath:IsGoldenHeroStoryTaskUnlock(taskID) for k,v in ipairs(self.unLockTaskIDList) do if v == taskID then return true end end return false end function UIGoldenHeroStoryPath:IsGoldenHeroStoryLevelUnlock(levelID) for k,v in ipairs(self.unLockLevelIDList) do if v == levelID then return true end end return false end function UIGoldenHeroStoryPath:SetCDTimer(timer, cdTime) if cdTime > 0 then timer:ResetAndBeginCustomTimer(false, cdTime, 0, nil) else timer:EndTimer() end end function UIGoldenHeroStoryPath:SetGoldenHeroStoryContentPosition(targetTrans) local maskWidth = ScreenWidth + self.viewport.sizeDelta.x -- 可见区域长度 local contentWidth = self.tran_content.sizeDelta.x -- 滑动区域总长度 if targetTrans.localPosition.x > maskWidth * 0.4 then if (contentWidth - targetTrans.localPosition.x) > maskWidth * 0.5 then if self.group_Path.localPosition ~= 0 then self:MoveToPos(self.group_Path, 0, 0, 0.1, false) end local xPos = targetTrans.localPosition.x - (maskWidth * 0.5) self:MoveToPos(self.tran_content, -xPos, 0, MOVE_DURATION, false) elseif (contentWidth - targetTrans.localPosition.x) < maskWidth then if (contentWidth - targetTrans.localPosition.x) > maskWidth * 0.4 then local xPos = contentWidth - maskWidth if targetTrans.localPosition.x ~= xPos then self:MoveToPos(self.tran_content, -xPos, 0, 0.1, false) end else if -self.tran_content.localPosition.x < (contentWidth - maskWidth) then self:MoveToPos(self.tran_content, -(contentWidth - maskWidth), 0, 0.1, false) end -- self:MoveToPos(self.group_Path, -(ScreenWidth + self.viewport.sizeDelta.x) * 0.35, 0, MOVE_DURATION, false) end end elseif targetTrans.localPosition.x <= maskWidth * 0.4 then if self.group_Path.localPosition ~= 0 then self:MoveToPos(self.group_Path, 0, 0, 0.1, false) end self:MoveToPos(self.tran_content, 0, 0, MOVE_DURATION, false) end end function UIGoldenHeroStoryPath:GoldenHeroStoryRecoverPathPosition() if self.group_Path.localPosition ~= 0 then self:MoveToPos(self.group_Path, 0, 0, MOVE_DURATION * 0.5, false) end end return UIGoldenHeroStoryPath