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:
SL1900
2025-12-03 01:00:00 +09:00
commit 5e0d58cfad
3595 changed files with 9373562 additions and 0 deletions
@@ -0,0 +1,97 @@
local BaseCtrl = require("GameCore.UI.BaseCtrl")
local AffinityRewardCtrl = class("AffinityRewardCtrl", BaseCtrl)
AffinityRewardCtrl._mapNodeConfig = {
anit_window_01 = {sNodeName = "t_window", sComponentName = "Animator"},
got_fullscreen_blur_black = {
sNodeName = "t_fullscreen_blur_black",
sComponentName = "GameObject"
},
btnsnapshot = {
sNodeName = "snapshot",
sComponentName = "Button",
callback = "OnBtn_ClickClose"
},
btnClose = {
sNodeName = "btnClose",
sComponentName = "UIButton",
callback = "OnBtn_ClickClose"
},
svList = {
sComponentName = "LoopScrollView"
},
txtWindowTitle = {
sComponentName = "TMP_Text",
sLanguageId = "CharacterRelation_Favour_Reward"
}
}
AffinityRewardCtrl._mapEventConfig = {}
function AffinityRewardCtrl:Awake()
local tbParam = self:GetPanelParam()
self.curNpcId = tbParam[1]
self.curNpcAffinityGroup = 0
self.tbAffinityCfgData = {}
self.mapGridCtrl = {}
self.mapNPCAffinityData = PlayerData.StarTower:GetNpcAffinityData(self.curNpcId)
local mapNpcCfgData = ConfigTable.GetData("StarTowerNPC", self.curNpcId)
if mapNpcCfgData ~= nil then
self.curNpcAffinityGroup = mapNpcCfgData.AffinityGroupId
end
end
function AffinityRewardCtrl:OnEnable()
self._mapNode.anit_window_01:Play("t_window_04_t_in")
self._mapNode.got_fullscreen_blur_black:SetActive(true)
local forEachNpcAffinity = function(mapData)
if mapData.AffinityGroupId == self.curNpcAffinityGroup and mapData.Level > 0 then
table.insert(self.tbAffinityCfgData, mapData)
end
end
ForEachTableLine(DataTable.NPCAffinityGroup, forEachNpcAffinity)
local sort = function(a, b)
return a.Level < b.Level
end
table.sort(self.tbAffinityCfgData, sort)
local nIdx = 1
for i, mapData in ipairs(self.tbAffinityCfgData) do
if self.mapNPCAffinityData.Level < mapData.Level then
nIdx = i
break
end
end
for nInstanceId, objCtrl in pairs(self.mapGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.mapGridCtrl[nInstanceId] = nil
end
self._mapNode.svList:Init(#self.tbAffinityCfgData, self, self.OnRefreshGrid, nil)
if 2 <= nIdx then
nIdx = nIdx - 2
else
nIdx = 0
end
self._mapNode.svList:SetScrollGridPos(nIdx)
end
function AffinityRewardCtrl:OnDisable()
for nInstanceId, objCtrl in pairs(self.mapGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.mapGridCtrl[nInstanceId] = nil
end
self.mapGridCtrl = {}
end
function AffinityRewardCtrl:OnRefreshGrid(goGrid, gridIndex)
local nInstanceId = goGrid:GetInstanceID()
local objCtrl = self.mapGridCtrl[nInstanceId]
if objCtrl == nil then
objCtrl = self:BindCtrlByNode(goGrid, "Game.UI.StarTowerBook.Affinity.AffinityRewardGridCtrl")
self.mapGridCtrl[nInstanceId] = objCtrl
end
local mapCfgData = self.tbAffinityCfgData[gridIndex + 1]
objCtrl:Refresh(mapCfgData, self.mapNPCAffinityData)
end
function AffinityRewardCtrl:OnBtn_ClickClose()
self._mapNode.anit_window_01:Play("t_window_04_t_out")
self._mapNode.got_fullscreen_blur_black:SetActive(false)
self:AddTimer(1, 0.3, "OnCloseAnimFinish", true, true, true)
end
function AffinityRewardCtrl:OnCloseAnimFinish()
EventManager.Hit(EventId.ClosePanel, PanelId.NpcAffinityRewardPanel)
end
return AffinityRewardCtrl
@@ -0,0 +1,77 @@
local AffinityRewardGridCtrl = class("AffinityRewardGridCtrl", BaseCtrl)
AffinityRewardGridCtrl._mapNodeConfig = {
rt_item = {
nCount = 3,
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
},
rtUnlock = {},
rtLock = {},
imgHead = {sComponentName = "Image"},
TMPUnreceived = {
sComponentName = "TMP_Text",
sLanguageId = "NPCAffinity_Received"
},
TMPReceived = {
sComponentName = "TMP_Text",
sLanguageId = "NPCAffinity_Unreceived"
},
txtLevelName = {
sComponentName = "TMP_Text",
nCount = 2,
sLanguageId = "Dating_Affinity_Level"
},
txtLevel = {sComponentName = "TMP_Text", nCount = 2},
btnItem = {
sComponentName = "UIButton",
nCount = 3,
callback = "OnBtnClick_RewardItem"
}
}
AffinityRewardGridCtrl._mapEventConfig = {}
AffinityRewardGridCtrl._mapRedDotConfig = {}
function AffinityRewardGridCtrl:Awake()
end
function AffinityRewardGridCtrl:FadeIn()
end
function AffinityRewardGridCtrl:FadeOut()
end
function AffinityRewardGridCtrl:OnEnable()
end
function AffinityRewardGridCtrl:OnDisable()
end
function AffinityRewardGridCtrl:OnDestroy()
end
function AffinityRewardGridCtrl:OnRelease()
end
function AffinityRewardGridCtrl:Refresh(mapCfgData, mapAffinity)
NovaAPI.SetTMPText(self._mapNode.txtLevel[1], mapCfgData.Level)
NovaAPI.SetTMPText(self._mapNode.txtLevel[2], mapCfgData.Level)
self:SetPngSprite(self._mapNode.imgHead, mapCfgData.Icon)
local mapReward = decodeJson(mapCfgData.Reward)
local tbReward = {}
for nTid, nCount in pairs(mapReward) do
table.insert(tbReward, {
tonumber(nTid),
tonumber(nCount)
})
end
local sort = function(a, b)
return a[1] < b[1]
end
table.sort(tbReward, sort)
self.tbReward = tbReward
for i = 1, 3 do
if tbReward[i] ~= nil then
self._mapNode.rt_item[i].gameObject:SetActive(true)
self._mapNode.rt_item[i]:SetItem(tbReward[i][1], nil, tbReward[i][2], nil, false, false, false, true, false)
else
self._mapNode.rt_item[i].gameObject:SetActive(false)
end
end
self._mapNode.rtUnlock:SetActive(mapCfgData.Level <= mapAffinity.Level)
self._mapNode.rtLock:SetActive(mapCfgData.Level > mapAffinity.Level)
end
function AffinityRewardGridCtrl:OnBtnClick_RewardItem(btn, nIdx)
UTILS.ClickItemGridWithTips(self.tbReward[nIdx][1], btn.gameObject, true, true, true)
end
return AffinityRewardGridCtrl
@@ -0,0 +1,20 @@
local BasePanel = require("GameCore.UI.BasePanel")
local AffinityRewardPanel = class("AffinityRewardPanel", BasePanel)
AffinityRewardPanel._bIsMainPanel = false
AffinityRewardPanel._tbDefine = {
{
sPrefabPath = "StarTowerBook/NpcAffinityRewardPanel.prefab",
sCtrlName = "Game.UI.StarTowerBook.Affinity.AffinityRewardCtrl"
}
}
function AffinityRewardPanel:Awake()
end
function AffinityRewardPanel:OnEnable()
end
function AffinityRewardPanel:OnDisable()
end
function AffinityRewardPanel:OnDestroy()
end
function AffinityRewardPanel:OnRelease()
end
return AffinityRewardPanel
@@ -0,0 +1,65 @@
local BaseCtrl = require("GameCore.UI.BaseCtrl")
local NpcFavorCtrl = class("NpcFavorCtrl", BaseCtrl)
NpcFavorCtrl._mapNodeConfig = {
txtFavourLevel = {
sNodeName = "txtFavourLevel",
sComponentName = "TMP_Text"
},
transFavourBarCenter = {
sNodeName = "FavourBarCenter",
sComponentName = "Transform"
},
txtFavourNum = {sNodeName = "txtFavour", sComponentName = "TMP_Text"},
txtFavourBubble = {
sNodeName = "txtFavourBubble",
sComponentName = "TMP_Text"
},
imgHeart = {sNodeName = "imgHeart", sComponentName = "Image"},
aniFavour = {
sNodeName = "aniFavourRoot",
sComponentName = "Animator"
}
}
NpcFavorCtrl._mapEventConfig = {
[EventId.AffinityChange] = "OnEvent_AffinityChange"
}
function NpcFavorCtrl:Awake()
end
function NpcFavorCtrl:OnEnable()
end
function NpcFavorCtrl:Refresh(nNpcId)
self.curCharId = nNpcId
local affinityData = PlayerData.StarTower:GetNpcAffinityData(nNpcId)
self.curFavourExp = affinityData.Exp
local mapNpc = ConfigTable.GetData("StarTowerNPC", nNpcId)
local nGroupId = mapNpc.AffinityGroupId
local nId = nGroupId * 100 + affinityData.Level
local mapAffinityCfgData = ConfigTable.GetData("NPCAffinityGroup", nId)
local data = mapAffinityCfgData
local needExp = affinityData.nNeed
self.curFavourLevel = data.AffinityLevelStage
NovaAPI.SetTMPText(self._mapNode.txtFavourLevel, ConfigTable.GetUIText("Advance_Level_Name") .. affinityData.Level)
NovaAPI.SetTMPText(self._mapNode.txtFavourNum, self.curFavourExp .. "/" .. needExp)
self._mapNode.txtFavourNum.gameObject:SetActive(needExp ~= 0)
NovaAPI.SetTMPText(self._mapNode.txtFavourBubble, data.RelationshipName)
if data.AffinityLevelIcon ~= "" then
end
self._mapNode.aniFavour.gameObject:SetActive(false)
self._mapNode.aniFavour.gameObject:SetActive(true)
self._mapNode.aniFavour:SetInteger("affinity_lv", self.curFavourLevel)
local percent = 0
if needExp ~= 0 then
percent = self.curFavourExp / needExp
else
percent = 1
end
self:RefreshProgressBar(percent, 0)
end
function NpcFavorCtrl:RefreshProgressBar(nPercent, nDuration)
self._mapNode.transFavourBarCenter.localEulerAngles = Vector3(0, 0, 0)
self._mapNode.transFavourBarCenter:DORotate(Vector3(0, 0, (1 - nPercent) * 102), nDuration, RotateMode.LocalAxisAdd)
end
function NpcFavorCtrl:ResetData()
self._mapNode.transFavourBarCenter.localEulerAngles = Vector3(0, 0, 0)
end
return NpcFavorCtrl
@@ -0,0 +1,44 @@
local NpcRelationGridCtrl = class("NpcRelationGridCtrl", BaseCtrl)
NpcRelationGridCtrl._mapNodeConfig = {
rtUnlock = {},
rtLock = {},
TMPStroyChp = {sComponentName = "TMP_Text"},
TMPStroyName = {sComponentName = "TMP_Text"},
TMPRewardCount = {sComponentName = "TMP_Text"},
imgRewardIcon = {sComponentName = "Image"},
TMPCond = {sComponentName = "TMP_Text"}
}
NpcRelationGridCtrl._mapEventConfig = {}
NpcRelationGridCtrl._mapRedDotConfig = {}
function NpcRelationGridCtrl:Awake()
end
function NpcRelationGridCtrl:FadeIn()
end
function NpcRelationGridCtrl:FadeOut()
end
function NpcRelationGridCtrl:OnEnable()
end
function NpcRelationGridCtrl:OnDisable()
end
function NpcRelationGridCtrl:OnDestroy()
end
function NpcRelationGridCtrl:OnRelease()
end
function NpcRelationGridCtrl:Refresh(mapPlot, mapPlotData)
NovaAPI.SetTMPText(self._mapNode.TMPStroyChp, mapPlot.Name)
NovaAPI.SetTMPText(self._mapNode.TMPStroyName, mapPlot.Desc)
NovaAPI.SetTMPText(self._mapNode.TMPRewardCount, "×" .. mapPlot.ItemQty)
local mapItemCfgData = ConfigTable.GetData_Item(mapPlot.ItemId)
if mapItemCfgData ~= nil then
self._mapNode.imgRewardIcon.gameObject:SetActive(true)
self:SetPngSprite(self._mapNode.imgRewardIcon, mapItemCfgData.Icon)
else
self._mapNode.imgRewardIcon.gameObject:SetActive(false)
end
local str = orderedFormat(ConfigTable.GetUIText("NPCAffinity_UnlockCnd") or "", mapPlot.AffinityLevel)
NovaAPI.SetTMPText(self._mapNode.TMPCond, str)
self._mapNode.TMPRewardCount.gameObject:SetActive(not PlayerData.StarTower:GetNpcPlotReceived(mapPlot.NPCId, mapPlot.Id))
self._mapNode.rtUnlock:SetActive(mapPlot.AffinityLevel <= mapPlotData.Level)
self._mapNode.rtLock:SetActive(mapPlot.AffinityLevel > mapPlotData.Level)
end
return NpcRelationGridCtrl
@@ -0,0 +1,214 @@
local StarTowerNpcAffinityCtrl = class("StarTowerNpcAffinityCtrl", BaseCtrl)
StarTowerNpcAffinityCtrl._mapNodeConfig = {
btnNpc = {
sNodeName = "btnNpcTab",
nCount = 4,
sComponentName = "UIButton",
callback = "OnBtnClick_NPCTab"
},
btnNpcTab = {
nCount = 4,
sCtrlName = "Game.UI.TemplateEx.TemplateToggleCtrl"
},
redDotAffinityTab = {nCount = 4},
imgNpcHead = {nCount = 4, sComponentName = "Image"},
TMPWeekAffinityCount = {sComponentName = "TMP_Text"},
imgNPC = {sComponentName = "Image"},
goAffinity = {
sCtrlName = "Game.UI.StarTowerBook.Affinity.NpcFavorCtrl"
},
TMPNPCName = {sComponentName = "TMP_Text"},
TMPNpcInfo = {sComponentName = "TMP_Text"},
svAffinityList = {
sComponentName = "LoopScrollView"
},
txtCollect = {sComponentName = "TMP_Text"},
txtCollectCn = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Collect"
},
btnAffinityReward = {
sComponentName = "UIButton",
callback = "OnBtnClick_AffinityReward"
},
rtNpcInfo = {sComponentName = "ScrollRect"}
}
StarTowerNpcAffinityCtrl._mapEventConfig = {}
StarTowerNpcAffinityCtrl._mapRedDotConfig = {}
function StarTowerNpcAffinityCtrl:Awake()
self.tbNPC = {}
self.mapNpcPlot = {}
self.mapNpcAffinityData = {}
self.nTotalPlotCount = 0
local forEachStartowerNpc = function(mapData)
table.insert(self.tbNPC, mapData)
end
ForEachTableLine(DataTable.StarTowerNPC, forEachStartowerNpc)
local forEachStartowerNpcPlot = function(mapData)
if self.mapNpcPlot[mapData.NPCId] == nil then
self.mapNpcPlot[mapData.NPCId] = {}
end
self.nTotalPlotCount = self.nTotalPlotCount + 1
table.insert(self.mapNpcPlot[mapData.NPCId], mapData)
end
local sort = function(a, b)
return a.Id < b.Id
end
table.sort(self.tbNPC, sort)
ForEachTableLine(DataTable.NPCAffinityPlot, forEachStartowerNpcPlot)
local sortPlot = function(a, b)
return a.AffinityLevel < b.AffinityLevel
end
for _, tbPlot in pairs(self.mapNpcPlot) do
table.sort(tbPlot, sortPlot)
end
for i = 1, 4 do
self._mapNode.btnNpcTab[i]:SetText(self.tbNPC[i].Name)
self:SetPngSprite(self._mapNode.imgNpcHead[i], self.tbNPC[i].Head)
end
end
function StarTowerNpcAffinityCtrl:FadeIn()
end
function StarTowerNpcAffinityCtrl:FadeOut()
end
function StarTowerNpcAffinityCtrl:OnEnable()
for i = 1, 4 do
RedDotManager.RegisterNode(RedDotDefine.StarTowerBook_Affinity_Reward, self.tbNPC[i].Id, self._mapNode.redDotAffinityTab[i])
end
end
function StarTowerNpcAffinityCtrl:OnDisable()
self:UnbindAllGridNodes()
for i = 1, 4 do
RedDotManager.UnRegisterNode(RedDotDefine.StarTowerBook_Affinity_Reward, self.tbNPC[i].Id, self._mapNode.redDotAffinityTab[i])
end
end
function StarTowerNpcAffinityCtrl:OnDestroy()
end
function StarTowerNpcAffinityCtrl:OnRelease()
end
function StarTowerNpcAffinityCtrl:Init()
self.nCurCount = 0
for _, value in ipairs(self.tbNPC) do
local tbPlotCount = PlayerData.StarTower:GetNpcReceivedPlot(value.Id)
self.nCurCount = self.nCurCount + #tbPlotCount
end
self.mapNpcAffinityData = {}
local forEachStartowerNpc = function(mapData)
self.mapNpcAffinityData[mapData.Id] = PlayerData.StarTower:GetNpcAffinityData(mapData.Id)
end
ForEachTableLine(DataTable.StarTowerNPC, forEachStartowerNpc)
self.mapAffinityGrid = {}
self.nCurNpcId = self.tbNPC[1].Id
if self._panel.nAffinityNpcId ~= 0 and self._panel.nAffinityNpcId ~= nil then
self.nCurNpcId = self._panel.nAffinityNpcId
end
for i = 1, 4 do
self._mapNode.btnNpcTab[i]:SetDefault(self.nCurNpcId == self.tbNPC[i].Id)
end
local nMaxCount = ConfigTable.GetConfigNumber("NPCAffinityNumberOfInteractions")
local curCount = PlayerData.StarTower:GetNpcAffinityWeekCount()
local str = orderedFormat(ConfigTable.GetUIText("NPCAffinity_WeekCnt") or "", curCount, nMaxCount)
NovaAPI.SetTMPText(self._mapNode.TMPWeekAffinityCount, str)
NovaAPI.SetTMPText(self._mapNode.txtCollect, string.format("%d/%d", self.nCurCount, self.nTotalPlotCount))
self:RefreshContent(self.nCurNpcId)
end
function StarTowerNpcAffinityCtrl:RefreshContent(nNpcId)
self.nCurNpcId = nNpcId
local mapNpcCfg = ConfigTable.GetData("StarTowerNPC", nNpcId)
if mapNpcCfg == nil then
return
end
NovaAPI.SetVerticalNormalizedPosition(self._mapNode.rtNpcInfo, 1)
NovaAPI.SetTMPText(self._mapNode.TMPNPCName, mapNpcCfg.Name)
NovaAPI.SetTMPText(self._mapNode.TMPNpcInfo, mapNpcCfg.NPCDesc)
self:SetPngSprite(self._mapNode.imgNPC, mapNpcCfg.Image)
self._mapNode.goAffinity:Refresh(nNpcId)
self._mapNode.svAffinityList:Init(#self.mapNpcPlot[nNpcId], self, self.OnGridRefresh, self.OnGridBtnClick)
end
function StarTowerNpcAffinityCtrl:OnGridRefresh(goGrid, nIdx)
local nInstanceId = goGrid:GetInstanceID()
local objCtrl = self.mapAffinityGrid[nInstanceId]
if objCtrl == nil then
objCtrl = self:BindCtrlByNode(goGrid, "Game.UI.StarTowerBook.Affinity.NpcRelationGridCtrl")
self.mapAffinityGrid[nInstanceId] = objCtrl
end
nIdx = nIdx + 1
local mapPlot = self.mapNpcPlot[self.nCurNpcId][nIdx]
objCtrl:Refresh(mapPlot, self.mapNpcAffinityData[self.nCurNpcId])
end
function StarTowerNpcAffinityCtrl:OnGridBtnClick(goGrid, nIdx)
local mapNpcAffinityData = self.mapNpcAffinityData[self.nCurNpcId]
if mapNpcAffinityData == nil then
return
end
nIdx = nIdx + 1
local mapPlot = self.mapNpcPlot[self.nCurNpcId][nIdx]
if mapPlot.AffinityLevel <= mapNpcAffinityData.Level then
local ReceiveCallback = function(mapShow, mapChange)
EventManager.Hit(EventId.ClosePanel, PanelId.PureAvgStory)
local waitTransition = function()
UTILS.OpenReceiveByDisplayItem(mapShow, mapChange)
end
EventManager.Hit(EventId.TemporaryBlockInput, 1.5)
self:AddTimer(1, 1.5, waitTransition, true, true, true)
end
local AvgCallback = function()
PlayerData.StarTower:ReceiveNpcAffinityReward(self.nCurNpcId, mapPlot.Id, ReceiveCallback)
end
local AvgCallbackReveived = function()
EventManager.Hit(EventId.ClosePanel, PanelId.PureAvgStory)
end
if not PlayerData.StarTower:GetNpcPlotReceived(self.nCurNpcId, mapPlot.Id) then
local mapData = {
nType = AllEnum.StoryAvgType.Plot,
sAvgId = mapPlot.avgId,
nNodeId = nil,
callback = AvgCallback
}
EventManager.Hit(EventId.OpenPanel, PanelId.PureAvgStory, mapData)
else
do
local mapData = {
nType = AllEnum.StoryAvgType.Plot,
sAvgId = mapPlot.avgId,
nNodeId = nil,
callback = AvgCallbackReveived
}
EventManager.Hit(EventId.OpenPanel, PanelId.PureAvgStory, mapData)
end
end
else
local sTip = orderedFormat(ConfigTable.GetUIText("NPCAffinity_UnlockCnd") or "", mapPlot.AffinityLevel)
EventManager.Hit(EventId.OpenMessageBox, sTip)
end
end
function StarTowerNpcAffinityCtrl:UnbindAllGridNodes()
if self.mapAffinityGrid then
for goGrid, mapCtrl in pairs(self.mapAffinityGrid) do
self:UnbindCtrlByNode(mapCtrl)
end
self.mapAffinityGrid = {}
end
end
function StarTowerNpcAffinityCtrl:Back()
self:UnbindAllGridNodes()
EventManager.Hit("ChangeStarTowerBookPanel", AllEnum.StarTowerBookPanelType.Main)
end
function StarTowerNpcAffinityCtrl:OnBtnClick_NPCTab(btn, nIdx)
local nSelectNpcId = self.tbNPC[nIdx].Id
if self.nCurNpcId == nSelectNpcId then
return
end
for i = 1, 4 do
if self.nCurNpcId == self.tbNPC[i].Id then
self._mapNode.btnNpcTab[i]:SetDefault(false)
end
end
self.nCurNpcId = nSelectNpcId
self._mapNode.btnNpcTab[nIdx]:SetDefault(true)
self:RefreshContent(self.nCurNpcId)
end
function StarTowerNpcAffinityCtrl:OnBtnClick_AffinityReward(btn)
EventManager.Hit(EventId.OpenPanel, PanelId.NpcAffinityRewardPanel, self.nCurNpcId)
end
return StarTowerNpcAffinityCtrl
@@ -0,0 +1,41 @@
local EventBookTogItemCtrl = class("EventBookTogItemCtrl", BaseCtrl)
EventBookTogItemCtrl._mapNodeConfig = {
goSelect = {},
txtSelect = {sComponentName = "TMP_Text"},
goUnSelect = {},
txtUnSelect = {sComponentName = "TMP_Text"},
goLock = {},
txtLock = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Event_Lock"
},
redDotTab = {}
}
EventBookTogItemCtrl._mapEventConfig = {}
EventBookTogItemCtrl._mapRedDotConfig = {}
function EventBookTogItemCtrl:InitItem(eventData)
self.nStatus = eventData.Status
self.nEventId = eventData.Id
self._mapNode.goLock.gameObject:SetActive(self.nStatus == AllEnum.BookQuestStatus.UnComplete)
self._mapNode.goSelect.gameObject:SetActive(false)
self._mapNode.goUnSelect.gameObject:SetActive(self.nStatus ~= AllEnum.BookQuestStatus.UnComplete)
NovaAPI.SetTMPText(self._mapNode.txtSelect, eventData.CfgData.Name)
NovaAPI.SetTMPText(self._mapNode.txtUnSelect, eventData.CfgData.Name)
if self.nStatus == AllEnum.BookQuestStatus.UnComplete then
NovaAPI.SetTMPText(self._mapNode.txtSelect, ConfigTable.GetUIText("StarTower_Book_Event_Lock"))
end
RedDotManager.RegisterNode(RedDotDefine.StarTowerBook_Event_Reward, self.nEventId, self._mapNode.redDotTab)
end
function EventBookTogItemCtrl:SetSelect(bSelect)
self._mapNode.goSelect.gameObject:SetActive(bSelect)
if self.nStatus ~= AllEnum.BookQuestStatus.UnComplete then
self._mapNode.goLock.gameObject:SetActive(false)
self._mapNode.goUnSelect.gameObject:SetActive(not bSelect)
else
self._mapNode.goLock.gameObject:SetActive(not bSelect)
self._mapNode.goUnSelect.gameObject:SetActive(false)
end
end
function EventBookTogItemCtrl:OnDisable()
end
return EventBookTogItemCtrl
@@ -0,0 +1,284 @@
local StarTowerEventBookCtrl = class("StarTowerEventBookCtrl", BaseCtrl)
local sRootPath = Settings.AB_ROOT_PATH
local GameResourceLoader = require("Game.Common.Resource.GameResourceLoader")
local ResType = GameResourceLoader.ResType
local typeof = typeof
local Path = require("path")
local ResTypeAny = GameResourceLoader.ResType.Any
local Offset = CS.Actor2DOffsetData
local Actor2DManager = require("Game.Actor2D.Actor2DManager")
StarTowerEventBookCtrl._mapNodeConfig = {
tabLsv = {
sComponentName = "LoopScrollView"
},
trSv = {sNodeName = "tabLsv", sComponentName = "Transform"},
txtCollectCn = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Event_Book_Collect"
},
txtCollect = {sComponentName = "TMP_Text"},
txtEventName = {sComponentName = "TMP_Text"},
eventDescSv = {sComponentName = "ScrollRect"},
txtEventDesc = {sComponentName = "TMP_Text"},
goArea = {},
txtAreaCn = {
nCount = 2,
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Event_Book_Source"
},
txtArea = {nCount = 2, sComponentName = "TMP_Text"},
txtProc = {sComponentName = "TMP_Text"},
btnReceive = {
sComponentName = "UIButton",
callback = "OnBtnClick_Receive"
},
imgReceived = {},
txtReward = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Event_Book_Received"
},
goEventLock = {},
goEventUnlock = {},
UIParticle = {nCount = 2},
imgReward = {nCount = 2, sComponentName = "Image"},
txtRewardCount = {sComponentName = "TMP_Text"},
rtActor2D = {
sNodeName = "----Actor2D_PNG----",
sComponentName = "Transform"
},
rtTxtAreaCn2 = {
sNodeName = "txtAreaCn2",
sComponentName = "RectTransform"
},
btnReceiveAllEvent = {
sComponentName = "UIButton",
callback = "OnBtnClick_ReceiveAll"
},
TMPReceiveAllEventTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Quest_Btn_ReceiveAll"
}
}
StarTowerEventBookCtrl._mapEventConfig = {}
StarTowerEventBookCtrl._mapRedDotConfig = {}
function StarTowerEventBookCtrl:UnRegisterRedDot()
end
function StarTowerEventBookCtrl:Init()
self.nSelectIndex = 1
self.nSelectEventId = 0
self:RefreshEventList()
self:RefreshSelectEvent()
self:AddTimer(1, 0.1, function()
local nWidth = self._mapNode.rtTxtAreaCn2.sizeDelta.x
end, true, true, true)
end
function StarTowerEventBookCtrl:Back()
self:UnRegisterRedDot()
EventManager.Hit("ChangeStarTowerBookPanel", AllEnum.StarTowerBookPanelType.Main)
end
function StarTowerEventBookCtrl:RefreshSelectEvent()
local eventData = self.mapEventBook[self.nSelectIndex]
self._mapNode.goEventLock.gameObject:SetActive(eventData.Status == AllEnum.BookQuestStatus.UnComplete)
self._mapNode.goEventUnlock.gameObject:SetActive(eventData.Status ~= AllEnum.BookQuestStatus.UnComplete)
if eventData ~= nil then
NovaAPI.SetVerticalNormalizedPosition(self._mapNode.eventDescSv, 1)
NovaAPI.SetTMPText(self._mapNode.txtEventName, eventData.CfgData.Name)
NovaAPI.SetTMPText(self._mapNode.txtEventDesc, eventData.CfgData.Story)
NovaAPI.SetTMPText(self._mapNode.txtArea[1], eventData.CfgData.Source)
NovaAPI.SetTMPText(self._mapNode.txtArea[2], eventData.CfgData.Source)
NovaAPI.SetTMPText(self._mapNode.txtProc, orderedFormat(ConfigTable.GetUIText("StarTower_Event_Book_EventProc") or "", eventData.nCurProgress, eventData.nGoal))
self._mapNode.imgReceived.gameObject:SetActive(eventData.Status == AllEnum.BookQuestStatus.Received)
self._mapNode.imgReward[1].gameObject:SetActive(eventData.Status ~= AllEnum.BookQuestStatus.Received)
self._mapNode.imgReward[2].gameObject:SetActive(eventData.Status == AllEnum.BookQuestStatus.Received)
for _, v in ipairs(self._mapNode.UIParticle) do
v.gameObject:SetActive(eventData.Status == AllEnum.BookQuestStatus.Complete)
end
local nRewardId = eventData.CfgData.ItemId
local itemCfg = ConfigTable.GetData_Item(nRewardId)
if itemCfg ~= nil then
self:SetPngSprite(self._mapNode.imgReward[1], itemCfg.Icon)
self:SetPngSprite(self._mapNode.imgReward[2], itemCfg.Icon)
end
local nCount = eventData.CfgData.ItemQty
NovaAPI.SetTMPText(self._mapNode.txtRewardCount, "x" .. nCount)
local nCharId = eventData.CfgData.NPCId
local nType = eventData.CfgData.Type
if nCharId ~= nil then
local trans = self._mapNode.rtActor2D
local trPanelOffset = trans:GetChild(0)
local trOffset = trPanelOffset:GetChild(0)
local imgBody = trOffset:GetChild(0):GetComponent("Image")
local imgFace = trOffset:GetChild(1):GetComponent("Image")
local nShowPanelId = self:GetPanelId()
local tbPanelOffsetData = Actor2DManager.GetMapPanelConfig(nShowPanelId)
local x, y, s = 0, 0, 1
if tbPanelOffsetData ~= nil then
if 0 < tbPanelOffsetData.nReuse then
x = tbPanelOffsetData.v3PanelOffset.x
y = tbPanelOffsetData.v3PanelOffset.y
s = tbPanelOffsetData.v3PanelOffset.z
end
if s <= 0 then
s = 1
end
end
trPanelOffset.localPosition = Vector3(x * 100, y * 100, 0)
trPanelOffset.localScale = Vector3(s, s, 1)
local v3OffsetPos, v3OffsetScale = self:GetCharPortrait(imgBody, imgFace, nCharId, nType)
trOffset.localScale = v3OffsetScale
trOffset.localPosition = v3OffsetPos
end
end
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
NovaAPI.SetScrollRectVertical(self._mapNode.eventDescSv, true)
end
cs_coroutine.start(wait)
end
function StarTowerEventBookCtrl:GetCharPortrait(imgBody, imgFace, nCharId, nType)
local nSkinId = 0
if nType == 1 then
nSkinId = ConfigTable.GetData_Character(nCharId).DefaultSkinId
else
nSkinId = ConfigTable.GetData("StarTowerNPC", nCharId).NPCSkin
end
local GetName = function(sPortrait, Face)
local sFileFullName = Path.basename(sPortrait)
local sFileExtName = Path.extension(sPortrait)
local sFileName = string.gsub(sFileFullName, sFileExtName, "")
sFileName = string.gsub(sFileName, "_a", "")
local sBodyName = string.format("%s_%s", sFileName, "001")
local sFaceName = string.format("%s_%s", sFileName, Face)
return sBodyName, sFaceName
end
local GetSprite = function(sPortrait, sName)
local _sPath = string.format("%s/atlas_png/a/%s.png", Path.dirname(sPortrait), sName)
return self:LoadAsset(_sPath, typeof(Sprite))
end
local mapSkinData
if nType == 1 then
mapSkinData = ConfigTable.GetData("CharacterSkin", nSkinId)
else
mapSkinData = ConfigTable.GetData("NPCSkin", nSkinId)
end
if mapSkinData == nil then
return
end
local sAssetPath = mapSkinData.Portrait
local sFace = "002"
local sBodyName, sFaceName = GetName(sAssetPath, sFace)
NovaAPI.SetImageSpriteAsset(imgBody, GetSprite(sAssetPath, sBodyName))
NovaAPI.SetImageSpriteAsset(imgFace, GetSprite(sAssetPath, sFaceName))
NovaAPI.SetImageNativeSize(imgBody)
NovaAPI.SetImageNativeSize(imgFace)
local objOffset = self:LoadOffset(mapSkinData.Offset)
local nX, nY = 0, 0
local s, x, y = objOffset:GetOffsetData(self:GetPanelId(), indexOfPose("a"), true, nX, nY)
local v3OffsetPos = Vector3(x * 100, y * 100, 0)
local v3OffsetScale = Vector3(s, s, 1)
return v3OffsetPos, v3OffsetScale
end
function StarTowerEventBookCtrl:LoadOffset(sPath)
return self:LoadAsset(sPath, typeof(Offset))
end
function StarTowerEventBookCtrl:RefreshEventList()
self.mapEventBook = PlayerData.StarTowerBook:GetAllEventBookData()
for nIndex, v in ipairs(self.mapEventBook) do
if RedDotManager.GetValid(RedDotDefine.StarTowerBook_Event_Reward, v.Id) then
self.nSelectIndex = nIndex
break
end
end
for nInstanceId, objCtrl in pairs(self.mapGrids) do
self:UnbindCtrlByNode(objCtrl)
self.mapGrids[nInstanceId] = nil
end
if self.nSelectIndex == 1 then
self._mapNode.tabLsv:SetAnim(0.02)
end
self._mapNode.tabLsv:Init(#self.mapEventBook, self, self.OnRefreshGrid, self.OnGridBtnClick)
self._mapNode.tabLsv:SetScrollGridPos(self.nSelectIndex - 1, 0.1, 0)
local nAllCount = 0
local nCount = 0
local bShowAllReceive = false
for _, v in pairs(self.mapEventBook) do
nAllCount = nAllCount + 1
if v.Status ~= AllEnum.BookQuestStatus.UnComplete then
nCount = nCount + 1
end
if v.Status == AllEnum.BookQuestStatus.Complete then
bShowAllReceive = true
end
end
self._mapNode.btnReceiveAllEvent.gameObject:SetActive(bShowAllReceive)
NovaAPI.SetTMPText(self._mapNode.txtCollect, string.format("%s/%s", nCount, nAllCount))
end
function StarTowerEventBookCtrl:GetCharBgPath(nSkinId, sFace)
local sPortrait = string.format("Actor2D/Character/%s/atlas_png/a/%s_%s.png", nSkinId, nSkinId, "001")
local sFace = string.format("Actor2D/Character/%s/atlas_png/a/%s_%s.png", nSkinId, nSkinId, "002")
end
function StarTowerEventBookCtrl:OnRefreshGrid(goGrid, gridIndex)
local nInstanceID = goGrid:GetInstanceID()
if nil == self.mapGrids[nInstanceID] then
self.mapGrids[nInstanceID] = self:BindCtrlByNode(goGrid, "Game.UI.StarTowerBook.Event.EventBookTogItemCtrl")
end
local nIndex = gridIndex + 1
local eventData = self.mapEventBook[nIndex]
self.mapGrids[nInstanceID]:InitItem(eventData)
self.mapGrids[nInstanceID]:SetSelect(self.nSelectIndex == nIndex)
end
function StarTowerEventBookCtrl:OnGridBtnClick(goGrid, gridIndex)
local nIndex = gridIndex + 1
local eventData = self.mapEventBook[nIndex]
if self.nSelectEventId == eventData.Id then
return
end
local nInstanceId = goGrid:GetInstanceID()
local goSelect = self._mapNode.trSv:Find("Viewport/Content/" .. self.nSelectIndex - 1)
if goSelect then
self.mapGrids[goSelect.gameObject:GetInstanceID()]:SetSelect(false)
end
self.mapGrids[nInstanceId]:SetSelect(true)
self.nSelectIndex = nIndex
self.nSelectEventId = eventData.Id
self:RefreshSelectEvent()
end
function StarTowerEventBookCtrl:Awake()
self.nSelectEventId = 0
self.nSelectIndex = 0
self.mapGrids = {}
end
function StarTowerEventBookCtrl:OnEnable()
end
function StarTowerEventBookCtrl:OnDisable()
self:UnRegisterRedDot()
for nInstanceId, objCtrl in pairs(self.mapGrids) do
self:UnbindCtrlByNode(objCtrl)
self.mapGrids[nInstanceId] = nil
end
self.mapGrids = {}
end
function StarTowerEventBookCtrl:OnDestroy()
end
function StarTowerEventBookCtrl:OnRelease()
end
function StarTowerEventBookCtrl:OnBtnClick_Receive()
local eventData = self.mapEventBook[self.nSelectIndex]
if eventData ~= nil and eventData.Status == AllEnum.BookQuestStatus.Complete then
local callback = function()
self.mapEventBook = PlayerData.StarTowerBook:GetAllEventBookData()
self:RefreshSelectEvent()
end
PlayerData.Quest:ReceiveStarTowerEventReward(eventData.Id, callback)
end
end
function StarTowerEventBookCtrl:OnBtnClick_ReceiveAll()
local callback = function()
self.mapEventBook = PlayerData.StarTowerBook:GetAllEventBookData()
self:RefreshSelectEvent()
self._mapNode.btnReceiveAllEvent.gameObject:SetActive(false)
end
PlayerData.Quest:ReceiveStarTowerEventReward(0, callback)
end
return StarTowerEventBookCtrl
@@ -0,0 +1,63 @@
local FateCardBookItemCtrl = class("FateCardBookItemCtrl", BaseCtrl)
FateCardBookItemCtrl._mapNodeConfig = {
goLock = {},
goNormal = {},
imgFateCard = {sComponentName = "Image"},
txtFateCardName = {sComponentName = "TMP_Text"},
imgCollect = {},
imgUnCollect = {},
imgUnlock = {},
txtCollect = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Collect"
},
txtUnCollect = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_UnCollect"
},
txtUnlock = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Lock"
},
imgMask = {},
redDotCard = {},
animCard = {sNodeName = "goNormal", sComponentName = "Animator"}
}
FateCardBookItemCtrl._mapEventConfig = {}
FateCardBookItemCtrl._mapRedDotConfig = {}
function FateCardBookItemCtrl:InitItem(nId, nStatus)
self.nId = nId
local itemCfg = ConfigTable.GetData_Item(nId)
local fateCardCfg = ConfigTable.GetData("FateCard", nId)
if fateCardCfg == nil or itemCfg == nil then
return
end
local fateCardBookCfg = ConfigTable.GetData("StarTowerBookFateCard", nId)
if fateCardBookCfg == nil then
return
end
local sFrame = AllEnum.FrameType_New.StarTowerFateCard .. AllEnum.FrameColor_New[itemCfg.Rarity]
self:SetPngSprite(self._mapNode.imgFateCard, string.gsub(itemCfg.Icon, "_L_", "_S_"))
NovaAPI.SetTMPText(self._mapNode.txtFateCardName, fateCardCfg.Name)
self._mapNode.imgCollect.gameObject:SetActive(nStatus == AllEnum.FateCardBookStatus.Collect)
self._mapNode.imgUnCollect.gameObject:SetActive(nStatus == AllEnum.FateCardBookStatus.UnLock)
self._mapNode.imgUnlock.gameObject:SetActive(nStatus == AllEnum.FateCardBookStatus.Lock)
self._mapNode.goLock.gameObject:SetActive(nStatus == AllEnum.FateCardBookStatus.Lock)
self._mapNode.goNormal.gameObject:SetActive(nStatus ~= AllEnum.FateCardBookStatus.Lock)
self._mapNode.imgMask.gameObject:SetActive(nStatus == AllEnum.FateCardBookStatus.UnLock)
end
function FateCardBookItemCtrl:RegisterRedDot()
if self.nId then
RedDotManager.RegisterNode(RedDotDefine.StarTowerBook_FateCard_New, self.nId, self._mapNode.redDotCard)
end
end
function FateCardBookItemCtrl:UnRegisterRedDot()
end
function FateCardBookItemCtrl:PlayClickAnim(bClick)
if bClick then
self._mapNode.animCard:Play("CardBookItem_in")
else
self._mapNode.animCard:Play("CardBookItem_out")
end
end
return FateCardBookItemCtrl
@@ -0,0 +1,456 @@
local StarTowerFateCardBookCtrl = class("StarTowerFateCardBookCtrl", BaseCtrl)
StarTowerFateCardBookCtrl._mapNodeConfig = {
goBundle = {},
txtTitle = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_FateCard_Title_01"
},
bundleLSV = {
sComponentName = "LoopScrollView"
},
goCardList = {},
togLSV = {
sComponentName = "LoopScrollView"
},
goCardItem = {
nCount = 8,
sCtrlName = "Game.UI.StarTowerBook.FateCard.FateCardBookItemCtrl"
},
btnCard = {
nCount = 8,
sComponentName = "UIButton",
callback = "OnBtnClick_CardItem"
},
imgEmpty = {},
goRightCardList = {},
txtCollectCn = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Collect"
},
txtCollectCount = {sComponentName = "TMP_Text"},
btnReward = {
sComponentName = "UIButton",
callback = "OnBtnClick_Reward"
},
btnReceiveReward = {
sComponentName = "UIButton",
callback = "OnBtnClick_Reward"
},
btnLeft = {
sComponentName = "UIButton",
callback = "OnBtnClick_Left"
},
btnRight = {
sComponentName = "UIButton",
callback = "OnBtnClick_Right"
},
imgDotBg = {nCount = 8},
imgDot = {nCount = 8},
animPage = {sNodeName = "imgBook", sComponentName = "Animator"},
goLeftCardList = {},
goBlur = {},
goCardDetail = {},
animCardDetail = {
sNodeName = "goCardDetail",
sComponentName = "Animator"
},
btnBg = {
sComponentName = "Button",
callback = "OnBtnClick_Bg"
},
fateCardDetail = {
sCtrlName = "Game.UI.StarTower.FateCard.FateCardItemCtrl"
},
goFateCardDetail = {
sNodeName = "fateCardDetail"
},
btnToggleStarTower = {
sCtrlName = "Game.UI.TemplateEx.TemplateToggleCtrl"
},
btnToggleSurvivor = {
sCtrlName = "Game.UI.TemplateEx.TemplateToggleCtrl"
},
togST = {
sNodeName = "btnToggleStarTower",
sComponentName = "UIButton",
callback = "OnBtnClick_CardTypeStarTower"
},
togSV = {
sNodeName = "btnToggleSurvivor",
sComponentName = "UIButton",
callback = "OnBtnClick_CardTypeSurvivor"
},
txtArea = {sComponentName = "TMP_Text"},
txtTips = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Close_Tip"
},
goCardTip = {},
btnTipBg = {
sComponentName = "Button",
callback = "OnBtnClick_TipBg"
},
txtUnlockTitle = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_FateCard_Unlock_Tip"
},
txtUnlockTip = {sComponentName = "TMP_Text"},
redDotReward = {}
}
StarTowerFateCardBookCtrl._mapEventConfig = {
ReceiveFateCardBookReward = "OnEvent_ReceiveFateCardBookReward"
}
StarTowerFateCardBookCtrl._mapRedDotConfig = {}
function StarTowerFateCardBookCtrl:ResetNewRedDot(nBundleId)
if self.mapBundleList ~= nil then
if nBundleId then
local tbCardList = self.mapBundleList[nBundleId].tbCardList
if tbCardList then
for _, card in ipairs(tbCardList) do
RedDotManager.SetValid(RedDotDefine.StarTowerBook_FateCard_New, card.nId, false)
end
end
else
for _, v in pairs(self.mapBundleList) do
for _, card in ipairs(v.tbCardList) do
RedDotManager.SetValid(RedDotDefine.StarTowerBook_FateCard_New, card.nId, false)
end
end
end
end
end
function StarTowerFateCardBookCtrl:Init()
self.animRoot:Play("StarTowerBookFateCard_in", 0, 0)
CS.WwiseAudioManager.Instance:PlaySound("ui_rogueBook_page_drag")
self.nBundleId = 0
self.nSelectIndex = 0
self.nCurPage = 0
self.nCurCardId = 0
self:RefreshBundleList()
self._mapNode.btnToggleStarTower:SetText(ConfigTable.GetUIText("LevelMenu_Startower"))
self._mapNode.btnToggleSurvivor:SetText(ConfigTable.GetUIText("LevelMenu_Vampire"))
end
function StarTowerFateCardBookCtrl:Back()
if self.bFateCardList then
self.bFateCardList = false
self:ResetNewRedDot()
self._mapNode.goBundle.gameObject:SetActive(true)
self._mapNode.goCardList.gameObject:SetActive(false)
self._mapNode.goCardDetail.gameObject:SetActive(false)
self._mapNode.goCardTip.gameObject:SetActive(false)
self._mapNode.goBlur.gameObject:SetActive(false)
else
EventManager.Hit("ChangeStarTowerBookPanel", AllEnum.StarTowerBookPanelType.Main)
end
end
function StarTowerFateCardBookCtrl:RefreshBundleList()
self._mapNode.goBundle.gameObject:SetActive(true)
self._mapNode.goCardList.gameObject:SetActive(false)
self._mapNode.goCardDetail.gameObject:SetActive(false)
self._mapNode.goCardTip.gameObject:SetActive(false)
self._mapNode.goBlur.gameObject:SetActive(false)
self.mapBundleList = PlayerData.StarTowerBook:GetAllFateCardBundle()
self.mapSortBundleList = {}
self.mapBundleTogList = {}
for nId, v in pairs(self.mapBundleList) do
table.sort(v.tbCardList, function(a, b)
return a.nSort < b.nSort
end)
table.insert(self.mapSortBundleList, {
nBundleId = nId,
tbCardList = v.tbCardList,
nSort = v.nSort
})
end
table.sort(self.mapSortBundleList, function(a, b)
return a.nSort < b.nSort
end)
self.mapBundleTogList = clone(self.mapSortBundleList)
local nCount = #self.mapSortBundleList
if nCount < 8 then
for i = nCount + 1, 8 do
table.insert(self.mapSortBundleList, {bEmpty = true})
end
end
self._mapNode.bundleLSV:Init(#self.mapSortBundleList, self, self.OnBundleGridRefresh, self.OnBundleGridClick)
end
function StarTowerFateCardBookCtrl:SelectBundle(bKeepPos, bSetScrollPos)
self.animRoot:Play("StarTowerBookFateCard_in1", 0, 0)
self.bFateCardList = true
self._mapNode.goBundle.gameObject:SetActive(false)
self._mapNode.goCardList.gameObject:SetActive(true)
self._mapNode.goCardDetail.gameObject:SetActive(false)
self._mapNode.goCardTip.gameObject:SetActive(false)
self._mapNode.goBlur.gameObject:SetActive(false)
self._mapNode.togLSV:Init(#self.mapBundleTogList, self, self.OnTogGridRefresh, self.OnTogGridClick, bKeepPos)
if bSetScrollPos then
self._mapNode.togLSV:SetScrollGridPos(self.nSelectIndex - 1, 0.1, 0)
end
self.mapCardList = self.mapBundleList[self.nBundleId].tbCardList
self.nCurPage = 1
self.nAllPage = math.floor(#self.mapCardList % 8 == 0 and #self.mapCardList / 8 or #self.mapCardList / 8 + 1)
self:RefreshPageList()
self:RefreshLeftPage()
self:RefreshRightPage()
for k, v in ipairs(self._mapNode.imgDotBg) do
v.gameObject:SetActive(k <= self.nAllPage and 1 < self.nAllPage)
end
local nCount = 0
for _, v in ipairs(self.mapCardList) do
if v.nStatus == AllEnum.FateCardBookStatus.Collect then
nCount = nCount + 1
end
end
local bCanReceive = RedDotManager.GetValid(RedDotDefine.StarTowerBook_FateCard_Reward, self.nBundleId)
self._mapNode.btnReward.gameObject:SetActive(not bCanReceive)
self._mapNode.btnReceiveReward.gameObject:SetActive(bCanReceive)
NovaAPI.SetTMPText(self._mapNode.txtCollectCount, string.format("%s/%s", nCount, #self.mapCardList))
RedDotManager.RegisterNode(RedDotDefine.StarTowerBook_FateCard_Reward, self.nBundleId, self._mapNode.redDotReward)
end
function StarTowerFateCardBookCtrl:RefreshPageList()
self._mapNode.btnLeft.gameObject:SetActive(self.nCurPage > 1)
self._mapNode.btnRight.gameObject:SetActive(self.nCurPage < self.nAllPage)
for k, v in ipairs(self._mapNode.imgDot) do
v.gameObject:SetActive(k == self.nCurPage)
end
end
function StarTowerFateCardBookCtrl:RefreshLeftPage()
local nStartIndex = (self.nCurPage - 1) * 8
for i = 1, 4 do
local item = self._mapNode.goCardItem[i]
local nIndex = nStartIndex + i
item.gameObject:SetActive(self.mapCardList[nIndex] ~= nil)
if self.mapCardList[nIndex] ~= nil then
item:InitItem(self.mapCardList[nIndex].nId, self.mapCardList[nIndex].nStatus)
item:RegisterRedDot()
end
end
end
function StarTowerFateCardBookCtrl:RefreshRightPage()
local bEmpty = true
local nStartIndex = (self.nCurPage - 1) * 8
for i = 5, 8 do
local item = self._mapNode.goCardItem[i]
local nIndex = nStartIndex + i
item.gameObject:SetActive(self.mapCardList[nIndex] ~= nil)
if self.mapCardList[nIndex] ~= nil then
bEmpty = false
item:InitItem(self.mapCardList[nIndex].nId, self.mapCardList[nIndex].nStatus)
item:RegisterRedDot()
end
end
self._mapNode.imgEmpty.gameObject:SetActive(bEmpty)
end
function StarTowerFateCardBookCtrl:OnTogGridRefresh(goGrid, nIndex)
local imgBundle = goGrid.transform:Find("btnGrid/AnimRoot/imgBundle"):GetComponent("Image")
local imgNormal = goGrid.transform:Find("btnGrid/AnimRoot/imgNormal")
local txtNormal = goGrid.transform:Find("btnGrid/AnimRoot/imgNormal/txtNormal"):GetComponent("TMP_Text")
local imgChoose = goGrid.transform:Find("btnGrid/AnimRoot/imgChoose")
local txtChoose = goGrid.transform:Find("btnGrid/AnimRoot/imgChoose/txtChoose"):GetComponent("TMP_Text")
local redDot = goGrid.transform:Find("btnGrid/AnimRoot/redDotTog")
local nId = self.mapBundleTogList[nIndex + 1].nBundleId
local bundleCfg = ConfigTable.GetData("StarTowerBookFateCardBundle", nId)
if bundleCfg ~= nil then
self:SetPngSprite(imgBundle, bundleCfg.Icon)
NovaAPI.SetTMPText(txtNormal, bundleCfg.ShortName)
NovaAPI.SetTMPText(txtChoose, bundleCfg.ShortName)
end
imgChoose.gameObject:SetActive(nId == self.nBundleId)
imgNormal.gameObject:SetActive(nId ~= self.nBundleId)
RedDotManager.RegisterNode(RedDotDefine.StarTowerBook_FateCard_Bundle_Tog, nId, redDot, nil, nil, true)
end
function StarTowerFateCardBookCtrl:OnTogGridClick(goGrid, nIndex)
if nIndex + 1 == self.nSelectIndex then
return
end
local goSelect = self._mapNode.togLSV.gameObject.transform:Find("Viewport/Content/" .. self.nSelectIndex - 1)
if goSelect then
local imgChoose = goSelect.transform:Find("btnGrid/AnimRoot/imgChoose")
imgChoose.gameObject:SetActive(false)
end
if self.nBundleId ~= 0 then
self:ResetNewRedDot(self.nBundleId)
end
self.nSelectIndex = nIndex + 1
self.nBundleId = self.mapBundleTogList[nIndex + 1].nBundleId
local imgChoose = goGrid.transform:Find("btnGrid/AnimRoot/imgChoose")
imgChoose.gameObject:SetActive(true)
self:SelectBundle(true)
end
function StarTowerFateCardBookCtrl:OnBundleGridRefresh(goGrid, nIndex)
local goItem = goGrid.transform:Find("btnGrid/AnimRoot/goBundleItem")
local imgNormal = goItem:Find("imgNormal")
local imgBundle = imgNormal:Find("imgBundle"):GetComponent("Image")
local imgBundleS = imgNormal:Find("txtBundle/imgBundleS"):GetComponent("Image")
local txtBundle = imgNormal:Find("txtBundle"):GetComponent("TMP_Text")
local txtCount = imgNormal:Find("imgCount/txtCount"):GetComponent("TMP_Text")
local imgEmpty = goItem:Find("imgEmpty")
local txtEmpty = imgEmpty:Find("txtEmpty"):GetComponent("TMP_Text")
NovaAPI.SetTMPText(txtEmpty, ConfigTable.GetUIText("StarTower_Book_FateCard_Empty"))
local mapData = self.mapSortBundleList[nIndex + 1]
imgNormal.gameObject:SetActive(not mapData.bEmpty)
imgEmpty.gameObject:SetActive(mapData.bEmpty)
if not mapData.bEmpty then
local nBundleId = self.mapSortBundleList[nIndex + 1].nBundleId
local bundleCfg = ConfigTable.GetData("StarTowerBookFateCardBundle", nBundleId)
if bundleCfg ~= nil then
self:SetPngSprite(imgBundle, bundleCfg.Icon .. AllEnum.FateCardBundleIcon.L)
self:SetPngSprite(imgBundleS, bundleCfg.Icon)
NovaAPI.SetTMPText(txtBundle, bundleCfg.ShortName)
end
local mapCardList = self.mapBundleList[nBundleId].tbCardList
local nCount = 0
for _, v in ipairs(mapCardList) do
if v.nStatus == AllEnum.FateCardBookStatus.Collect then
nCount = nCount + 1
end
end
NovaAPI.SetTMPText(txtCount, string.format("%s/%s", nCount, #mapCardList))
local redDot = imgNormal:Find("redDotBundle")
RedDotManager.RegisterNode(RedDotDefine.StarTowerBook_FateCard_Bundle, nBundleId, redDot, nil, nil, true)
end
end
function StarTowerFateCardBookCtrl:OnBundleGridClick(goGrid, nIndex)
local mapBundle = self.mapSortBundleList[nIndex + 1]
if mapBundle ~= nil and not mapBundle.bEmpty then
self.nBundleId = mapBundle.nBundleId
self.nSelectIndex = nIndex + 1
self:SelectBundle(false, true)
end
end
function StarTowerFateCardBookCtrl:Awake()
self.animRoot = self.gameObject:GetComponent("Animator")
end
function StarTowerFateCardBookCtrl:FadeIn()
end
function StarTowerFateCardBookCtrl:FadeOut()
end
function StarTowerFateCardBookCtrl:OnEnable()
end
function StarTowerFateCardBookCtrl:OnDisable()
if self.bFateCardList then
self:ResetNewRedDot()
end
end
function StarTowerFateCardBookCtrl:OnDestroy()
end
function StarTowerFateCardBookCtrl:OnRelease()
end
function StarTowerFateCardBookCtrl:OnBtnClick_Left()
if self.nCurPage <= 1 then
return
end
self.nCurPage = self.nCurPage - 1
self._mapNode.animPage:Play("FlipBook_Right", 0, 0)
self:AddTimer(1, 0.3, function()
self:RefreshRightPage()
end, true, true, true, nil)
self:RefreshPageList()
self:RefreshLeftPage()
end
function StarTowerFateCardBookCtrl:OnBtnClick_Right()
if self.nCurPage >= self.nAllPage then
return
end
self.nCurPage = self.nCurPage + 1
self._mapNode.animPage:Play("FlipBook_Left", 0, 0)
self:AddTimer(1, 0.1, function()
self:RefreshLeftPage()
end, true, true, true, nil)
self:RefreshPageList()
self:RefreshRightPage()
end
function StarTowerFateCardBookCtrl:OnBtnClick_Reward()
EventManager.Hit("OpenStarTowerBookQuest", self.nBundleId)
end
function StarTowerFateCardBookCtrl:OnBtnClick_Bg()
self._mapNode.animCardDetail:Play("goCardDetail_out")
local nAnimLen = NovaAPI.GetAnimClipLength(self._mapNode.animCardDetail, {
"goCardDetail_out"
})
self:AddTimer(1, nAnimLen, function()
self._mapNode.goCardDetail.gameObject:SetActive(false)
self._mapNode.goBlur.gameObject:SetActive(false)
if self._mapNode.goCardItem[self.nClickIndex] ~= nil then
end
end, true, true, true)
EventManager.Hit(EventId.TemporaryBlockInput, nAnimLen)
end
function StarTowerFateCardBookCtrl:OnBtnClick_TipBg()
self._mapNode.goCardTip.gameObject:SetActive(false)
self._mapNode.goBlur.gameObject:SetActive(false)
end
function StarTowerFateCardBookCtrl:OnBtnClick_CardItem(btn, nIdx)
local nIndex = (self.nCurPage - 1) * 8 + nIdx
local cardData = self.mapCardList[nIndex]
if cardData == nil then
return
end
self.nCurCardId = cardData.nId
local cardCfg = ConfigTable.GetData("StarTowerBookFateCard", cardData.nId)
if cardCfg == nil then
return
end
if cardData.nStatus == AllEnum.FateCardBookStatus.Lock then
NovaAPI.SetTMPText(self._mapNode.txtUnlockTip, cardCfg.UnlockTip)
self._mapNode.goCardTip.gameObject:SetActive(false)
self._mapNode.goBlur.gameObject:SetActive(true)
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
self._mapNode.goCardTip.gameObject:SetActive(true)
end
cs_coroutine.start(wait)
else
local animFinishFunc = function()
RedDotManager.SetValid(RedDotDefine.StarTowerBook_FateCard_New, cardData.nId, false)
if cardData.nStatus == AllEnum.FateCardBookStatus.Lock then
NovaAPI.SetTMPText(self._mapNode.txtUnlockTip, cardCfg.UnlockTip)
self._mapNode.goCardTip.gameObject:SetActive(false)
self._mapNode.goBlur.gameObject:SetActive(true)
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
self._mapNode.goCardTip.gameObject:SetActive(true)
end
cs_coroutine.start(wait)
else
self._mapNode.goCardDetail.gameObject:SetActive(false)
self._mapNode.goBlur.gameObject:SetActive(true)
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
self._mapNode.goCardDetail.gameObject:SetActive(true)
end
cs_coroutine.start(wait)
EventManager.Hit(EventId.TemporaryBlockInput, 0.5)
self:OnBtnClick_CardTypeSurvivor()
NovaAPI.SetTMPText(self._mapNode.txtArea, ConfigTable.GetUIText("StarTower_Event_Book_Source") .. cardCfg.Source)
end
end
self.nClickIndex = nIdx
if self._mapNode.goCardItem[nIdx] ~= nil then
self:AddTimer(1, 0.15, animFinishFunc, true, true, true)
EventManager.Hit(EventId.TemporaryBlockInput, 0.15)
end
end
end
function StarTowerFateCardBookCtrl:OnBtnClick_CardTypeStarTower()
self._mapNode.fateCardDetail = self:BindCtrlByNode(self._mapNode.goFateCardDetail, "Game.UI.StarTower.FateCard.FateCardItemCtrl")
if self.nCurCardId and self.nCurCardId ~= 0 then
self._mapNode.fateCardDetail:SetFateCardItem(self.nCurCardId)
end
self._mapNode.btnToggleStarTower:SetDefault(true)
self._mapNode.btnToggleSurvivor:SetDefault(false)
end
function StarTowerFateCardBookCtrl:OnBtnClick_CardTypeSurvivor()
self._mapNode.fateCardDetail = self:BindCtrlByNode(self._mapNode.goFateCardDetail, "Game.UI.VampireSurvivor.FateCardItemCtrl")
if self.nCurCardId and self.nCurCardId ~= 0 then
self._mapNode.fateCardDetail:SetFateCardItem(self.nCurCardId)
end
self._mapNode.btnToggleStarTower:SetDefault(false)
self._mapNode.btnToggleSurvivor:SetDefault(true)
end
function StarTowerFateCardBookCtrl:OnEvent_ReceiveFateCardBookReward()
local bCanReceive = RedDotManager.GetValid(RedDotDefine.StarTowerBook_FateCard_Reward, self.nBundleId)
self._mapNode.btnReward.gameObject:SetActive(not bCanReceive)
self._mapNode.btnReceiveReward.gameObject:SetActive(bCanReceive)
end
return StarTowerFateCardBookCtrl
@@ -0,0 +1,59 @@
local PotentialBookCharItemCtrl = class("PotentialBookCharItemCtrl", BaseCtrl)
PotentialBookCharItemCtrl._mapNodeConfig = {
imgNormal = {},
imgChar = {sComponentName = "Image"},
imgLockMask = {sComponentName = "Image"},
goUnlock = {},
txtName = {sComponentName = "TMP_Text"},
txtCollect = {sComponentName = "TMP_Text"},
txtLock = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Char_Lock"
},
imgEmpty = {},
txtEmpty = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_FateCard_Empty"
},
redDotChar = {}
}
PotentialBookCharItemCtrl._mapEventConfig = {}
PotentialBookCharItemCtrl._mapRedDotConfig = {}
function PotentialBookCharItemCtrl:InitItem(nCharId)
self.nCharId = nCharId
self.nElement = 0
local bUnlock = PlayerData.Char:CheckCharUnlock(nCharId)
self._mapNode.imgEmpty.gameObject:SetActive(nCharId == 0)
self._mapNode.imgNormal.gameObject:SetActive(nCharId ~= 0)
self._mapNode.imgNormal.gameObject:SetActive(nCharId ~= 0)
self._mapNode.imgLockMask.gameObject:SetActive(nCharId ~= 0 and not bUnlock)
self._mapNode.goUnlock.gameObject:SetActive(nCharId ~= 0 and bUnlock)
self._mapNode.imgLockMask.gameObject:SetActive(not bUnlock)
self._mapNode.imgChar.gameObject:SetActive(bUnlock)
if nCharId ~= 0 then
local mapCharCfg = ConfigTable.GetData_Character(nCharId)
if mapCharCfg ~= nil then
self.nElement = mapCharCfg.EET
NovaAPI.SetTMPText(self._mapNode.txtName, mapCharCfg.Name)
local nSkinId = mapCharCfg.DefaultSkinId
local mapSkin = ConfigTable.GetData_CharacterSkin(nSkinId)
self:SetPngSprite(self._mapNode.imgChar, mapSkin.Icon .. AllEnum.CharHeadIconSurfix.GC)
self:SetPngSprite(self._mapNode.imgLockMask, mapSkin.Icon .. AllEnum.CharHeadIconSurfix.GC)
self:RefreshCount()
end
end
RedDotManager.RegisterNode(RedDotDefine.StarTowerBook_Potential_Char, {
self.nElement,
self.nCharId
}, self._mapNode.redDotChar, nil, nil, true)
end
function PotentialBookCharItemCtrl:RefreshCount()
local nCount, nAllCount = PlayerData.StarTowerBook:GetCharPotentialCount(self.nCharId)
NovaAPI.SetTMPText(self._mapNode.txtCollect, string.format("%s/%s", nCount, nAllCount))
end
function PotentialBookCharItemCtrl:Awake()
self.tbRedDotRegister = {}
end
function PotentialBookCharItemCtrl:OnDisable()
end
return PotentialBookCharItemCtrl
@@ -0,0 +1,79 @@
local PotentialBookItemCtrl = class("PotentialBookItemCtrl", BaseCtrl)
PotentialBookItemCtrl._mapNodeConfig = {
goNormal = {},
imgRare = {sComponentName = "Image"},
goIcon = {
sCtrlName = "Game.UI.StarTower.Potential.PotentialIconCtrl"
},
txtName = {sComponentName = "TMP_Text"},
goSpecial = {},
imgSpIcon = {sComponentName = "Image"},
txtSpName = {sComponentName = "TMP_Text"},
imgMask = {},
imgUnCollect = {},
txtUnCollect = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_UnCollect"
},
imgCollect = {},
txtCollect = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Collect"
},
imgCollectLevel = {},
txtLevelCn = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Collect_Level"
},
txtLevel = {sComponentName = "TMP_Text"},
redDotCard = {},
animCard = {sNodeName = "CardRoot", sComponentName = "Animator"}
}
PotentialBookItemCtrl._mapEventConfig = {}
PotentialBookItemCtrl._mapRedDotConfig = {}
function PotentialBookItemCtrl:InitItem(nPotentialId, nLevel)
self.nId = nPotentialId
local itemCfg = ConfigTable.GetData_Item(nPotentialId)
local potentialCfg = ConfigTable.GetData("Potential", nPotentialId)
if potentialCfg == nil or itemCfg == nil then
return
end
local bSpecial = itemCfg.Stype == GameEnum.itemStype.SpecificPotential
self._mapNode.goNormal.gameObject:SetActive(not bSpecial)
self._mapNode.goSpecial.gameObject:SetActive(bSpecial)
if not bSpecial then
self:SetNormalPotential(itemCfg, potentialCfg)
else
self:SetSpecialPotential(itemCfg, potentialCfg)
end
self._mapNode.imgUnCollect.gameObject:SetActive(nLevel == 0)
self._mapNode.imgCollect.gameObject:SetActive(0 < nLevel and bSpecial)
self._mapNode.imgCollectLevel.gameObject:SetActive(0 < nLevel and not bSpecial)
self._mapNode.imgMask.gameObject:SetActive(nLevel == 0)
if 0 < nLevel and not bSpecial then
NovaAPI.SetTMPText(self._mapNode.txtLevel, nLevel)
end
end
function PotentialBookItemCtrl:SetNormalPotential(itemCfg, potentialCfg)
local sFrame = AllEnum.FrameType_New.PotentialS .. (AllEnum.FrameColor_New[itemCfg.Rarity] + 4 | 0)
self:SetAtlasSprite(self._mapNode.imgRare, "12_rare", sFrame)
self._mapNode.goIcon:SetIcon(potentialCfg.Id)
NovaAPI.SetTMPText(self._mapNode.txtName, itemCfg.Title)
end
function PotentialBookItemCtrl:SetSpecialPotential(itemCfg, potentialCfg)
NovaAPI.SetTMPText(self._mapNode.txtSpName, itemCfg.Title)
self:SetPngSprite(self._mapNode.imgSpIcon, itemCfg.Icon .. AllEnum.PotentialIconSurfix.A)
end
function PotentialBookItemCtrl:RegisterRedDot()
if self.nId ~= nil then
RedDotManager.RegisterNode(RedDotDefine.StarTowerBook_Potential_New, self.nId, self._mapNode.redDotCard)
end
end
function PotentialBookItemCtrl:PlayClickAnim(bClick)
if bClick then
self._mapNode.animCard:Play("CardBookItem_in")
else
self._mapNode.animCard:Play("CardBookItem_out")
end
end
return PotentialBookItemCtrl
@@ -0,0 +1,533 @@
local StarTowerPotentialBookCtrl = class("StarTowerPotentialBookCtrl", BaseCtrl)
StarTowerPotentialBookCtrl._mapNodeConfig = {
goCharList = {},
txtTitle = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Potential_Title_01"
},
charLSV = {
sComponentName = "LoopScrollView"
},
tab = {
nCount = 7,
sCtrlName = "Game.UI.TemplateEx.TemplateTabCtrl"
},
btnTab = {
nCount = 7,
sComponentName = "UIButton",
callback = "OnBtnClick_Tab"
},
goPotentialList = {},
txtCollectCn = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Collect"
},
txtCollectCount = {sComponentName = "TMP_Text"},
btnReward = {
sComponentName = "UIButton",
callback = "OnBtnClick_Reward"
},
btnReceiveReward = {
sComponentName = "UIButton",
callback = "OnBtnClick_Reward"
},
txtCharName = {sComponentName = "TMP_Text"},
imgChar = {sComponentName = "Image"},
goAssist = {},
goMain = {},
goMainSelect = {},
goAssistSelect = {},
txtAssist = {
nCount = 2,
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Char_Assist"
},
txtMain = {
nCount = 2,
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Char_Main"
},
btnSwitch = {
sComponentName = "UIButton",
callback = "OnBtnClick_Switch"
},
txtBtnSwitch = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Potential_Switch"
},
animPage = {sNodeName = "imgBook", sComponentName = "Animator"},
imgNormalTitle = {nCount = 2},
imgSpecialTitle = {},
txtNormalTitle = {
nCount = 2,
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Potential_Normal"
},
txtSpecialTitle = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Potential_Special"
},
imgEmpty = {},
btnLeft = {
sComponentName = "UIButton",
callback = "OnBtnClick_Left"
},
btnRight = {
sComponentName = "UIButton",
callback = "OnBtnClick_Right"
},
goPotentialBookItem = {
nCount = 8,
sNodeName = "PotentialBookItem",
sCtrlName = "Game.UI.StarTowerBook.Potential.PotentialBookItemCtrl"
},
btnItem = {
nCount = 8,
sComponentName = "UIButton",
callback = "OnBtnClick_Item"
},
imgDotBg = {nCount = 8},
imgDot = {nCount = 8},
goLeftPotentialList = {},
goRightPotentialList = {},
goPotentialDetail = {},
animDetail = {sNodeName = "goDetail", sComponentName = "Animator"},
goBlur = {},
goDetail = {},
btnBg = {
sComponentName = "Button",
callback = "OnBtnClick_Bg"
},
potentialDetail = {
sCtrlName = "Game.UI.StarTower.Potential.PotentialCardItemCtrl"
},
txtTips = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Close_Tip"
},
btnChangeDesc = {
sComponentName = "UIButton",
callback = "OnBtnClick_ChangeDesc"
},
txtDescChange = {
sComponentName = "TMP_Text",
sLanguageId = "Potential_Change_Desc"
},
imgSwitchOn = {},
imgSwitchOff = {},
redDotReward = {}
}
StarTowerPotentialBookCtrl._mapEventConfig = {
PotentialBookDataChange = "OnEvent_PotentialBookDataChange",
ReceivePotentialBookReward = "OnEvent_ReceivePotentialBookReward"
}
StarTowerPotentialBookCtrl._mapRedDotConfig = {}
local char_sv_min_item_count = 8
local elementSort = {
[1] = GameEnum.elementType.SE,
[2] = GameEnum.elementType.FE,
[3] = GameEnum.elementType.AE,
[4] = GameEnum.elementType.WE,
[5] = GameEnum.elementType.LE,
[6] = GameEnum.elementType.DE
}
function StarTowerPotentialBookCtrl:ResetNewRedDot()
if self.mapCurPotentialList ~= nil then
for _, v in ipairs(self.mapCurPotentialList) do
RedDotManager.SetValid(RedDotDefine.StarTowerBook_Potential_New, v.nId, false)
end
end
end
function StarTowerPotentialBookCtrl:Init()
self.animRoot:Play("StarTowerBookPotential_in", 0, 0)
CS.WwiseAudioManager.Instance:PlaySound("ui_rogueBook_page_drag")
self.bPotentialList = false
self._mapNode.goCharList.gameObject:SetActive(true)
self._mapNode.goPotentialList.gameObject:SetActive(false)
self._mapNode.goPotentialDetail.gameObject:SetActive(false)
self._mapNode.goBlur.gameObject:SetActive(false)
self.mapPotentialBrief = PlayerData.StarTowerBook:GetCharPotentialBriefBook()
self:RefreshTab()
for k, v in ipairs(self._mapNode.tab) do
local imgLock = v.gameObject.transform:Find(string.format("btnTab%s/AnimRoot/imgLock", k))
if self.tbTabs[k] ~= nil and self.tbTabs[k].Type ~= 0 then
local nType = self.tbTabs[k].Type
local nCount = 0
for _, data in ipairs(self.mapPotentialBrief) do
local mapCharCfg = ConfigTable.GetData_Character(data.nCharId)
if mapCharCfg ~= nil and mapCharCfg.EET == nType then
nCount = nCount + 1
break
end
end
self.tbTabs[k].Lock = nCount == 0
imgLock.gameObject:SetActive(nCount == 0)
else
imgLock.gameObject:SetActive(false)
end
end
self:RefreshCharList()
end
function StarTowerPotentialBookCtrl:Back()
if self.bPotentialList then
self:ResetNewRedDot()
self._mapNode.goCharList.gameObject:SetActive(true)
self._mapNode.goPotentialList.gameObject:SetActive(false)
self._mapNode.goPotentialDetail.gameObject:SetActive(false)
self._mapNode.goBlur.gameObject:SetActive(false)
self.bPotentialList = false
else
EventManager.Hit("ChangeStarTowerBookPanel", AllEnum.StarTowerBookPanelType.Main)
end
end
function StarTowerPotentialBookCtrl:InitTab()
self.tbTabs = {}
table.insert(self.tbTabs, {
Sort = 0,
Name = "StarTower_Book_Char_Tab_All",
Type = 0,
Lock = false
})
for k, v in ipairs(elementSort) do
table.insert(self.tbTabs, {
Sort = k,
Name = "T_Element_Attr_" .. v,
Type = v,
Lock = false
})
end
table.sort(self.tbTabs, function(a, b)
return a.Sort < b.Sort
end)
for k, v in ipairs(self._mapNode.tab) do
if self.tbTabs[k] ~= nil then
v:SetText(ConfigTable.GetUIText(self.tbTabs[k].Name))
if self.tbTabs[k].Type ~= 0 then
local imgTab = v.gameObject.transform:Find(string.format("btnTab%s/AnimRoot/imgTab", k)):GetComponent("Image")
local sName = AllEnum.ElementIconType.Icon .. self.tbTabs[k].Type
self:SetAtlasSprite(imgTab, "12_rare", sName)
end
local redDot = v.gameObject.transform:Find(string.format("btnTab%s/AnimRoot/redDotTab", k))
RedDotManager.RegisterNode(RedDotDefine.StarTowerBook_Potential_Element, self.tbTabs[k].Type, redDot.gameObject)
end
end
end
function StarTowerPotentialBookCtrl:RefreshCharList()
self.mapCurChar = {}
if self.nCurTab == 1 then
self.mapCurChar = clone(self.mapPotentialBrief)
else
for _, v in ipairs(self.mapPotentialBrief) do
local mapCharCfg = ConfigTable.GetData_Character(v.nCharId)
if mapCharCfg ~= nil and mapCharCfg.EET == self.tbTabs[self.nCurTab].Type then
table.insert(self.mapCurChar, v)
end
end
end
if #self.mapCurChar < char_sv_min_item_count then
for i = #self.mapCurChar + 1, char_sv_min_item_count do
table.insert(self.mapCurChar, {nCharId = 0})
end
end
for nInstanceId, objCtrl in pairs(self.mapCharGrids) do
self:UnbindCtrlByNode(objCtrl)
self.mapCharGrids[nInstanceId] = nil
end
self._mapNode.charLSV:Init(#self.mapCurChar, self, self.OnCharRefreshGrid, self.OnCharGridBtnClick, false, self.GetGridPageCount)
end
function StarTowerPotentialBookCtrl:OnCharRefreshGrid(goGrid, gridIndex)
local nInstanceID = goGrid:GetInstanceID()
if self.mapCharGrids[nInstanceID] == nil then
self.mapCharGrids[nInstanceID] = self:BindCtrlByNode(goGrid, "Game.UI.StarTowerBook.Potential.PotentialBookCharItemCtrl")
end
local nIdx = gridIndex + 1
local mapCharData = self.mapCurChar[nIdx]
self.mapCharGrids[nInstanceID]:InitItem(mapCharData.nCharId, mapCharData.nCount, mapCharData.nAllCount)
end
function StarTowerPotentialBookCtrl:OnCharGridBtnClick(goGrid, gridIndex)
local nIndex = gridIndex + 1
local mapCharData = self.mapCurChar[nIndex]
if mapCharData.nCharId ~= 0 then
if mapCharData.nUnlock == 0 then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("StarTower_Book_Char_Lock_Tip"))
return
else
self.nCharId = mapCharData.nCharId
local callback = function()
self:InitPotentialList()
end
PlayerData.StarTowerBook:TryGetCharPotentialBook(mapCharData.nCharId, callback)
end
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("StarTower_Book_Char_Empty"))
end
end
function StarTowerPotentialBookCtrl:RefreshTab()
for k, v in ipairs(self._mapNode.tab) do
local nState = self:GetTabState(k)
v:SetSelect(k == self.nCurTab, nState)
if k == self.nCurTab and 1 < k then
self._mapNode.tab[k - 1]:SetLine(false)
end
end
end
function StarTowerPotentialBookCtrl:GetTabState(nCurTab)
local nState = 2
if nCurTab == 1 then
nState = 1
elseif nCurTab == #self.tbTabs then
nState = 3
end
return nState
end
function StarTowerPotentialBookCtrl:InitPotentialList()
self.animRoot:Play("StarTowerBookPotential_in1", 0, 0)
CS.WwiseAudioManager.Instance:PlaySound("ui_rogueBook_char_menu")
self.bPotentialList = true
self._mapNode.goCharList.gameObject:SetActive(false)
self._mapNode.goPotentialList.gameObject:SetActive(true)
self._mapNode.goPotentialDetail.gameObject:SetActive(false)
self._mapNode.goBlur.gameObject:SetActive(false)
local mapCharCfg = ConfigTable.GetData_Character(self.nCharId)
if mapCharCfg ~= nil then
NovaAPI.SetTMPText(self._mapNode.txtCharName, mapCharCfg.Name)
local nSkinId = mapCharCfg.DefaultSkinId
local mapSkin = ConfigTable.GetData_CharacterSkin(nSkinId)
if mapSkin ~= nil then
self:SetPngSprite(self._mapNode.imgChar, mapSkin.Icon .. AllEnum.CharHeadIconSurfix.XL)
end
end
self.mapPotentialList = PlayerData.StarTowerBook:GetAllCharPotential(self.nCharId)
local nCount, nAllCount = PlayerData.StarTowerBook:GetCharPotentialCount(self.nCharId)
NovaAPI.SetTMPText(self._mapNode.txtCollectCount, string.format("%s/%s", nCount, nAllCount))
self.bMasterPotential = true
self.nCurPage = 0
self:SwitchPotentialType()
local bCanReceive = RedDotManager.GetValid(RedDotDefine.StarTowerBook_Potential_Reward, {
mapCharCfg.EET,
self.nCharId
})
self._mapNode.btnReward.gameObject:SetActive(not bCanReceive)
self._mapNode.btnReceiveReward.gameObject:SetActive(bCanReceive)
local mapCharCfg = ConfigTable.GetData_Character(self.nCharId)
if mapCharCfg ~= nil then
RedDotManager.RegisterNode(RedDotDefine.StarTowerBook_Potential_Reward, {
mapCharCfg.EET,
self.nCharId
}, self._mapNode.redDotReward)
end
end
function StarTowerPotentialBookCtrl:SwitchPotentialType()
self._mapNode.goAssist.gameObject:SetActive(self.bMasterPotential)
self._mapNode.goAssistSelect.gameObject:SetActive(not self.bMasterPotential)
self._mapNode.goMain.gameObject:SetActive(not self.bMasterPotential)
self._mapNode.goMainSelect.gameObject:SetActive(self.bMasterPotential)
self.mapCurPotentialList = {}
if self.bMasterPotential then
for _, v in ipairs(self.mapPotentialList.MasterSpecificIds) do
table.insert(self.mapCurPotentialList, v)
end
for _, v in ipairs(self.mapPotentialList.MasterNormalIds) do
table.insert(self.mapCurPotentialList, v)
end
else
for _, v in ipairs(self.mapPotentialList.AssistSpecificIds) do
table.insert(self.mapCurPotentialList, v)
end
for _, v in ipairs(self.mapPotentialList.AssistNormalIds) do
table.insert(self.mapCurPotentialList, v)
end
end
self.nAllPage = math.floor(#self.mapCurPotentialList % 8 == 0 and #self.mapCurPotentialList / 8 or #self.mapCurPotentialList / 8 + 1)
for k, v in ipairs(self._mapNode.imgDotBg) do
v.gameObject:SetActive(k <= self.nAllPage and self.nAllPage > 1)
end
if self.nCurPage == 0 then
self.nCurPage = 1
end
self:RefreshPageList()
self:RefreshLeftPage()
self:RefreshRightPage()
end
function StarTowerPotentialBookCtrl:RefreshPageList()
self._mapNode.btnLeft.gameObject:SetActive(self.nCurPage > 1)
self._mapNode.btnRight.gameObject:SetActive(self.nCurPage < self.nAllPage)
self._mapNode.imgNormalTitle[1].gameObject:SetActive(self.nCurPage > 1)
self._mapNode.imgSpecialTitle.gameObject:SetActive(self.nCurPage == 1)
for k, v in ipairs(self._mapNode.imgDot) do
v.gameObject:SetActive(k == self.nCurPage)
end
end
function StarTowerPotentialBookCtrl:RefreshLeftPage()
local nStartIndex = (self.nCurPage - 1) * 8
for i = 1, 4 do
local nIndex = nStartIndex + i
local item = self._mapNode.goPotentialBookItem[i]
item.gameObject:SetActive(self.mapCurPotentialList[nIndex] ~= nil)
if self.mapCurPotentialList[nIndex] ~= nil then
item:InitItem(self.mapCurPotentialList[nIndex].nId, self.mapCurPotentialList[nIndex].nLevel)
item:RegisterRedDot()
end
end
end
function StarTowerPotentialBookCtrl:RefreshRightPage()
local bEmpty = true
local nStartIndex = (self.nCurPage - 1) * 8
for i = 5, 8 do
local nIndex = nStartIndex + i
local item = self._mapNode.goPotentialBookItem[i]
item.gameObject:SetActive(self.mapCurPotentialList[nIndex] ~= nil)
if self.mapCurPotentialList[nIndex] ~= nil then
bEmpty = false
item:InitItem(self.mapCurPotentialList[nIndex].nId, self.mapCurPotentialList[nIndex].nLevel)
item:RegisterRedDot()
end
end
self._mapNode.imgEmpty.gameObject:SetActive(bEmpty)
end
function StarTowerPotentialBookCtrl:SetSimpleState()
self._mapNode.imgSwitchOff.gameObject:SetActive(not self.bSimple)
self._mapNode.imgSwitchOn.gameObject:SetActive(self.bSimple)
end
function StarTowerPotentialBookCtrl:Awake()
self.animRoot = self.gameObject:GetComponent("Animator")
self.nCharId = 0
self.mapCharGrids = {}
self.nCurTab = 1
self.bMasterPotential = true
self.nCurPage = 0
self:InitTab()
end
function StarTowerPotentialBookCtrl:OnEnable()
self.bSimple = PlayerData.StarTower:GetPotentialDescSimple()
self:SetSimpleState()
end
function StarTowerPotentialBookCtrl:OnDisable()
if self.bPotentialList then
self:ResetNewRedDot()
end
for nInstanceId, objCtrl in pairs(self.mapCharGrids) do
self:UnbindCtrlByNode(objCtrl)
self.mapCharGrids[nInstanceId] = nil
end
self.mapCharGrids = {}
end
function StarTowerPotentialBookCtrl:OnDestroy()
end
function StarTowerPotentialBookCtrl:OnBtnClick_Reward()
EventManager.Hit("OpenStarTowerBookQuest", self.nCharId)
end
function StarTowerPotentialBookCtrl:OnBtnClick_Switch()
self.bMasterPotential = not self.bMasterPotential
if self.bMasterPotential then
self._mapNode.animPage:Play("FlipBook_Right1", 0, 0)
else
self._mapNode.animPage:Play("FlipBook_Left1", 0, 0)
end
self._mapNode.goLeftPotentialList.gameObject:SetActive(false)
self._mapNode.goRightPotentialList.gameObject:SetActive(false)
self:AddTimer(1, 0.5, function()
self._mapNode.goLeftPotentialList.gameObject:SetActive(true)
self._mapNode.goRightPotentialList.gameObject:SetActive(true)
end, true, true, true, nil)
self.nCurPage = 0
self:SwitchPotentialType()
end
function StarTowerPotentialBookCtrl:OnBtnClick_Left()
if self.nCurPage <= 1 then
return
end
self.nCurPage = self.nCurPage - 1
self._mapNode.animPage:Play("FlipBook_Right", 0, 0)
self:AddTimer(1, 0.3, function()
self:RefreshRightPage()
end, true, true, true, nil)
self:RefreshPageList()
self:RefreshLeftPage()
end
function StarTowerPotentialBookCtrl:OnBtnClick_Right()
if self.nCurPage >= self.nAllPage then
return
end
self.nCurPage = self.nCurPage + 1
self._mapNode.animPage:Play("FlipBook_Left", 0, 0)
self:AddTimer(1, 0.3, function()
self:RefreshLeftPage()
end, true, true, true, nil)
self:RefreshPageList()
self:RefreshRightPage()
end
function StarTowerPotentialBookCtrl:OnBtnClick_Bg()
self._mapNode.animDetail:Play("goCardDetail_out")
local nAnimLen = NovaAPI.GetAnimClipLength(self._mapNode.animDetail, {
"goCardDetail_out"
})
self:AddTimer(1, nAnimLen, function()
self._mapNode.goPotentialDetail.gameObject:SetActive(false)
self._mapNode.goBlur.gameObject:SetActive(false)
if self._mapNode.goPotentialBookItem[self.nClickIndex] ~= nil then
end
end, true, true, true)
EventManager.Hit(EventId.TemporaryBlockInput, nAnimLen)
end
function StarTowerPotentialBookCtrl:OnBtnClick_Tab(btn, nIndex)
if nil ~= self.tbTabs[nIndex] and self.tbTabs[nIndex].Lock then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("StarTower_Book_Char_Element_Lock"))
return
end
self.nCurTab = nIndex
self:RefreshTab()
self:RefreshCharList()
end
function StarTowerPotentialBookCtrl:OnBtnClick_Item(btn, nIdx)
local animFinishFunc = function()
local nIndex = (self.nCurPage - 1) * 8 + nIdx
if self.mapCurPotentialList[nIndex] ~= nil then
RedDotManager.SetValid(RedDotDefine.StarTowerBook_Potential_New, self.mapCurPotentialList[nIndex].nId, false)
self._mapNode.goDetail.gameObject:SetActive(false)
self._mapNode.goPotentialDetail.gameObject:SetActive(true)
self._mapNode.goBlur.gameObject:SetActive(true)
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
self._mapNode.goDetail.gameObject:SetActive(true)
end
cs_coroutine.start(wait)
EventManager.Hit(EventId.TemporaryBlockInput, 0.5)
local nLevel = self.mapCurPotentialList[nIndex].nLevel == 0 and 1 or self.mapCurPotentialList[nIndex].nLevel
self._mapNode.potentialDetail:SetPotentialItem(self.mapCurPotentialList[nIndex].nId, nLevel, nil, self.bSimple, nil, nil, AllEnum.PotentialCardType.Book)
self._mapNode.potentialDetail:ChangeWordRaycast(true)
end
end
self.nClickIndex = nIdx
if self._mapNode.goPotentialBookItem[nIdx] ~= nil then
self:AddTimer(1, 0.15, animFinishFunc, true, true, true)
EventManager.Hit(EventId.TemporaryBlockInput, 0.15)
end
end
function StarTowerPotentialBookCtrl:OnBtnClick_ChangeDesc()
self.bSimple = not self.bSimple
PlayerData.StarTower:SetPotentialDescSimple(self.bSimple)
self:SetSimpleState()
self._mapNode.potentialDetail:ChangeDesc(self.bSimple)
end
function StarTowerPotentialBookCtrl:OnEvent_PotentialBookDataChange()
for _, v in pairs(self.mapCharGrids) do
v:RefreshCount()
end
if self.bPotentialList then
local nCount, nAllCount = PlayerData.StarTowerBook:GetCharPotentialCount(self.nCharId)
NovaAPI.SetTMPText(self._mapNode.txtCollectCount, string.format("%s/%s", nCount, nAllCount))
end
end
function StarTowerPotentialBookCtrl:OnEvent_ReceivePotentialBookReward()
local mapCharCfg = ConfigTable.GetData_Character(self.nCharId)
if mapCharCfg ~= nil then
local bCanReceive = RedDotManager.GetValid(RedDotDefine.StarTowerBook_Potential_Reward, {
mapCharCfg.EET,
self.nCharId
})
self._mapNode.btnReward.gameObject:SetActive(not bCanReceive)
self._mapNode.btnReceiveReward.gameObject:SetActive(bCanReceive)
end
end
return StarTowerPotentialBookCtrl
@@ -0,0 +1,68 @@
local BookQuestItemCtrl = class("BookQuestItemCtrl", BaseCtrl)
BookQuestItemCtrl._mapNodeConfig = {
imgPoint = {},
btnItem = {
sComponentName = "UIButton",
callback = "OnBtnClick_Item"
},
goRewardItem = {
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
},
txtQuestDesc = {nCount = 3, sComponentName = "TMP_Text"},
imgBarBg = {
sComponentName = "RectTransform"
},
imgBar = {
sComponentName = "RectTransform"
},
txtProgress = {sComponentName = "TMP_Text"},
goUnComplete = {},
goComplete = {},
goReceived = {}
}
BookQuestItemCtrl._mapEventConfig = {}
BookQuestItemCtrl._mapRedDotConfig = {}
function BookQuestItemCtrl:InitPotentialItem(questData)
for _, v in ipairs(self._mapNode.txtQuestDesc) do
NovaAPI.SetTMPText(v, questData.Desc)
end
self:SetProgress(questData.CurProgress, questData.AllProgress, questData.Status)
local mapReward = questData.Reward
self.nRewardTid = mapReward.RewardId
local bReceived = questData.Status == AllEnum.BookQuestStatus.Received
self._mapNode.goRewardItem:SetItem(mapReward.RewardId, nil, mapReward.RewardCount, nil, bReceived, false, false, true, false)
end
function BookQuestItemCtrl:InitFateCardItem(questData)
for _, v in ipairs(self._mapNode.txtQuestDesc) do
NovaAPI.SetTMPText(v, questData.Desc)
end
self:SetProgress(questData.CurProgress, questData.AllProgress, questData.Status)
local mapReward = questData.Reward[1]
self.nRewardTid = mapReward.RewardId
local bReceived = questData.Status == AllEnum.BookQuestStatus.Received
self._mapNode.goRewardItem:SetItem(mapReward.RewardId, nil, mapReward.RewardCount, nil, bReceived, false, false, true, false)
end
function BookQuestItemCtrl:SetProgress(nProgress, nAllProgress, nStatus)
self._mapNode.goUnComplete.gameObject:SetActive(nStatus == AllEnum.BookQuestStatus.UnComplete)
self._mapNode.goComplete.gameObject:SetActive(nStatus == AllEnum.BookQuestStatus.Complete)
self._mapNode.goReceived.gameObject:SetActive(nStatus == AllEnum.BookQuestStatus.Received)
if nStatus == AllEnum.BookQuestStatus.UnComplete then
self._mapNode.imgBar.sizeDelta = Vector2(nProgress / nAllProgress * self.nAllWidth, self._mapNode.imgBar.sizeDelta.y)
NovaAPI.SetTMPText(self._mapNode.txtProgress, string.format("%s/%s", nProgress, nAllProgress))
else
self._mapNode.imgBar.sizeDelta = Vector2(self.nAllWidth, self._mapNode.imgBar.sizeDelta.y)
NovaAPI.SetTMPText(self._mapNode.txtProgress, ConfigTable.GetUIText("StarTower_Book_Quest_Complete"))
end
end
function BookQuestItemCtrl:Awake()
self.nAllWidth = self._mapNode.imgBarBg.sizeDelta.x
end
function BookQuestItemCtrl:OnBtnClick_Item(btn)
local mapData = {
nTid = self.nRewardTid,
bShowDepot = true,
bShowJumpto = false
}
EventManager.Hit(EventId.OpenPanel, PanelId.ItemTips, btn.transform, mapData)
end
return BookQuestItemCtrl
@@ -0,0 +1,177 @@
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
@@ -0,0 +1,143 @@
local StarTowerBookCtrl = class("StarTowerBookCtrl", BaseCtrl)
StarTowerBookCtrl._mapNodeConfig = {
TopBar = {
sNodeName = "TopBarPanel",
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
},
MainRoot = {
sNodeName = "---Main---",
sCtrlName = "Game.UI.StarTowerBook.StarTowerBookMainCtrl"
},
PotentialRoot = {
sNodeName = "---Potential---",
sCtrlName = "Game.UI.StarTowerBook.Potential.StarTowerPotentialBookCtrl"
},
FateCardRoot = {
sNodeName = "---FateCard---",
sCtrlName = "Game.UI.StarTowerBook.FateCard.StarTowerFateCardBookCtrl"
},
EventRoot = {
sNodeName = "---Event---",
sCtrlName = "Game.UI.StarTowerBook.Event.StarTowerEventBookCtrl"
},
QuestRoot = {
sNodeName = "---Quest---",
sCtrlName = "Game.UI.StarTowerBook.Quest.StarTowerBookQuestCtrl"
},
AffinityRoot = {
sNodeName = "---Affinity---",
sCtrlName = "Game.UI.StarTowerBook.Affinity.StarTowerNpcAffinityCtrl"
},
goBg = {},
animBg = {sNodeName = "goBg", sComponentName = "Animator"}
}
StarTowerBookCtrl._mapEventConfig = {
ChangeStarTowerBookPanel = "OnEvent_ChangeStarTowerBookPanel",
OpenStarTowerBookQuest = "OnEvent_OpenStarTowerBookQuest",
[EventId.UIBackConfirm] = "OnEvent_Back",
[EventId.UIHomeConfirm] = "OnEvent_Home"
}
StarTowerBookCtrl._mapRedDotConfig = {}
function StarTowerBookCtrl:RefreshPanel()
self._mapNode.MainRoot.gameObject:SetActive(self._panel.nPanelType == AllEnum.StarTowerBookPanelType.Main)
self._mapNode.PotentialRoot.gameObject:SetActive(self._panel.nPanelType == AllEnum.StarTowerBookPanelType.Potential)
self._mapNode.FateCardRoot.gameObject:SetActive(self._panel.nPanelType == AllEnum.StarTowerBookPanelType.FateCard)
self._mapNode.EventRoot.gameObject:SetActive(self._panel.nPanelType == AllEnum.StarTowerBookPanelType.Event)
self._mapNode.AffinityRoot.gameObject:SetActive(self._panel.nPanelType == AllEnum.StarTowerBookPanelType.Affinity)
self._mapNode.goBg.gameObject:SetActive(true)
if self.nLastPanelType ~= nil and self.nLastPanelType == AllEnum.StarTowerBookPanelType.Event or self.nLastPanelType == AllEnum.StarTowerBookPanelType.Affinity or self._panel.nPanelType == AllEnum.StarTowerBookPanelType.Event or self._panel.nPanelType == AllEnum.StarTowerBookPanelType.Affinity then
self._mapNode.goBg.gameObject:SetActive(false)
return
end
if self._panel.nPanelType == AllEnum.StarTowerBookPanelType.Potential or self._panel.nPanelType == AllEnum.StarTowerBookPanelType.FateCard then
self._mapNode.animBg:Play("StarTowerBookgoBg_in", 0, 0)
else
self._mapNode.animBg:Play("StarTowerBookgoBg_out", 0, 0)
end
end
function StarTowerBookCtrl:Awake()
self.nLastPanelType = nil
if self._panel.nPanelType == 0 then
self._panel.nPanelType = AllEnum.StarTowerBookPanelType.Main
end
self._mapNode.QuestRoot.gameObject:SetActive(false)
self:RefreshPanel()
self._mapNode.goBg.gameObject:SetActive(false)
end
function StarTowerBookCtrl:FadeIn()
end
function StarTowerBookCtrl:FadeOut()
end
function StarTowerBookCtrl:OnEnable()
self._mapNode.MainRoot.gameObject:SetActive(true)
self._mapNode.MainRoot:Init()
local tbParam = self:GetPanelParam()
if tbParam[1] ~= nil then
self._panel.nPanelType = tbParam[1]
tbParam = {}
end
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
if self._panel.nPanelType ~= AllEnum.StarTowerBookPanelType.Main then
self:OnEvent_ChangeStarTowerBookPanel(self._panel.nPanelType)
end
end
cs_coroutine.start(wait)
end
function StarTowerBookCtrl:OnDisable()
end
function StarTowerBookCtrl:OnDestroy()
end
function StarTowerBookCtrl:OnRelease()
end
function StarTowerBookCtrl:OnBtnClick_AAA()
end
function StarTowerBookCtrl:OnEvent_ChangeStarTowerBookPanel(nPanelType)
self._panel.nPanelType = nPanelType
self.nLastPanelType = self._panel.nPanelType
if self._panel.nPanelType == AllEnum.StarTowerBookPanelType.Potential then
self:RefreshPanel()
self._mapNode.PotentialRoot:Init()
self._mapNode.TopBar:SetTitleTxt(ConfigTable.GetUIText("StarTower_Book_Potential_TopBar_Title"))
elseif self._panel.nPanelType == AllEnum.StarTowerBookPanelType.Event then
self:RefreshPanel()
self._mapNode.EventRoot:Init()
self._mapNode.TopBar:SetTitleTxt(ConfigTable.GetUIText("StarTower_Book_Event_TopBar_Title"))
elseif self._panel.nPanelType == AllEnum.StarTowerBookPanelType.FateCard then
self:RefreshPanel()
self._mapNode.FateCardRoot:Init()
self._mapNode.TopBar:SetTitleTxt(ConfigTable.GetUIText("StarTower_Book_FateCard_TopBar_Title"))
elseif self._panel.nPanelType == AllEnum.StarTowerBookPanelType.Affinity then
local callback = function()
self:RefreshPanel()
self._mapNode.AffinityRoot:Init()
self._mapNode.TopBar:SetTitleTxt(ConfigTable.GetUIText("StartowerBook_NPCAffinityTitle"))
end
PlayerData.StarTower:GetAffinity(callback)
elseif self._panel.nPanelType == AllEnum.StarTowerBookPanelType.Main then
self:RefreshPanel()
self._mapNode.MainRoot:BackToMain()
self._mapNode.TopBar:SetTitleTxt(ConfigTable.GetUIText("StarTower_Book_Main_TopBar_Title"))
end
end
function StarTowerBookCtrl:OnEvent_OpenStarTowerBookQuest(nParam)
self._mapNode.QuestRoot.gameObject:SetActive(true)
self._mapNode.QuestRoot:ShowWindow(nParam)
end
function StarTowerBookCtrl:OnEvent_Back()
if self._panel.nPanelType == AllEnum.StarTowerBookPanelType.Potential then
self._mapNode.PotentialRoot:Back()
elseif self._panel.nPanelType == AllEnum.StarTowerBookPanelType.Event then
self._mapNode.EventRoot:Back()
elseif self._panel.nPanelType == AllEnum.StarTowerBookPanelType.FateCard then
self._mapNode.FateCardRoot:Back()
elseif self._panel.nPanelType == AllEnum.StarTowerBookPanelType.Affinity then
self._mapNode.AffinityRoot:Back()
else
EventManager.Hit(EventId.ClosePanel, PanelId.StarTowerBook)
end
end
function StarTowerBookCtrl:OnEvent_Home()
PanelManager.Home()
end
return StarTowerBookCtrl
@@ -0,0 +1,109 @@
local StarTowerBookMainCtrl = class("StarTowerBookMainCtrl", BaseCtrl)
StarTowerBookMainCtrl._mapNodeConfig = {
btnPotential = {
sComponentName = "UIButton",
callback = "OnBtnClick_Potential"
},
btnFateCard = {
sComponentName = "UIButton",
callback = "OnBtnClick_FateCard"
},
btnEvent = {
sComponentName = "UIButton",
callback = "OnBtnClick_Event"
},
btnAffinity = {
sComponentName = "UIButton",
callback = "OnBtnClick_Affinity"
},
txtPotential = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Potential_Title"
},
txtPotentialDesc = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Potential_Desc"
},
txtFateCard = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_FateCard_Title"
},
txtFateCardDesc = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_FateCard_Desc"
},
txtEvent = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Event_Title"
},
txtEventDesc = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Event_Desc"
},
txtPosition = {sComponentName = "TMP_Text"},
txtEntranceDesc = {sComponentName = "TMP_Text"},
imgPhoto = {sComponentName = "Image"},
txtAffinity = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Book_Affinity_Title"
},
redDotPotential = {},
redDotFateCard = {},
redDotEvent = {},
redDotAffinity = {}
}
StarTowerBookMainCtrl._mapEventConfig = {}
StarTowerBookMainCtrl._mapRedDotConfig = {
[RedDotDefine.StarTowerBook_Potential] = {
sNodeName = "redDotPotential"
},
[RedDotDefine.StarTowerBook_FateCard] = {
sNodeName = "redDotFateCard"
},
[RedDotDefine.StarTowerBook_Event] = {
sNodeName = "redDotEvent"
},
[RedDotDefine.StarTowerBook_Affinity] = {
sNodeName = "redDotAffinity"
}
}
function StarTowerBookMainCtrl:Init()
self.animRoot:Play("StarTowerBookMain_in")
local mapEntrance = PlayerData.StarTowerBook:GetRandomEntranceCfg()
NovaAPI.SetTMPText(self._mapNode.txtPosition, mapEntrance.Position)
NovaAPI.SetTMPText(self._mapNode.txtEntranceDesc, mapEntrance.Desc)
if mapEntrance.Icon ~= "" then
self:SetPngSprite(self._mapNode.imgPhoto, mapEntrance.Icon)
end
end
function StarTowerBookMainCtrl:BackToMain()
self.animRoot:Play("StarTowerBookMain_in1")
end
function StarTowerBookMainCtrl:Awake()
self.animRoot = self.gameObject:GetComponent("Animator")
end
function StarTowerBookMainCtrl:OnEnable()
end
function StarTowerBookMainCtrl:OnDisable()
end
function StarTowerBookMainCtrl:OnDestroy()
end
function StarTowerBookMainCtrl:OnBtnClick_Potential()
local callback = function()
EventManager.Hit("ChangeStarTowerBookPanel", AllEnum.StarTowerBookPanelType.Potential)
end
PlayerData.StarTowerBook:SendPotentialBriefListMsg(callback)
end
function StarTowerBookMainCtrl:OnBtnClick_FateCard()
local callback = function()
EventManager.Hit("ChangeStarTowerBookPanel", AllEnum.StarTowerBookPanelType.FateCard)
end
PlayerData.StarTowerBook:TryGetFateCardBook(callback)
end
function StarTowerBookMainCtrl:OnBtnClick_Event()
EventManager.Hit("ChangeStarTowerBookPanel", AllEnum.StarTowerBookPanelType.Event)
end
function StarTowerBookMainCtrl:OnBtnClick_Affinity()
EventManager.Hit("ChangeStarTowerBookPanel", AllEnum.StarTowerBookPanelType.Affinity)
end
return StarTowerBookMainCtrl
@@ -0,0 +1,21 @@
local StarTowerBookPanel = class("StarTowerBookPanel", BasePanel)
StarTowerBookPanel._tbDefine = {
{
sPrefabPath = "StarTowerBook/StarTowerBookPanel.prefab",
sCtrlName = "Game.UI.StarTowerBook.StarTowerBookCtrl"
}
}
function StarTowerBookPanel:Awake()
self.nPanelType = 0
end
function StarTowerBookPanel:OnEnable()
end
function StarTowerBookPanel:OnAfterEnter()
end
function StarTowerBookPanel:OnDisable()
end
function StarTowerBookPanel:OnDestroy()
end
function StarTowerBookPanel:OnRelease()
end
return StarTowerBookPanel