Initial version - 1.2.0.60
EN: 1.2.0.60 CN: 1.2.0.61 JP: 1.2.0.63 KR: 1.2.0.67
This commit is contained in:
@@ -0,0 +1,347 @@
|
||||
local QuestWorldClassCtrl = class("QuestWorldClassCtrl", BaseCtrl)
|
||||
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
|
||||
QuestWorldClassCtrl._mapNodeConfig = {
|
||||
rtLevel = {},
|
||||
bgLevelUp = {},
|
||||
bgAdvance = {},
|
||||
txtTip = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "WorldClass_Advance_Tip"
|
||||
},
|
||||
txtLevel = {sComponentName = "TMP_Text", nCount = 2},
|
||||
txtLevelCn = {
|
||||
sComponentName = "TMP_Text",
|
||||
nCount = 2,
|
||||
sLanguageId = "WorldClass_Level_Title"
|
||||
},
|
||||
imgExpBar = {sComponentName = "Image"},
|
||||
txtExp = {sComponentName = "TMP_Text"},
|
||||
goAssistant = {
|
||||
sCtrlName = "Game.UI.Quest.Assistant.AssistantCtrl"
|
||||
},
|
||||
txtAssistant = {sComponentName = "TMP_Text"},
|
||||
imgHeadBg = {sComponentName = "Image"},
|
||||
rtWorldClassList = {},
|
||||
animWorldClassList = {
|
||||
sNodeName = "rtWorldClassList",
|
||||
sComponentName = "Animator"
|
||||
},
|
||||
worldClassLsv = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
rtWorldClassLsv = {
|
||||
sNodeName = "worldClassLsv",
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
imgAllReceive = {},
|
||||
txtAllReceive = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "WorldClass_AllReceive_Tip"
|
||||
},
|
||||
rtLevelInfo = {},
|
||||
btnLevelItem = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_LevelItem"
|
||||
},
|
||||
goLevelItem = {
|
||||
sCtrlName = "Game.UI.Quest.WorldClass.WorldClassItemCtrl"
|
||||
},
|
||||
rtLevelLsv = {},
|
||||
levelLsv = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
rtQuestLsv = {},
|
||||
questLsv = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
txtContentSize = {sComponentName = "TMP_Text"},
|
||||
rectContentSize = {
|
||||
sNodeName = "txtContentSize",
|
||||
sComponentName = "RectTransform"
|
||||
}
|
||||
}
|
||||
QuestWorldClassCtrl._mapEventConfig = {
|
||||
ReceiveWorldClassLevelReward = "OnEvent_ReceiveWorldClassLevelReward",
|
||||
[EventId.UpdateWorldClass] = "OnEvent_UpdateWorldClass",
|
||||
DemonAdvanceSuccess = "OnEvent_DemonAdvanceSuccess",
|
||||
Guide_DisableScrollView = "OnEvent_DisableScrollView"
|
||||
}
|
||||
QuestWorldClassCtrl._mapRedDotConfig = {}
|
||||
local levelInfoGridHeight = {
|
||||
FuncOpen = 59.13,
|
||||
FuncChange = 20,
|
||||
LevelReward = 165,
|
||||
InfoTopBottom = 14,
|
||||
InfoSpacing = 6
|
||||
}
|
||||
local worldClassLsvPosY_1 = 118
|
||||
local worldClassLsvPosY_2 = 65
|
||||
function QuestWorldClassCtrl:Refresh()
|
||||
self.nCurWorldClass = PlayerData.Base:GetWorldClass()
|
||||
self:RefreshDemonList()
|
||||
self._mapNode.animWorldClassList:Play("rtGuideQuest_in", 0, 0)
|
||||
local curType = self:RefreshWorldClass()
|
||||
local mapData = self.tbWorldClass[#self.tbWorldClass]
|
||||
local bMax = mapData.nMaxLevel == self.nCurWorldClass
|
||||
self:RefreshLevelInfo(self.nCurIndex)
|
||||
return curType
|
||||
end
|
||||
function QuestWorldClassCtrl:RefreshWorldClass()
|
||||
local nCurExp = PlayerData.Base:GetWorldExp()
|
||||
local mapCfg = ConfigTable.GetData("WorldClass", self.nCurWorldClass + 1, true)
|
||||
local nFullExp = 0
|
||||
if mapCfg then
|
||||
nFullExp = mapCfg.Exp
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLevel[1], self.nCurWorldClass)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLevel[2], self.nCurWorldClass)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtExp, string.format("%d/%d", nCurExp, nFullExp))
|
||||
NovaAPI.SetImageFillAmount(self._mapNode.imgExpBar, nCurExp / nFullExp)
|
||||
local curData = self.tbWorldClass[self.nCurIndex]
|
||||
if curData ~= nil then
|
||||
self._mapNode.bgLevelUp.gameObject:SetActive(curData.nType == AllEnum.WorldClassType.LevelUp)
|
||||
self._mapNode.bgAdvance.gameObject:SetActive(curData.nType == AllEnum.WorldClassType.Advance)
|
||||
EventManager.Hit("RefreshWorldClassBg", curData.nType == AllEnum.WorldClassType.LevelUp)
|
||||
return curData.nType
|
||||
end
|
||||
end
|
||||
function QuestWorldClassCtrl:RefreshDemonList()
|
||||
self.bFold = true
|
||||
self._mapNode.rtLevelInfo.gameObject:SetActive(false)
|
||||
self._mapNode.rtWorldClassList.gameObject:SetActive(true)
|
||||
self.nCurIndex = 0
|
||||
self.nRewardIndex = 0
|
||||
self.nCurIndex = PlayerData.Base:GetCurWorldClassStageIndex()
|
||||
for nIdx, v in ipairs(self.tbWorldClass) do
|
||||
if v.nType == AllEnum.WorldClassType.LevelUp and RedDotManager.GetValid(RedDotDefine.WorldClass_LevelUp, v.nId) and self.nRewardIndex == 0 then
|
||||
self.nRewardIndex = nIdx
|
||||
end
|
||||
end
|
||||
for nInstanceId, v in pairs(self.tbGridWorldClass) do
|
||||
self:UnbindCtrlByNode(v)
|
||||
self.tbGridWorldClass[nInstanceId] = nil
|
||||
end
|
||||
self._mapNode.worldClassLsv:Init(#self.tbWorldClass, self, self.OnWorldClassGridRefresh, self.OnWorldClassGridClick, true)
|
||||
local mapData = self.tbWorldClass[#self.tbWorldClass]
|
||||
local bMax = mapData.nMaxLevel == self.nCurWorldClass
|
||||
self._mapNode.imgAllReceive.gameObject:SetActive(bMax)
|
||||
self._mapNode.txtExp.gameObject:SetActive(not bMax)
|
||||
local posX = self._mapNode.rtWorldClassLsv.anchoredPosition.x
|
||||
local posY = bMax and worldClassLsvPosY_1 or worldClassLsvPosY_2
|
||||
self._mapNode.rtWorldClassLsv.anchoredPosition = Vector2(posX, posY)
|
||||
end
|
||||
function QuestWorldClassCtrl:OnWorldClassGridRefresh(goGrid, nGridIndex)
|
||||
local nIndex = nGridIndex + 1
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
if nil == self.tbGridWorldClass[nInstanceId] then
|
||||
self.tbGridWorldClass[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.Quest.WorldClass.WorldClassItemCtrl")
|
||||
end
|
||||
local data = self.tbWorldClass[nIndex]
|
||||
if data ~= nil then
|
||||
self.tbGridWorldClass[nInstanceId]:SetItem(data)
|
||||
end
|
||||
end
|
||||
function QuestWorldClassCtrl:OnWorldClassGridClick(goGrid, nGridIndex)
|
||||
local nIndex = nGridIndex + 1
|
||||
self.nCurSelectIndex = nIndex
|
||||
self:RefreshLevelInfo(nIndex)
|
||||
end
|
||||
function QuestWorldClassCtrl:RefreshLevelInfo(nIndex)
|
||||
self.bFold = false
|
||||
self._mapNode.rtLevelInfo.gameObject:SetActive(true)
|
||||
self._mapNode.rtWorldClassList.gameObject:SetActive(false)
|
||||
local data = self.tbWorldClass[nIndex]
|
||||
if data ~= nil then
|
||||
self._mapNode.goLevelItem:SetItem(data)
|
||||
if data.nType == AllEnum.WorldClassType.LevelUp then
|
||||
self._mapNode.rtLevelLsv.gameObject:SetActive(true)
|
||||
self._mapNode.rtQuestLsv.gameObject:SetActive(false)
|
||||
self:RefreshLevelUpInfo(data)
|
||||
elseif data.nType == AllEnum.WorldClassType.Advance then
|
||||
self._mapNode.rtLevelLsv.gameObject:SetActive(false)
|
||||
self._mapNode.rtQuestLsv.gameObject:SetActive(true)
|
||||
self:RefreshAdvanceInfo(data.nId)
|
||||
end
|
||||
end
|
||||
end
|
||||
function QuestWorldClassCtrl:CalRecordInfoGridSize(sContent)
|
||||
if sContent == nil or sContent == "" then
|
||||
return 0
|
||||
end
|
||||
self._mapNode.txtContentSize.gameObject:SetActive(true)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtContentSize, sContent)
|
||||
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rectContentSize)
|
||||
return self._mapNode.rectContentSize.rect.height
|
||||
end
|
||||
function QuestWorldClassCtrl:RefreshLevelUpInfo(data)
|
||||
local nMinLevel = data.nMinLevel
|
||||
local nMaxLevel = data.nMaxLevel
|
||||
self.tbLevelInfo = {}
|
||||
self.tbLevelGridHeight = {}
|
||||
local nIndex = 0
|
||||
for i = nMinLevel, nMaxLevel do
|
||||
if i == self.nCurWorldClass then
|
||||
nIndex = i - nMinLevel + 1
|
||||
end
|
||||
table.insert(self.tbLevelInfo, i)
|
||||
local nHeight = levelInfoGridHeight.LevelReward
|
||||
local worldClassCfg = ConfigTable.GetData("WorldClass", i)
|
||||
if worldClassCfg ~= nil then
|
||||
local nCount = 0
|
||||
if 0 < #worldClassCfg.OpenFunc then
|
||||
for _, v in ipairs(worldClassCfg.OpenFunc) do
|
||||
local openFuncCfg = ConfigTable.GetData("OpenFunc", v)
|
||||
if openFuncCfg ~= nil then
|
||||
nCount = nCount + 1
|
||||
nHeight = nHeight + levelInfoGridHeight.FuncOpen + self:CalRecordInfoGridSize(openFuncCfg.Desc)
|
||||
end
|
||||
end
|
||||
end
|
||||
for i = 1, 3 do
|
||||
if worldClassCfg["FuncChangeText" .. i] ~= "" then
|
||||
nCount = nCount + 1
|
||||
nHeight = nHeight + levelInfoGridHeight.FuncChange + self:CalRecordInfoGridSize(worldClassCfg["FuncChangeText" .. i])
|
||||
end
|
||||
end
|
||||
if 0 < nCount then
|
||||
nHeight = nHeight + (nCount - 1) * levelInfoGridHeight.InfoSpacing + levelInfoGridHeight.InfoTopBottom
|
||||
end
|
||||
end
|
||||
table.insert(self.tbLevelGridHeight, nHeight)
|
||||
end
|
||||
for nInstanceId, v in pairs(self.tbGridLevel) do
|
||||
self:UnbindCtrlByNode(v)
|
||||
self.tbGridLevel[nInstanceId] = nil
|
||||
end
|
||||
self._mapNode.levelLsv:InitEx(self.tbLevelGridHeight, self, self.OnLevelGridRefresh)
|
||||
if 1 < nIndex then
|
||||
self:AddTimer(1, 0.1, function()
|
||||
if PlayerData.Guide:CheckInGuideGroup(9) then
|
||||
nIndex = 2
|
||||
end
|
||||
self._mapNode.levelLsv:SetScrollGridPosEx(self.tbLevelGridHeight, nIndex, 0.2)
|
||||
end, true, true, true)
|
||||
end
|
||||
end
|
||||
function QuestWorldClassCtrl:OnLevelGridRefresh(goGrid, nGridIndex)
|
||||
local nIndex = nGridIndex + 1
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
if nil == self.tbGridLevel[nInstanceId] then
|
||||
self.tbGridLevel[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.Quest.WorldClass.WorldClassLevelItemCtrl")
|
||||
end
|
||||
local nLevel = self.tbLevelInfo[nIndex]
|
||||
if nLevel ~= nil then
|
||||
local data = self.tbWorldClass[self.nCurSelectIndex]
|
||||
local bUnOpen = false
|
||||
if data ~= nil then
|
||||
bUnOpen = self.nCurWorldClass < data.nMinLevel
|
||||
end
|
||||
self.tbGridLevel[nInstanceId]:SetItem(nLevel, bUnOpen)
|
||||
end
|
||||
end
|
||||
function QuestWorldClassCtrl:RefreshAdvanceInfo(nId)
|
||||
local mapCfg = ConfigTable.GetData("DemonAdvance", nId)
|
||||
if mapCfg ~= nil then
|
||||
local nQuestGroupId = mapCfg.AdvanceQuestGroup
|
||||
self.tbQuestList = PlayerData.Quest:GetDemonQuestData(nQuestGroupId, nId)
|
||||
for nInstanceId, v in pairs(self.tbGridQuest) do
|
||||
self:UnbindCtrlByNode(v)
|
||||
self.tbGridQuest[nInstanceId] = nil
|
||||
end
|
||||
self._mapNode.questLsv:Init(#self.tbQuestList, self, self.OnQuestGridRefresh)
|
||||
end
|
||||
end
|
||||
function QuestWorldClassCtrl:OnQuestGridRefresh(goGrid, nGridIndex)
|
||||
local nIndex = nGridIndex + 1
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
if nil == self.tbGridQuest[nInstanceId] then
|
||||
self.tbGridQuest[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.Quest.WorldClass.WorldClassQuestItemCtrl")
|
||||
end
|
||||
local data = self.tbQuestList[nIndex]
|
||||
if data ~= nil then
|
||||
local itemData = self.tbWorldClass[self.nCurSelectIndex]
|
||||
local bUnOpen = false
|
||||
if itemData ~= nil then
|
||||
bUnOpen = self.nCurWorldClass < itemData.nMinLevel
|
||||
end
|
||||
self.tbGridQuest[nInstanceId]:SetItem(data, bUnOpen)
|
||||
end
|
||||
end
|
||||
function QuestWorldClassCtrl:FoldList()
|
||||
self.bFold = true
|
||||
self._mapNode.rtLevelInfo.gameObject:SetActive(false)
|
||||
self._mapNode.rtWorldClassList.gameObject:SetActive(true)
|
||||
end
|
||||
function QuestWorldClassCtrl:Awake()
|
||||
self.bFold = true
|
||||
self.tbGridWorldClass = {}
|
||||
self.tbGridQuest = {}
|
||||
self.tbGridLevel = {}
|
||||
self.tbLevelGridHeight = {}
|
||||
self.nCurIndex = 0
|
||||
self.nCurSelectIndex = 0
|
||||
self.tbWorldClass = CacheTable.Get("_DemonAdvance")
|
||||
end
|
||||
function QuestWorldClassCtrl:FadeIn()
|
||||
end
|
||||
function QuestWorldClassCtrl:FadeOut()
|
||||
end
|
||||
function QuestWorldClassCtrl:OnEnable()
|
||||
end
|
||||
function QuestWorldClassCtrl:OnDisable()
|
||||
for _, v in pairs(self.tbGridWorldClass) do
|
||||
local obj = v.gameObject
|
||||
self:UnbindCtrlByNode(v)
|
||||
destroy(obj)
|
||||
end
|
||||
self.tbGridWorldClass = {}
|
||||
for _, v in pairs(self.tbGridLevel) do
|
||||
local obj = v.gameObject
|
||||
self:UnbindCtrlByNode(v)
|
||||
destroy(obj)
|
||||
end
|
||||
self.tbGridLevel = {}
|
||||
for _, v in pairs(self.tbGridQuest) do
|
||||
local obj = v.gameObject
|
||||
self:UnbindCtrlByNode(v)
|
||||
destroy(obj)
|
||||
end
|
||||
self.tbGridQuest = {}
|
||||
end
|
||||
function QuestWorldClassCtrl:OnDestroy()
|
||||
end
|
||||
function QuestWorldClassCtrl:OnRelease()
|
||||
end
|
||||
function QuestWorldClassCtrl:OnBtnClick_LevelItem()
|
||||
end
|
||||
function QuestWorldClassCtrl:OnEvent_ReceiveWorldClassLevelReward()
|
||||
if not self.bFold then
|
||||
self._mapNode.levelLsv:InitEx(self.tbLevelGridHeight, self, self.OnLevelGridRefresh, nil, true)
|
||||
end
|
||||
end
|
||||
function QuestWorldClassCtrl:OnEvent_UpdateWorldClass()
|
||||
self.nCurWorldClass = PlayerData.Base:GetWorldClass()
|
||||
self:RefreshDemonList()
|
||||
self:RefreshWorldClass()
|
||||
if not self.bFold then
|
||||
self:RefreshLevelInfo(self.nCurIndex)
|
||||
end
|
||||
end
|
||||
function QuestWorldClassCtrl:OnEvent_DemonAdvanceSuccess()
|
||||
self.nCurWorldClass = PlayerData.Base:GetWorldClass()
|
||||
self.nCurIndex = PlayerData.Base:GetCurWorldClassStageIndex()
|
||||
if self.bFold then
|
||||
self:RefreshDemonList()
|
||||
else
|
||||
self:RefreshLevelInfo(self.nCurIndex)
|
||||
end
|
||||
self:RefreshWorldClass()
|
||||
local data = self.tbWorldClass[self.nCurIndex]
|
||||
if data ~= nil then
|
||||
self._mapNode.goLevelItem:SetItem(data)
|
||||
end
|
||||
end
|
||||
function QuestWorldClassCtrl:OnEvent_DisableScrollView(bDisable)
|
||||
NovaAPI.SetScrollRectVertical(self._mapNode.levelLsv, not bDisable)
|
||||
end
|
||||
return QuestWorldClassCtrl
|
||||
@@ -0,0 +1,222 @@
|
||||
local WorldClassItemCtrl = class("WorldClassItemCtrl", BaseCtrl)
|
||||
WorldClassItemCtrl._mapNodeConfig = {
|
||||
rtLevelUp = {},
|
||||
txtLevelUp = {sComponentName = "TMP_Text"},
|
||||
txtLevelUpDesc = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "WorldClass_Level_LevelUp_Cur"
|
||||
},
|
||||
imgProgressBarBg = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
rtBarFill = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
txtProgress = {sComponentName = "TMP_Text"},
|
||||
rtAdvance = {},
|
||||
txtAdvance = {sComponentName = "TMP_Text"},
|
||||
txtAdvanceDesc = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "WorldClass_Level_Advance_Cur"
|
||||
},
|
||||
imgMissionBg = {nCount = 8},
|
||||
btnRewardItem = {
|
||||
nCount = 4,
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_RewardItem"
|
||||
},
|
||||
goRewardItem = {
|
||||
nCount = 4,
|
||||
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
|
||||
},
|
||||
goingTip = {},
|
||||
txtGoing = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "WorldClass_Level_Cur"
|
||||
},
|
||||
rtImgArrow = {
|
||||
sNodeName = "imgArrow",
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
imgComplete = {},
|
||||
txtLock = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "WorldClass_Level_Lock"
|
||||
},
|
||||
btnReceive = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Receive"
|
||||
},
|
||||
txtBtnReceive = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "WorldClass_Level_Receive_All"
|
||||
},
|
||||
redDot = {}
|
||||
}
|
||||
WorldClassItemCtrl._mapEventConfig = {
|
||||
ReceiveWorldClassLevelReward = "OnEvent_ReceiveWorldClassLevelReward"
|
||||
}
|
||||
WorldClassItemCtrl._mapRedDotConfig = {}
|
||||
local worldClass_Lock = 1
|
||||
local worldClass_Going = 2
|
||||
local worldClass_CanReceive = 3
|
||||
local worldClass_Received = 4
|
||||
local totalLength = 674
|
||||
local totalHeight = 37
|
||||
function WorldClassItemCtrl:SetItem(itemData)
|
||||
self.itemData = itemData
|
||||
self.nCurWorldClass = PlayerData.Base:GetWorldClass()
|
||||
if itemData.nType == AllEnum.WorldClassType.LevelUp then
|
||||
self:SetLevelUpItem()
|
||||
else
|
||||
self:SetAdvanceItem()
|
||||
end
|
||||
end
|
||||
function WorldClassItemCtrl:SetLevelUpItem()
|
||||
self.nState = 0
|
||||
self._mapNode.rtAdvance.gameObject:SetActive(false)
|
||||
self._mapNode.rtLevelUp.gameObject:SetActive(true)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtBtnReceive, ConfigTable.GetUIText("WorldClass_Level_Receive_All"))
|
||||
local nCurStageId = PlayerData.Base:GetCurWorldClassStageId()
|
||||
local bAllReceived = true
|
||||
local bCanReceive = false
|
||||
for i = self.itemData.nMinLevel, self.itemData.nMaxLevel do
|
||||
if i > self.nCurWorldClass then
|
||||
bAllReceived = false
|
||||
end
|
||||
local bUnReceive = PlayerData.Base:GetWorldClassState(i) and i <= self.nCurWorldClass
|
||||
if bUnReceive then
|
||||
bAllReceived = false
|
||||
end
|
||||
bCanReceive = bCanReceive or bUnReceive
|
||||
end
|
||||
if nCurStageId ~= self.itemData.nId and self.nCurWorldClass < self.itemData.nMinLevel then
|
||||
self.nState = worldClass_Lock
|
||||
elseif bAllReceived then
|
||||
self.nState = worldClass_Received
|
||||
elseif bCanReceive then
|
||||
self.nState = worldClass_CanReceive
|
||||
else
|
||||
self.nState = worldClass_Going
|
||||
end
|
||||
local mapCfg = ConfigTable.GetData("DemonAdvance", self.itemData.nId)
|
||||
if mapCfg ~= nil then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLevelUp, orderedFormat(ConfigTable.GetUIText("WorldClass_Level_LevelUp_Title"), mapCfg.AdvanceName))
|
||||
local nAllProgress = self.itemData.nMaxLevel - self.itemData.nMinLevel + 1
|
||||
local nCurProgress = 0
|
||||
if self.nState == worldClass_Received then
|
||||
nCurProgress = nAllProgress
|
||||
elseif self.nState == worldClass_Lock then
|
||||
nCurProgress = 0
|
||||
else
|
||||
nCurProgress = math.min(self.nCurWorldClass - self.itemData.nMinLevel + 1, nAllProgress)
|
||||
end
|
||||
self._mapNode.rtBarFill.sizeDelta = Vector2(totalLength * (nCurProgress / nAllProgress), totalHeight)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtProgress, string.format("%s/%s", nCurProgress, nAllProgress))
|
||||
end
|
||||
self:RefreshRewardState()
|
||||
RedDotManager.RegisterNode(RedDotDefine.WorldClass_LevelUp, self.itemData.nId, self._mapNode.redDot, nil, nil, true)
|
||||
end
|
||||
function WorldClassItemCtrl:SetAdvanceItem()
|
||||
self.nState = 0
|
||||
self._mapNode.rtAdvance.gameObject:SetActive(true)
|
||||
self._mapNode.rtLevelUp.gameObject:SetActive(false)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtBtnReceive, ConfigTable.GetUIText("WorldClass_Level_Advance"))
|
||||
local mapCfg = ConfigTable.GetData("DemonAdvance", self.itemData.nId)
|
||||
if mapCfg ~= nil then
|
||||
local tbQuestList = PlayerData.Quest:GetDemonQuestData(mapCfg.AdvanceQuestGroup, self.itemData.nId)
|
||||
local nAllProgress = #tbQuestList
|
||||
local nCurProgress = 0
|
||||
local nCurWorldClass = PlayerData.Base:GetWorldClass()
|
||||
local nCurStageId = PlayerData.Base:GetCurWorldClassStageId()
|
||||
if nCurStageId == self.itemData.nId and nCurWorldClass == self.itemData.nMaxLevel then
|
||||
for _, v in ipairs(tbQuestList) do
|
||||
if v.nStatus ~= 0 then
|
||||
nCurProgress = nCurProgress + 1
|
||||
end
|
||||
end
|
||||
if nAllProgress <= nCurProgress then
|
||||
self.nState = worldClass_CanReceive
|
||||
else
|
||||
self.nState = worldClass_Going
|
||||
end
|
||||
elseif nCurWorldClass < self.itemData.nMinLevel then
|
||||
nCurProgress = 0
|
||||
self.nState = worldClass_Lock
|
||||
elseif nCurWorldClass >= self.itemData.nMinLevel then
|
||||
nCurProgress = nAllProgress
|
||||
self.nState = worldClass_Received
|
||||
end
|
||||
for k, v in ipairs(self._mapNode.imgMissionBg) do
|
||||
v.gameObject:SetActive(k <= nAllProgress)
|
||||
if k <= nAllProgress then
|
||||
local imgMission = v.gameObject.transform:Find("imgMission")
|
||||
imgMission.gameObject:SetActive(k <= nCurProgress)
|
||||
end
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtAdvance, orderedFormat(ConfigTable.GetUIText("WorldClass_Level_Advance_Title"), mapCfg.AdvanceName))
|
||||
self.tbReward = {}
|
||||
for i = 1, 4 do
|
||||
local itemId = mapCfg["Item" .. i]
|
||||
local nRarity = 0
|
||||
local mapCfg = ConfigTable.GetData_Item(itemId)
|
||||
if mapCfg ~= nil then
|
||||
nRarity = mapCfg.Rarity
|
||||
end
|
||||
self._mapNode.btnRewardItem[i].gameObject:SetActive(0 < itemId)
|
||||
if itemId ~= 0 then
|
||||
local itemCount = mapCfg["Qty" .. i]
|
||||
table.insert(self.tbReward, {
|
||||
nId = itemId,
|
||||
nCount = itemCount,
|
||||
nRarity = nRarity
|
||||
})
|
||||
self._mapNode.goRewardItem[i]:SetItem(itemId, nil, itemCount, nil, self.nState == worldClass_Received, nil, nil, true)
|
||||
end
|
||||
end
|
||||
table.sort(self.tbReward, function(a, b)
|
||||
if a.nRarity == b.nRarity then
|
||||
return a.nId < b.nId
|
||||
end
|
||||
return a.nRarity < b.nRarity
|
||||
end)
|
||||
end
|
||||
self:RefreshRewardState()
|
||||
RedDotManager.RegisterNode(RedDotDefine.WorldClass_Advance, self.itemData.nId, self._mapNode.redDot, nil, nil, true)
|
||||
end
|
||||
function WorldClassItemCtrl:RefreshRewardState()
|
||||
self._mapNode.goingTip.gameObject:SetActive(self.nState == worldClass_Going)
|
||||
self._mapNode.imgComplete.gameObject:SetActive(self.nState == worldClass_Received)
|
||||
self._mapNode.txtLock.gameObject:SetActive(self.nState == worldClass_Lock)
|
||||
self._mapNode.btnReceive.gameObject:SetActive(self.nState == worldClass_CanReceive)
|
||||
end
|
||||
function WorldClassItemCtrl:Awake()
|
||||
end
|
||||
function WorldClassItemCtrl:OnEnable()
|
||||
end
|
||||
function WorldClassItemCtrl:OnDisable()
|
||||
end
|
||||
function WorldClassItemCtrl:OnDestroy()
|
||||
end
|
||||
function WorldClassItemCtrl:OnBtnClick_Receive()
|
||||
if self.itemData.nType == AllEnum.WorldClassType.LevelUp then
|
||||
local callback = function()
|
||||
local nMaxLevel = math.min(self.nCurWorldClass, self.itemData.nMaxLevel)
|
||||
PlayerData.State:ResetIntervalWorldClassRewardState(self.itemData.nMinLevel, nMaxLevel)
|
||||
EventManager.Hit("ReceiveWorldClassLevelReward")
|
||||
end
|
||||
PlayerData.Base:SendPlayerWorldClassRewardReceiveReq(nil, self.itemData.nId, callback, self.itemData.nMinLevel)
|
||||
else
|
||||
PlayerData.Base:SendPlayerWorldClassAdvanceReq(self.itemData.nId)
|
||||
end
|
||||
end
|
||||
function WorldClassItemCtrl:OnBtnClick_RewardItem(btn, nIndex)
|
||||
local nTid = self.tbReward[nIndex].nId
|
||||
UTILS.ClickItemGridWithTips(nTid, btn.gameObject.transform, false, true, false)
|
||||
end
|
||||
function WorldClassItemCtrl:OnEvent_ReceiveWorldClassLevelReward()
|
||||
if self.itemData ~= nil and self.itemData.nType == AllEnum.WorldClassType.LevelUp then
|
||||
self:SetLevelUpItem()
|
||||
end
|
||||
end
|
||||
return WorldClassItemCtrl
|
||||
@@ -0,0 +1,148 @@
|
||||
local WorldClassLevelItemCtrl = class("WorldClassLevelItemCtrl", BaseCtrl)
|
||||
WorldClassLevelItemCtrl._mapNodeConfig = {
|
||||
rtImgBg = {
|
||||
sNodeName = "imgBg",
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
txtLevelCn = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "WorldClass_Level"
|
||||
},
|
||||
txtLevel = {sComponentName = "TMP_Text"},
|
||||
btnRewardItem = {
|
||||
nCount = 4,
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_RewardItem"
|
||||
},
|
||||
goRewardItem = {
|
||||
nCount = 4,
|
||||
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
|
||||
},
|
||||
btnReceive = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Receive"
|
||||
},
|
||||
txtBtnReceive = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "WorldClass_Level_Receive"
|
||||
},
|
||||
txtUnComplete = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "WorldClass_Level_UnComplete"
|
||||
},
|
||||
imgComplete = {},
|
||||
imgUnOpen = {},
|
||||
txtUnOpen = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "WorldClass_Level_Lock"
|
||||
},
|
||||
goInfo = {},
|
||||
imgOpenFunc = {nCount = 3},
|
||||
imgLevelInfo = {nCount = 3}
|
||||
}
|
||||
WorldClassLevelItemCtrl._mapEventConfig = {}
|
||||
WorldClassLevelItemCtrl._mapRedDotConfig = {}
|
||||
function WorldClassLevelItemCtrl:SetItem(nLevel, bUnOpen)
|
||||
self.nLevel = nLevel
|
||||
self.bUnOpen = bUnOpen
|
||||
local nCurWorldClass = PlayerData.Base:GetWorldClass()
|
||||
local bUnReceive = PlayerData.Base:GetWorldClassState(self.nLevel)
|
||||
local mapCfg = ConfigTable.GetData("WorldClass", nLevel)
|
||||
if mapCfg ~= nil then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLevel, nLevel)
|
||||
local tbRewardCfg = decodeJson(mapCfg.Reward)
|
||||
for _, v in ipairs(self._mapNode.btnRewardItem) do
|
||||
v.gameObject:SetActive(false)
|
||||
end
|
||||
self.tbReward = {}
|
||||
local i = 1
|
||||
for sItem, nCount in pairs(tbRewardCfg) do
|
||||
local nItemId = tonumber(sItem)
|
||||
local nRarity = 0
|
||||
local mapCfg = ConfigTable.GetData_Item(nItemId)
|
||||
if mapCfg ~= nil then
|
||||
nRarity = mapCfg.Rarity
|
||||
end
|
||||
table.insert(self.tbReward, {
|
||||
nId = nItemId,
|
||||
nCount = nCount,
|
||||
nRarity = nRarity
|
||||
})
|
||||
i = i + 1
|
||||
end
|
||||
table.sort(self.tbReward, function(a, b)
|
||||
if a.nRarity == b.nRarity then
|
||||
return a.nId < b.nId
|
||||
end
|
||||
return a.nRarity < b.nRarity
|
||||
end)
|
||||
for k, v in ipairs(self._mapNode.btnRewardItem) do
|
||||
v.gameObject:SetActive(k <= #self.tbReward)
|
||||
if k <= #self.tbReward then
|
||||
self._mapNode.goRewardItem[k]:SetItem(self.tbReward[k].nId, nil, self.tbReward[k].nCount, nil, not bUnReceive and nLevel <= nCurWorldClass, nil, nil, true)
|
||||
end
|
||||
end
|
||||
local nInfoCount = 0
|
||||
local tbOpenFunc = mapCfg.OpenFunc
|
||||
for k, v in ipairs(self._mapNode.imgOpenFunc) do
|
||||
v.gameObject:SetActive(tbOpenFunc[k] ~= nil and tbOpenFunc[k] ~= 0)
|
||||
if tbOpenFunc[k] ~= nil and tbOpenFunc[k] ~= 0 then
|
||||
nInfoCount = nInfoCount + 1
|
||||
local mapOpenFuncCfg = ConfigTable.GetData("OpenFunc", tbOpenFunc[k])
|
||||
if mapOpenFuncCfg ~= nil then
|
||||
local txtFunc = v.gameObject.transform:Find("txtFunc"):GetComponent("TMP_Text")
|
||||
local txtFuncDesc = v.gameObject.transform:Find("txtFuncDesc"):GetComponent("TMP_Text")
|
||||
NovaAPI.SetTMPText(txtFunc, orderedFormat(ConfigTable.GetUIText("WorldClass_Level_FuncOpen"), mapOpenFuncCfg.Name))
|
||||
NovaAPI.SetTMPText(txtFuncDesc, mapOpenFuncCfg.Desc)
|
||||
end
|
||||
end
|
||||
end
|
||||
for _, v in ipairs(self._mapNode.imgLevelInfo) do
|
||||
v.gameObject:SetActive(false)
|
||||
end
|
||||
for i = 1, 3 do
|
||||
if mapCfg["FuncChangeText" .. i] ~= "" then
|
||||
nInfoCount = nInfoCount + 1
|
||||
self._mapNode.imgLevelInfo[i].gameObject:SetActive(true)
|
||||
local txtLevelLimit = self._mapNode.imgLevelInfo[i].gameObject.transform:Find("txtLevelLimit"):GetComponent("TMP_Text")
|
||||
NovaAPI.SetTMPText(txtLevelLimit, mapCfg["FuncChangeText" .. i])
|
||||
end
|
||||
end
|
||||
self._mapNode.goInfo:SetActive(0 < nInfoCount)
|
||||
end
|
||||
self:RefreshStatus()
|
||||
end
|
||||
function WorldClassLevelItemCtrl:RefreshStatus()
|
||||
local nCurWorldClass = PlayerData.Base:GetWorldClass()
|
||||
local bUnReceive = PlayerData.Base:GetWorldClassState(self.nLevel)
|
||||
self._mapNode.txtUnComplete.gameObject:SetActive(not self.bUnOpen and nCurWorldClass < self.nLevel)
|
||||
self._mapNode.btnReceive.gameObject:SetActive(bUnReceive and nCurWorldClass >= self.nLevel)
|
||||
self._mapNode.imgComplete.gameObject:SetActive(not bUnReceive and nCurWorldClass >= self.nLevel)
|
||||
self._mapNode.imgUnOpen.gameObject:SetActive(self.bUnOpen)
|
||||
for k, v in ipairs(self._mapNode.btnRewardItem) do
|
||||
if k <= #self.tbReward then
|
||||
self._mapNode.goRewardItem[k]:SetItem(self.tbReward[k].nId, nil, self.tbReward[k].nCount, nil, not bUnReceive and nCurWorldClass >= self.nLevel, nil, nil, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
function WorldClassLevelItemCtrl:Awake()
|
||||
end
|
||||
function WorldClassLevelItemCtrl:OnEnable()
|
||||
end
|
||||
function WorldClassLevelItemCtrl:OnDisable()
|
||||
end
|
||||
function WorldClassLevelItemCtrl:OnDestroy()
|
||||
end
|
||||
function WorldClassLevelItemCtrl:OnBtnClick_RewardItem(btn, nIndex)
|
||||
local nTid = self.tbReward[nIndex].nId
|
||||
UTILS.ClickItemGridWithTips(nTid, btn.gameObject.transform, false, true, false)
|
||||
end
|
||||
function WorldClassLevelItemCtrl:OnBtnClick_Receive()
|
||||
local callback = function()
|
||||
PlayerData.State:ResetWorldClassRewardState(self.nLevel)
|
||||
self:RefreshStatus()
|
||||
EventManager.Hit("ReceiveWorldClassLevelReward")
|
||||
end
|
||||
PlayerData.Base:SendPlayerWorldClassRewardReceiveReq(self.nLevel, nil, callback)
|
||||
end
|
||||
return WorldClassLevelItemCtrl
|
||||
@@ -0,0 +1,76 @@
|
||||
local WorldClassQuestItemCtrl = class("WorldClassQuestItemCtrl", BaseCtrl)
|
||||
local JumpUtil = require("Game.Common.Utils.JumpUtil")
|
||||
WorldClassQuestItemCtrl._mapNodeConfig = {
|
||||
txtUnComplete = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Demon_Quest_UnComplete"
|
||||
},
|
||||
imgComplete = {},
|
||||
imgCompleteMask = {},
|
||||
imgUnOpen = {},
|
||||
txtUnOpen = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "WorldClass_Level_Lock"
|
||||
},
|
||||
txtQuestDesc = {sComponentName = "TMP_Text", nCount = 2},
|
||||
goOpen = {},
|
||||
btnJump = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Jump"
|
||||
},
|
||||
txtBtnJump = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Demon_Quest_JumpTo"
|
||||
},
|
||||
imgProgressBar = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
rtBarFill = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
txtProgress = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
WorldClassQuestItemCtrl._mapEventConfig = {}
|
||||
WorldClassQuestItemCtrl._mapRedDotConfig = {}
|
||||
local totalLength = 700
|
||||
local totalHeight = 37
|
||||
function WorldClassQuestItemCtrl:SetItem(questData, bUnOpen)
|
||||
self.mapQuest = questData
|
||||
self.bUnOpen = bUnOpen
|
||||
local mapQuestCfg = ConfigTable.GetData("DemonQuest", questData.nTid)
|
||||
if mapQuestCfg ~= nil then
|
||||
self.nJumpTo = mapQuestCfg.JumpTo
|
||||
for _, v in ipairs(self._mapNode.txtQuestDesc) do
|
||||
NovaAPI.SetTMPText(v, mapQuestCfg.Title)
|
||||
end
|
||||
self._mapNode.imgUnOpen.gameObject:SetActive(self.bUnOpen)
|
||||
self._mapNode.goOpen:SetActive(not self.bUnOpen)
|
||||
if not self.bUnOpen then
|
||||
self._mapNode.txtUnComplete.gameObject:SetActive(questData.nStatus == 0 and self.nJumpTo == 0)
|
||||
self._mapNode.imgComplete.gameObject:SetActive(questData.nStatus ~= 0)
|
||||
self._mapNode.imgCompleteMask.gameObject:SetActive(questData.nStatus ~= 0)
|
||||
self._mapNode.btnJump.gameObject:SetActive(questData.nStatus == 0 and self.nJumpTo ~= 0)
|
||||
end
|
||||
if questData.nStatus == 0 then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtProgress, string.format("%s/%s", questData.nCurProgress, questData.nGoal))
|
||||
self._mapNode.rtBarFill.sizeDelta = Vector2(questData.nCurProgress / questData.nGoal * totalLength, totalHeight)
|
||||
else
|
||||
NovaAPI.SetTMPText(self._mapNode.txtProgress, string.format("%s/%s", questData.nCurProgress, questData.nGoal))
|
||||
self._mapNode.rtBarFill.sizeDelta = Vector2(totalLength, totalHeight)
|
||||
end
|
||||
end
|
||||
end
|
||||
function WorldClassQuestItemCtrl:Awake()
|
||||
end
|
||||
function WorldClassQuestItemCtrl:OnEnable()
|
||||
end
|
||||
function WorldClassQuestItemCtrl:OnDisable()
|
||||
end
|
||||
function WorldClassQuestItemCtrl:OnDestroy()
|
||||
end
|
||||
function WorldClassQuestItemCtrl:OnBtnClick_Jump()
|
||||
if self.nJumpTo ~= nil and self.nJumpTo ~= 0 then
|
||||
JumpUtil.JumpTo(self.nJumpTo)
|
||||
end
|
||||
end
|
||||
return WorldClassQuestItemCtrl
|
||||
Reference in New Issue
Block a user