local uiCtrl = require_ex('UI/Panels/Base/UICtrl') local PANEL_ID = PanelId.PRTSStoryCollDetail local PHASE_ID = PhaseId.PRTSStoryCollDetail PRTSStoryCollDetailCtrl = HL.Class('PRTSStoryCollDetailCtrl', uiCtrl.UICtrl) PRTSStoryCollDetailCtrl.s_messages = HL.StaticField(HL.Table) << { } local ContentTypeEnum = { RichContent = 0, Radio = 1, } PRTSStoryCollDetailCtrl.m_isFirstLvId = HL.Field(HL.Boolean) << false PRTSStoryCollDetailCtrl.m_showGotoBtn = HL.Field(HL.Boolean) << false PRTSStoryCollDetailCtrl.m_idList = HL.Field(HL.Table) PRTSStoryCollDetailCtrl.m_curPageIndex = HL.Field(HL.Number) << 1 PRTSStoryCollDetailCtrl.m_curItemIndex = HL.Field(HL.Number) << 1 PRTSStoryCollDetailCtrl.m_genIndexPointCells = HL.Field(HL.Forward("UIListCache")) PRTSStoryCollDetailCtrl.m_info = HL.Field(HL.Table) PRTSStoryCollDetailCtrl.m_curItemInfo = HL.Field(HL.Table) PRTSStoryCollDetailCtrl.m_args = HL.Field(HL.Table) PRTSStoryCollDetailCtrl.m_logTimeTemp = HL.Field(HL.Number) << -1 PRTSStoryCollDetailCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg) self.m_args = arg self:_InitUI() self:_InitData(arg) self:_UpdateData() self:_RefreshAllUI() self:_SendEventLog(true) end PRTSStoryCollDetailCtrl.OnClose = HL.Override() << function(self) self:_SendEventLog(false) end PRTSStoryCollDetailCtrl._SendEventLog = HL.Method(HL.Boolean) << function(self, isEnter) if not isEnter and self.m_logTimeTemp < 0 then logger.warn("PRTSStoryCollDetailCtrl._SendEventLog 调用不对称,not isEnter但缺少m_logTimeTemp数据") return elseif isEnter and self.m_logTimeTemp >= 0 then logger.warn("PRTSStoryCollDetailCtrl._SendEventLog 调用不对称,isEnter但已有m_logTimeTemp数据") return end local stayTime = 0 if isEnter then self.m_logTimeTemp = DateTimeUtils.GetCurrentTimestampBySeconds() else stayTime = DateTimeUtils.GetCurrentTimestampBySeconds() - self.m_logTimeTemp self.m_logTimeTemp = -1 end local firstLvId = "" local prtsId = "" if self.m_isFirstLvId then local pageInfo = self.m_info.pageInfos[self.m_curPageIndex] firstLvId = pageInfo.firstLvId prtsId = pageInfo.itemInfos[self.m_curItemIndex].itemId else prtsId = self.m_info.pageInfos[self.m_curPageIndex].itemId end if string.isEmpty(self.m_args.researchId) then EventLogManagerInst:GameEvent_PRTSArchiveView(isEnter, self.m_args.pageType, self.m_args.categoryId, firstLvId, prtsId, stayTime) else EventLogManagerInst:GameEvent_PRTSResearchArchiveView(isEnter, self.m_args.researchId, false, prtsId, stayTime) end end PRTSStoryCollDetailCtrl.OnPhaseRefresh = HL.Override(HL.Any) << function(self, arg) self:_InitData(arg) self:_UpdateData() self:_RefreshAllUI() end PRTSStoryCollDetailCtrl.ShowSelf = HL.StaticMethod(HL.Any) << function(args) local id, isFirstLv = unpack(args) PhaseManager:OpenPhase(PHASE_ID, { isFirstLvId = isFirstLv, id = id, }) end PRTSStoryCollDetailCtrl._InitData = HL.Method(HL.Table) << function(self, arg) if not arg.idList and arg.id then arg.idList = { arg.id } end self.m_idList = arg.idList self.m_isFirstLvId = arg.isFirstLvId and true or false self.m_showGotoBtn = arg.showGotoBtn and true or false self.m_curPageIndex = arg.initShowIndex or 1 self.m_curPageIndex = lume.clamp(self.m_curPageIndex, 1, #self.m_idList) if self.m_isFirstLvId then self.m_info = { pageInfos = {}, } for _, firstLvId in pairs(self.m_idList) do if GameInstance.player.prts:IsFirstLvUnlock(firstLvId) then local firstLvCfg = Utils.tryGetTableCfg(Tables.prtsFirstLv, firstLvId) if firstLvCfg then local itemInfos = self:_CreateItemInfos(firstLvCfg.itemIds) if #itemInfos > 0 then local newPageInfo = { firstLvId = firstLvId, itemInfos = itemInfos, } table.insert(self.m_info.pageInfos, newPageInfo) end end end end else self.m_info = { pageInfos = self:_CreateItemInfos(self.m_idList), } end end PRTSStoryCollDetailCtrl._CreateItemInfos = HL.Method(HL.Any).Return(HL.Table) << function(self, itemIds) local itemInfos = {} for _, itemId in pairs(itemIds) do if GameInstance.player.prts:IsPrtsUnlocked(itemId) then local itemCfg = Utils.tryGetTableCfg(Tables.prtsAllItem, itemId) if itemCfg then local belongsInvestIds = GameInstance.player.prts:GetBelongsInvestIds(itemId) local belongsInvestNameList if belongsInvestIds then belongsInvestNameList = {} for _, id in pairs(belongsInvestIds) do local cfg = Utils.tryGetTableCfg(Tables.prtsInvestigate, id) table.insert(belongsInvestNameList, cfg.name) end end local newItemInfo = { itemId = itemId, belongsInvestIds = belongsInvestIds, belongsInvestNameList = belongsInvestNameList, contentId = itemCfg.contentId, contentType = itemCfg.type == "multi_media" and ContentTypeEnum.Radio or ContentTypeEnum.RichContent, index = itemCfg.order, } table.insert(itemInfos, newItemInfo) end end end if self.m_isFirstLvId then table.sort(itemInfos, Utils.genSortFunction({ "index" }, true)) end return itemInfos end PRTSStoryCollDetailCtrl._UpdateData = HL.Method() << function(self) if self.m_isFirstLvId then local pageInfo = self.m_info.pageInfos[self.m_curPageIndex] self.m_curItemInfo = pageInfo.itemInfos[self.m_curItemIndex] else self.m_curItemInfo = self.m_info.pageInfos[self.m_curPageIndex] end end PRTSStoryCollDetailCtrl._InitUI = HL.Method() << function(self) local viewRef = self.view viewRef.closeBtn.onClick:AddListener(function() PhaseManager:PopPhase(PhaseId.PRTSStoryCollDetail) end) viewRef.pageUpBtn.onClick:AddListener(function() self:_OnClickPageUpOrDownBtn(false) end) viewRef.pageDownBtn.onClick:AddListener(function() self:_OnClickPageUpOrDownBtn(true) end) viewRef.itemPreBtn.onClick:AddListener(function() self:_OnClickItemPreOrNextBtn(false) end) viewRef.itemNextBtn.onClick:AddListener(function() self:_OnClickItemPreOrNextBtn(true) end) self.m_genIndexPointCells = UIUtils.genCellCache(viewRef.indexPointCell) self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({ self.view.inputGroup.groupId }) end PRTSStoryCollDetailCtrl._RefreshAllUI = HL.Method() << function(self) self:_RefreshContent() self:_RefreshIndexPoint() self:_RefreshPageSwitchBtn() self:_RefreshItemSwitchBtn() end PRTSStoryCollDetailCtrl._RefreshContent = HL.Method() << function(self) local info = self.m_curItemInfo if self.m_curItemInfo.contentType == ContentTypeEnum.RichContent then self.view.prtsRichContent.gameObject:SetActiveIfNecessary(true) self.view.prtsRadio.gameObject:SetActiveIfNecessary(false) self.view.prtsRichContent:InitPRTSRichContent(info.contentId) if self.m_showGotoBtn and info.belongsInvestIds then self.view.prtsRichContent:SetGotoBtn(info.belongsInvestNameList, function(luaIndex) self:_OnClickGotoBtn(luaIndex) end) end else self.view.prtsRadio.gameObject:SetActiveIfNecessary(true) self.view.prtsRichContent.gameObject:SetActiveIfNecessary(false) local itemCfg = Utils.tryGetTableCfg(Tables.prtsAllItem, info.itemId) self.view.prtsRadio:InitPRTSRadio(info.contentId, itemCfg.name) self.view.prtsRadio:SetPlayRadio(true) if self.m_showGotoBtn and info.belongsInvestIds then self.view.prtsRadio:SetGotoBtn(info.belongsInvestNameList, function(luaIndex) self:_OnClickGotoBtn(luaIndex) end) end end GameInstance.player.prts:MarkRead(info.itemId) end PRTSStoryCollDetailCtrl._RefreshIndexPoint = HL.Method() << function(self) local pointCount = 0 if self.m_isFirstLvId then local pageInfo = self.m_info.pageInfos[self.m_curPageIndex] pointCount = #pageInfo.itemInfos else pointCount = #self.m_info.pageInfos end if pointCount == 1 then pointCount = 0 end self.m_genIndexPointCells:Refresh(pointCount, function(cell, luaIndex) self:_OnRefreshIndexPointCell(cell, luaIndex) end) end PRTSStoryCollDetailCtrl._OnRefreshIndexPointCell = HL.Method(HL.Table, HL.Number) << function(self, cell, luaIndex) if luaIndex == self.m_curItemIndex then cell.indexPointState:SetState("Select") else cell.indexPointState:SetState("Unselect") end end PRTSStoryCollDetailCtrl._RefreshPageSwitchBtn = HL.Method() << function(self) local totalCount = #self.m_info.pageInfos local viewRef = self.view local showUpBtn = self.m_curPageIndex > 1 and true or false local showDownBtn = self.m_curPageIndex < totalCount and true or false viewRef.pageUpBtn.gameObject:SetActiveIfNecessary(showUpBtn) viewRef.pageDownBtn.gameObject:SetActiveIfNecessary(showDownBtn) end PRTSStoryCollDetailCtrl._RefreshItemSwitchBtn = HL.Method() << function(self) local viewRef = self.view if not self.m_isFirstLvId then viewRef.indexPointList.gameObject:SetActiveIfNecessary(false) viewRef.itemPreBtn.gameObject:SetActiveIfNecessary(false) viewRef.itemNextBtn.gameObject:SetActiveIfNecessary(false) return end viewRef.indexPointList.gameObject:SetActiveIfNecessary(true) local curPageInfo = self.m_info.pageInfos[self.m_curPageIndex] local totalCount = #curPageInfo.itemInfos local showPreBtn = self.m_curItemIndex > 1 and true or false local showNextBtn = self.m_curItemIndex < totalCount and true or false viewRef.itemPreBtn.gameObject:SetActiveIfNecessary(showPreBtn) viewRef.itemNextBtn.gameObject:SetActiveIfNecessary(showNextBtn) end PRTSStoryCollDetailCtrl._OnClickPageUpOrDownBtn = HL.Method(HL.Boolean) << function(self, isDown) if isDown then self.m_curPageIndex = self.m_curPageIndex + 1 else self.m_curPageIndex = self.m_curPageIndex - 1 end self.m_curPageIndex = lume.clamp(self.m_curPageIndex, 1, #self.m_info.pageInfos) self.m_curItemIndex = 1 self:_SendEventLog(false) self:_UpdateData() self:_RefreshAllUI() self:_SendEventLog(true) local aniWrapper = self.animationWrapper aniWrapper:PlayWithTween("prtsstorycolldetail_change") end PRTSStoryCollDetailCtrl._OnClickItemPreOrNextBtn = HL.Method(HL.Boolean) << function(self, isNext) if not self.m_isFirstLvId then return end if isNext then self.m_curItemIndex = self.m_curItemIndex + 1 else self.m_curItemIndex = self.m_curItemIndex - 1 end local curPageInfo = self.m_info.pageInfos[self.m_curPageIndex] self.m_curItemIndex = lume.clamp(self.m_curItemIndex, 1, #curPageInfo.itemInfos) self:_SendEventLog(false) self:_UpdateData() self:_RefreshAllUI() self:_SendEventLog(true) local aniWrapper = self.animationWrapper aniWrapper:PlayWithTween("prtsstorycolldetail_change") end PRTSStoryCollDetailCtrl._OnClickGotoBtn = HL.Method(HL.Number) << function(self, luaIndex) local investId = self.m_curItemInfo.belongsInvestIds[CSIndex(luaIndex)] PhaseManager:OpenPhase(PhaseId.PRTSInvestigateDetail, { id = investId }) end HL.Commit(PRTSStoryCollDetailCtrl)