2025-06-04 05:02:57 +08:00

498 lines
16 KiB
Plaintext

MainQuestPage = class("MainQuestPage",SubView)
autoImport("PuzzleBlockCell")
autoImport("PuzzleAwardCell")
autoImport("QuestListCell")
autoImport("QuestTraceCell")
autoImport("DailyCoinCell")
local tempArray = {}
function MainQuestPage:Init()
self:initView()
self:addViewEventListener()
self:AddListenerEvts()
self:initData()
end
function MainQuestPage:initView( )
-- body
self.gameObject = self:FindGO("MainQuestPage")
self.questName = self:FindComponent("QuestName", UILabel)
self.progressScrollView = self:FindComponent("ProgressScrollView", UIScrollView)
self.questDescription = self:FindComponent("QuestDescription", UILabel)
self.questProgress0 = self:FindComponent("QuestProgress0", UILabel)
self.questProgress1 = self:FindComponent("QuestProgress1", UILabel)
self.puzzleTexture = self:FindComponent("PuzzleTexture", UITexture)
self.puzzleBlockGrid = self:FindGO("puzzleBlockGrid")
self.uiGridOfPuzzleBlocks = self.puzzleBlockGrid:GetComponent(UIGrid)
if self.listControllerOfPuzzleBlocks == nil then
self.listControllerOfPuzzleBlocks = UIGridListCtrl.new(self.uiGridOfPuzzleBlocks, PuzzleBlockCell, "PuzzleBlockCell")
end
self.puzzleBoard = self:FindGO("Puzzle")
self.puzzleBackBoard = self:FindGO("PuzzleBack")
self.puzzleBackTypeLabelList = {}
self.puzzleBackTypeLineList = {}
for i=1,2 do
local btnName = "PuzzleBackType" .. i
local puzzleBackTypeGo = self:FindGO(btnName)
self.puzzleBackTypeLineList[btnName] = self:FindGO("PuzzleBackTypeMark" .. i)
self.puzzleBackTypeLabelList[btnName] = self:FindComponent("PuzzleBackTypeLabel" .. i, UILabel)
self:AddButtonEvent(btnName, function ( )
self:PuzzleBackTypeChangeHandler(puzzleBackTypeGo)
end)
end
self.puzzleAward = self:FindGO("PuzzleAward")
self.mainQuestList = self:FindGO("MainQuestList")
self.puzzleAwardGrid = self:FindGO("puzzleAwardGrid")
self.uiGridOfPuzzleAward = self.puzzleAwardGrid:GetComponent(UIGrid)
if self.listControllerOfPuzzleAward == nil then
self.listControllerOfPuzzleAward = UIGridListCtrl.new(self.uiGridOfPuzzleAward, PuzzleAwardCell, "PuzzleAwardCell")
end
self.questListGrid = self:FindGO("questListGrid")
self.uiGridOfQuestList = self.questListGrid:GetComponent(UIGrid)
if self.listControllerOfQuestList == nil then
self.listControllerOfQuestList = UIGridListCtrl.new(self.uiGridOfQuestList, QuestListCell, "QuestListCell")
end
self:AddButtonEvent("PuzzleBackTurnBtn1",function ()
self.puzzleBoard:SetActive(false)
self.puzzleBackBoard:SetActive(true)
local defaultBackType = self:FindGO("PuzzleBackType1")
self:PuzzleBackTypeChangeHandler(defaultBackType)
end)
self:AddButtonEvent("PuzzleBackTurnBtn2",function ()
self.puzzleBoard:SetActive(true)
self.puzzleBackBoard:SetActive(false)
local versionData = QuestManualProxy.Instance:GetManualQuestDatas( self.currentVersion )
self:UpdatePuzzleBoard(versionData.main)
end)
--TraceBoard
self.traceBoardSingle = self:FindGO("TraceBoardSingle")
self.traceBoardSingleCell = QuestTraceCell.new(self.traceBoardSingle)
self.traceBoardMulty = self:FindGO("TraceBoardMulty")
self.traceBoardScrollView = self:FindGO("TraceBoardScrollView")
-- self.traceBoardMulty = self:FindGO("TraceBoardMulty")
self.traceBoardList = self:FindComponent("TraceBoardList", UISprite)
self.collectTraceInfo = self:FindComponent("CollectTraceInfo", UILabel)
self.traceBoardButtonDownArrow = self:FindGO("TraceBoardButtonDownArrow")
self:AddButtonEvent("TraceBoardButtonDown",function ()
self:TriggerTraceBoardMultySize()
end)
self.traceBoardMultyCoinScrollView = self:FindComponent("DailyCoinScrollView", UIScrollView)
self.dailyCountGrid = self:FindGO("DailyCoinGrid")
self.uiGridOfDailyCount = self.dailyCountGrid:GetComponent(UIGrid)
if self.listControllerOfDailyCount == nil then
self.listControllerOfDailyCount = UIGridListCtrl.new(self.uiGridOfDailyCount, DailyCoinCell, "DailyCoinCell")
end
self.dailyCountGridLong = self:FindGO("DailyCoinGridLong")
self.uiGridOfDailyCountLong = self.dailyCountGridLong:GetComponent(UIGrid)
if self.listControllerOfDailyCountLong == nil then
self.listControllerOfDailyCountLong = UIGridListCtrl.new(self.uiGridOfDailyCountLong, DailyCoinCell, "DailyCoinCell")
end
self.questTraceGrid = self:FindGO("questTraceGrid")
self.uiGridOfQuestTrace = self.questTraceGrid:GetComponent(UIGrid)
if self.listControllerOfQuestTrace == nil then
self.listControllerOfQuestTrace = UIGridListCtrl.new(self.uiGridOfQuestTrace, QuestTraceCell, "QuestTraceCell")
end
self.mainQuestDetailDiv = self:FindGO("MainQuestDetailDiv")
self.questDetail = self:FindGO("QuestDetail")
self.noData = self:FindGO("NoData")
self.itemTipStick = self:FindComponent("ItemTipStick", UIWidget)
end
function MainQuestPage:Show( target )
-- body
MainQuestPage.super.Show(self,target)
end
function MainQuestPage:initData( )
-- body
end
function MainQuestPage:PuzzleBackTypeChangeHandler(go)
-- body
local typeName = go.name
if(self.currentPuzzleBackType ~= go)then
if self.currentPuzzleBackType then
self.puzzleBackTypeLineList[self.currentPuzzleBackType.name]:SetActive(false)
self.puzzleBackTypeLabelList[self.currentPuzzleBackType.name].color = QuestManualView.ColorTheme[2].color
end
self.currentPuzzleBackType = go
self.puzzleBackTypeLineList[typeName]:SetActive(true)
self.puzzleBackTypeLabelList[typeName].color = QuestManualView.ColorTheme[4].color
end
self:LoadPuzzleBackTypeContent(typeName)
end
function MainQuestPage:LoadPuzzleBackTypeContent( typeName )
if typeName == "PuzzleBackType1" then
self.puzzleAward:SetActive(true)
self.mainQuestList:SetActive(false)
elseif typeName == "PuzzleBackType2" then
self.puzzleAward:SetActive(false)
self.mainQuestList:SetActive(true)
end
self:UpdatePuzzleBackBoard()
end
function MainQuestPage:SetData( version )
-- helplog("=====MainQuestPage:SetData==>>>>", version)
self.traceBoardSingle:SetActive(false)
self.traceBoardMulty:SetActive(false)
self.currentVersion = version
local versionData = QuestManualProxy.Instance:GetManualQuestDatas( version )
if versionData then
local data = versionData.main
-- helplog("=====MainQuestPage:MainStoryId==>>>>", data.mainstoryid)
local questVersion
for i=1, #Table_QuestVersion do
local ven = Table_QuestVersion[i]
if ven.version == version then
questVersion = ven
break;
end
end
local mainStoryDescription = ZhString.QuestManual_TwoSpace
if questVersion then
mainStoryDescription = mainStoryDescription .. questVersion.VersionStory
self.questName.text = questVersion.StoryName
end
local mainIdList = self:GetAllUnlockedMainStoryID( version, data.mainstoryid )
for i=1,#mainIdList do
local mainstoryData = Table_MainStory[mainIdList[i]]
if mainstoryData then
local dialogData = DialogUtil.GetDialogData(mainstoryData.Mstory[1])
mainStoryDescription = mainStoryDescription .. "\n" .. ZhString.QuestManual_TwoSpace .. dialogData.Text
end
end
self.questDescription.text = mainStoryDescription
self.progressScrollView:ResetPosition()
local s,m = self:GetQuestProgress(data.questPreviewList)
self.questProgress0.text = s
self.questProgress1.text = "/" .. m
self.mainQuestDetailDiv:SetActive(true)
if #data.questList > 0 then
local firstAcceptQuest
for i=1, #data.questList do
local quest = data.questList[i]
if quest.type == SceneQuest_pb.EQUESTLIST_ACCEPT or quest.type == SceneQuest_pb.EQUESTLIST_CANACCEPT then
firstAcceptQuest = quest
break;
end
end
if firstAcceptQuest then
local isSingle = self:UpdateTraceBoardMulty(firstAcceptQuest)
if isSingle then
self.traceBoardSingle:SetActive(true)
self.traceBoardMulty:SetActive(false)
self.traceBoardSingleCell:SetData(firstAcceptQuest)
end
end
--helplog("=====MainQuestPage:mainstoryid==>>>>", data.mainstoryid)
-- else
-- self.traceBoardSingle:SetActive(false)
-- self.traceBoardMulty:SetActive(false)
end
if self.puzzleBoard.activeSelf then
-- helplog("=====MainQuestPage:UpdatePuzzleBoard1==>>>>")
self:UpdatePuzzleBoard(data)
elseif self.puzzleBackBoard.activeSelf then
self:UpdatePuzzleBackBoard()
end
else
if self.puzzleBoard.activeSelf then
-- helplog("=====MainQuestPage:UpdatePuzzleBoard2==>>>>")
self:UpdatePuzzleBoard(nil)
elseif self.puzzleBackBoard.activeSelf then
self:UpdatePuzzleBackBoard()
end
end
end
function MainQuestPage:UpdateTraceBoardMulty( quest )
-- TableUtil.Print(questData)
-- helplog("==StepType==>>>", questData.questDataStepType)
local questData = quest.questData
if (questData.questDataStepType == QuestDataStepType.QuestDataStepType_ITEM) then
-- local relatedQuestList = QuestProxy.Instance:getAllPrequest( questData)
local relatedQuestList = quest.questSubs
-- helplog("==relatedQuestListLength==>>>", #relatedQuestList)
-- TableUtil.Print(relatedQuestList)
if relatedQuestList and #relatedQuestList > 0 then
self.traceBoardSingle:SetActive(false)
self.traceBoardMulty:SetActive(true)
local paramData = questData.params
local item = paramData.item and paramData.item[1]
local itemId = item and item.id or 0
local totalNum = item and item.num or 0
local itemIdNum = tonumber(itemId)
local infoTable = Table_Item[itemIdNum]
if(infoTable and infoTable.Type == 160)then
process = BagProxy.Instance:GetItemNumByStaticID(itemId,BagProxy.BagType.Quest) or 0
else
process = BagProxy.Instance:GetItemNumByStaticID(itemId) or 0
end
itemName = infoTable and infoTable.NameZh or nil
self.collectTraceInfo.text = string.format(ZhString.QuestManual_GetDaily, itemName, process, totalNum)
local tempTable = {}
for i=1,totalNum do
if i <= process then
tempTable[#tempTable + 1] = {Id = itemIdNum, isShow = true}
else
tempTable[#tempTable + 1] = {Id = itemIdNum, isShow = false}
end
end
if #tempTable <= 10 then
self.dailyCountGrid:SetActive(true)
self.traceBoardMultyCoinScrollView.gameObject:SetActive(false)
self.listControllerOfDailyCount:ResetDatas(tempTable)
else
self.dailyCountGrid:SetActive(false)
self.traceBoardMultyCoinScrollView.gameObject:SetActive(true)
self.listControllerOfDailyCountLong:ResetDatas(tempTable)
self.traceBoardMultyCoinScrollView:ResetPosition()
end
self.listControllerOfQuestTrace:ResetDatas(relatedQuestList)
return false
end
return true
end
return true
end
local tempV3, tempRot = LuaVector3(), LuaQuaternion();
function MainQuestPage:TriggerTraceBoardMultySize( )
if self.traceBoardScrollView.activeSelf then
tempV3:Set(0,0,270);
tempRot.eulerAngles = tempV3;
self.traceBoardButtonDownArrow.transform.localRotation = tempRot
self.traceBoardList.height = 128
self.traceBoardScrollView:SetActive(false)
else
tempV3:Set(0,0,90);
tempRot.eulerAngles = tempV3;
self.traceBoardButtonDownArrow.transform.localRotation = tempRot
self.traceBoardList.height = 336
self.traceBoardScrollView:SetActive(true)
end
end
function MainQuestPage:UpdatePuzzleBoard( mainData )
-- helplog("=====MainQuestPage:UpdatePuzzleBoard==>>>>")
-- TableUtil.Print(mainData)
local puzzleActiveList = self:GetQuestPuzzleActiveListByVersion(self.currentVersion)
if puzzleActiveList and #puzzleActiveList > 0 then
-- helplog("=====MainQuestPage:UpdatePuzzleBoard1==>>>>")
table.sort( puzzleActiveList, function ( x,y )
return x.indexss < y.indexss
end )
self.listControllerOfPuzzleBlocks:ResetDatas(puzzleActiveList)
-- TableUtil.Print(puzzleActiveList)
if mainData then
local puzzleData = mainData.puzzle
if puzzleData then
-- helplog("=====MainQuestPage:UpdatePuzzleBoard2==>>>>")
local cells = self.listControllerOfPuzzleBlocks:GetCells()
-- for i=1,#mainData.questList do
-- helplog("===mainData.questList:Id==>>>>>", mainData.questList[i].questData.id, mainData.questList[i].type)
-- end
local openPuzzleList = puzzleData.open_puzzles
local unlockPuzzleList = puzzleData.unlock_puzzles
-- TableUtil.Print(openPuzzleList)
-- TableUtil.Print(unlockPuzzleList)
for i=1, #cells do
local cell = cells[i]
local cellIndex = cell.data.indexss
local isOpen = false
for j=1,#openPuzzleList do
if cellIndex == openPuzzleList[j] then
cell:OpenPuzze()
isOpen = true
break;
end
end
if not isOpen and self:GetPuzzleLightState(mainData.questList, cell.data.QuestIDs) then
cell:UnlockPuzze()
end
-- if not isOpen then
-- for k=1,#unlockPuzzleList do
-- if cellIndex == unlockPuzzleList[k] then
-- cell:UnlockPuzze()
-- break;
-- end
-- end
-- end
end
end
end
end
end
function MainQuestPage:UpdatePuzzleBackBoard( )
-- helplog("=====MainQuestPage:UpdatePuzzleBackBoard==>>>>")
if self.puzzleAward.activeSelf then
self:UpdatePuzzleAward()
elseif self.mainQuestList.activeSelf then
self:UpdateMainQuestList()
end
end
function MainQuestPage:UpdatePuzzleAward( )
-- helplog("=====MainQuestPage:UpdatePuzzleAward==>>>>")
local puzzleCollectList = QuestManualProxy.Instance:GetQuestPuzzleCollectListByVersion(self.currentVersion)
self.listControllerOfPuzzleAward:ResetDatas(puzzleCollectList)
end
function MainQuestPage:UpdateMainQuestList( )
-- helplog("=====MainQuestPage:UpdateMainQuestList==>>>>")
local versionData = QuestManualProxy.Instance:GetManualQuestDatas( self.currentVersion )
if versionData then
self.listControllerOfQuestList:ResetDatas(versionData.main.questPreviewList)
end
end
function MainQuestPage:OnEnter( )
-- body
end
function MainQuestPage:OnExit( )
end
function MainQuestPage:addViewEventListener()
-- self:AddButtonEvent("appellationLevelCt",function ( )
-- -- body
-- self:sendNotification(UIEvent.JumpPanel, {view = PanelConfig.AdventureRewardPanel,viewdata = {from = AdventureRewardPanel.FromConfig.AdventurePanel}})
-- end)
end
function MainQuestPage:AddListenerEvts()
self:AddListenEvt(ServiceEvent.QuestOpenPuzzleQuestCmd, self.OpenPuzzle)
self.listControllerOfPuzzleAward:AddEventListener(QuestManualEvent.ItemCellClick, self.ShowAwardItemTip, self);
end
function MainQuestPage:OpenPuzzle(data)
-- helplog("====MainQuestPage:OpenPuzzle===>>>>")
-- TableUtil.Print(data)
local puzzleData = data and data.body
-- TableUtil.Print(puzzleData)
local cells = self.listControllerOfPuzzleBlocks:GetCells()
for i=1, #cells do
local cell = cells[i]
if cell.data.version == puzzleData.version and cell.data.indexss == puzzleData.id then
cell:OpenPuzze()
QuestManualProxy.Instance:OpenPuzzle(puzzleData.version, puzzleData.id)
break;
end
end
end
function MainQuestPage:GetQuestPuzzleActiveListByVersion( version )
--helplog("==GetQuestPuzzleActiveListByVersion==>>>")
local puzzleList = {}
for k,v in pairs(Table_QuestPuzzle) do
if v.version == version and v.type == "active" then
puzzleList[#puzzleList + 1] = v
end
end
return puzzleList
end
function MainQuestPage:GetQuestProgress( questList )
local finishCount = 0
local totalCount = #questList
for i=1, #questList do
if questList[i].complete then
finishCount = finishCount + 1
end
end
return finishCount, totalCount
end
function MainQuestPage:GetPuzzleLightState( mainQuestList, puzzleQuestIdList )
local isUnlock = true
if mainQuestList and #mainQuestList >0 and puzzleQuestIdList and #puzzleQuestIdList > 0 then
for i=1,#puzzleQuestIdList do
local puzzleQuestId = puzzleQuestIdList[i]
-- helplog("==puzzleQuestId==>>>", puzzleQuestId)
local isQuestExist = false
for j=1,#mainQuestList do
local mainQuest = mainQuestList[j]
-- helplog("==mainQuest==>>>", mainQuest.questData.id)
if mainQuest.questData.id == puzzleQuestId then
isQuestExist = true
if mainQuest.type ~= SceneQuest_pb.EQUESTLIST_SUBMIT then
isUnlock = false
break
end
end
end
if not isQuestExist then
return false
end
if not isUnlock then
break
end
end
else
return false
end
return isUnlock
end
function MainQuestPage:ShowAwardItemTip( cell )
if cell.itemId then
local itemData = ItemData.new("",cell.itemId)
local data = {itemdata = itemData,
funcConfig = {},
noSelfClose = false}
self:ShowItemTip(data , self.itemTipStick , NGUIUtil.AnchorSide.Right)
end
end
function MainQuestPage:GetAllUnlockedMainStoryID( currentVersion, currentId )
local mainIdList = {}
for k,v in pairs(Table_MainStory) do
if v.version == currentVersion and k <= currentId then
mainIdList[#mainIdList + 1] = k
end
end
return mainIdList
end