Files
SL1900 5e0d58cfad 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
2025-12-03 01:00:00 +09:00

178 lines
5.8 KiB
Lua

local StarTowerBookQuestCtrl = class("StarTowerBookQuestCtrl", BaseCtrl)
StarTowerBookQuestCtrl._mapNodeConfig = {
goWindowBlur = {},
goQuestWindow = {},
animRoot = {
sNodeName = "goQuestWindow",
sComponentName = "Animator"
},
txtWindowTitle = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Quest_Title"
},
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
questLSV = {
sComponentName = "LoopScrollView"
},
btnReceive = {
sComponentName = "UIButton",
callback = "OnBtnClick_Receive"
},
txtReceiveBtn = {
nCount = 2,
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Quest_Quick_Receive"
},
btnReceiveGray = {
sComponentName = "UIButton",
callback = "OnBtnClick_ReceiveGray"
},
btnQuestBg = {
sComponentName = "Button",
callback = "OnBtnClick_Close"
}
}
StarTowerBookQuestCtrl._mapEventConfig = {}
StarTowerBookQuestCtrl._mapRedDotConfig = {}
function StarTowerBookQuestCtrl:ShowWindow(nParam)
self._mapNode.goQuestWindow.gameObject:SetActive(false)
self._mapNode.goWindowBlur.gameObject:SetActive(true)
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
self._mapNode.goQuestWindow.gameObject:SetActive(true)
self._mapNode.animRoot:Play("t_window_04_t_in")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
if self._panel.nPanelType == AllEnum.StarTowerBookPanelType.Potential then
self:InitPotentialQuest(nParam)
elseif self._panel.nPanelType == AllEnum.StarTowerBookPanelType.FateCard then
self:InitFateCardQuest(nParam)
end
end
cs_coroutine.start(wait)
end
function StarTowerBookQuestCtrl:InitPotentialQuest(nCharId)
self.nCharId = nCharId
self.mapQuest = {}
local mapQuest = PlayerData.StarTowerBook:GetCharPotentialQuest(nCharId)
self._mapNode.questLSV.gameObject:SetActive(mapQuest ~= nil)
if mapQuest == nil then
return
end
for nId, data in pairs(mapQuest) do
data.Id = nId
table.insert(self.mapQuest, data)
end
table.sort(self.mapQuest, function(a, b)
if a.Status == b.Status then
return a.Id < b.Id
end
return a.Status < b.Status
end)
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbGridCtrl[nInstanceId] = nil
end
self._mapNode.questLSV:Init(#self.mapQuest, self, self.OnPotentialGridRefresh, nil)
local bCanReceive = false
for _, v in ipairs(self.mapQuest) do
if v.Status == AllEnum.BookQuestStatus.Complete then
bCanReceive = true
break
end
end
self._mapNode.btnReceive.gameObject:SetActive(bCanReceive)
self._mapNode.btnReceiveGray.gameObject:SetActive(not bCanReceive)
end
function StarTowerBookQuestCtrl:OnPotentialGridRefresh(goGrid, goIndex)
local nInstanceID = goGrid:GetInstanceID()
if not self.tbGridCtrl[nInstanceID] then
self.tbGridCtrl[nInstanceID] = self:BindCtrlByNode(goGrid, "Game.UI.StarTowerBook.Quest.BookQuestItemCtrl")
end
local questData = self.mapQuest[goIndex + 1]
self.tbGridCtrl[nInstanceID]:InitPotentialItem(questData)
end
function StarTowerBookQuestCtrl:InitFateCardQuest(nBundleId)
self.nBundleId = nBundleId
self.mapQuest = PlayerData.StarTowerBook:GetFateCardBundleQuest(nBundleId)
table.sort(self.mapQuest, function(a, b)
if a.Status == b.Status then
return a.Id < b.Id
end
return a.Status < b.Status
end)
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbGridCtrl[nInstanceId] = nil
end
self._mapNode.questLSV:Init(#self.mapQuest, self, self.OnFateCardGridRefresh, nil)
local bCanReceive = false
for _, v in ipairs(self.mapQuest) do
if v.Status == AllEnum.BookQuestStatus.Complete then
bCanReceive = true
break
end
end
self._mapNode.btnReceive.gameObject:SetActive(bCanReceive)
self._mapNode.btnReceiveGray.gameObject:SetActive(not bCanReceive)
end
function StarTowerBookQuestCtrl:OnFateCardGridRefresh(goGrid, goIndex)
local nInstanceID = goGrid:GetInstanceID()
if not self.tbGridCtrl[nInstanceID] then
self.tbGridCtrl[nInstanceID] = self:BindCtrlByNode(goGrid, "Game.UI.StarTowerBook.Quest.BookQuestItemCtrl")
end
local questData = self.mapQuest[goIndex + 1]
self.tbGridCtrl[nInstanceID]:InitFateCardItem(questData)
end
function StarTowerBookQuestCtrl:CloseWindow()
self._mapNode.animRoot:Play("t_window_04_t_out")
local nAnim = NovaAPI.GetAnimClipLength(self._mapNode.animRoot, {
"t_window_04_t_out"
})
EventManager.Hit(EventId.TemporaryBlockInput, nAnim)
self:AddTimer(1, nAnim, function()
self._mapNode.goQuestWindow.gameObject:SetActive(false)
self._mapNode.goWindowBlur.gameObject:SetActive(false)
self.gameObject:SetActive(false)
end, true, true, true, true)
end
function StarTowerBookQuestCtrl:Awake()
self.tbGridCtrl = {}
end
function StarTowerBookQuestCtrl:FadeIn()
end
function StarTowerBookQuestCtrl:FadeOut()
end
function StarTowerBookQuestCtrl:OnEnable()
end
function StarTowerBookQuestCtrl:OnDisable()
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbGridCtrl[nInstanceId] = nil
end
end
function StarTowerBookQuestCtrl:OnBtnClick_Close()
self:CloseWindow()
end
function StarTowerBookQuestCtrl:OnBtnClick_Receive()
local callback = function()
if self._panel.nPanelType == AllEnum.StarTowerBookPanelType.Potential then
self:InitPotentialQuest(self.nCharId)
elseif self._panel.nPanelType == AllEnum.StarTowerBookPanelType.FateCard then
self:InitFateCardQuest(self.nBundleId)
end
self:CloseWindow()
end
if self._panel.nPanelType == AllEnum.StarTowerBookPanelType.Potential then
PlayerData.StarTowerBook:SendReceivePotentialRewardMsg(self.nCharId, callback)
elseif self._panel.nPanelType == AllEnum.StarTowerBookPanelType.FateCard then
PlayerData.StarTowerBook:SendReceiveFateCardRewardMsg(self.nBundleId, 0, callback)
end
end
function StarTowerBookQuestCtrl:OnBtnClick_ReceiveGray()
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("StarTower_Book_Quest_Reward"))
end
return StarTowerBookQuestCtrl