Major Update - 2.0.0.143

EN: 2.0.0.143
CN: 2.0.0.142
JP: 2.0.0.145
KR: 2.0.0.150
This commit is contained in:
SL1900
2026-10-20 13:00:00 +09:00
parent 4bcada6061
commit 08b515afd9
1773 changed files with 1095195 additions and 65670 deletions
@@ -7,7 +7,16 @@ BuildSimpleDiscItem._mapNodeConfig = {
BuildSimpleDiscItem._mapEventConfig = {}
BuildSimpleDiscItem._mapRedDotConfig = {}
function BuildSimpleDiscItem:Init(nDiscId)
local mapData = ConfigTable.GetData("Disc", nDiscId)
local mapData = ConfigTable.GetData("Disc", nDiscId, true)
if mapData == nil then
mapData = ConfigTable.GetData("TrialDisc", nDiscId)
if mapData ~= nil then
nDiscId = mapData.DiscId
mapData = ConfigTable.GetData("Disc", nDiscId)
else
return
end
end
local mapCfg = ConfigTable.GetData_Item(nDiscId)
self:SetPngSprite(self._mapNode.imgIcon, mapCfg.Icon .. AllEnum.OutfitIconSurfix.ListGrid)
local sFrame = AllEnum.FrameType_New.BoardFrame .. AllEnum.BoardFrameColor[mapCfg.Rarity]
@@ -47,10 +47,10 @@ function PotentialListItemCtrl:GetAllPotentialCount(nCharId, bMain)
end
return nAllCount
end
function PotentialListItemCtrl:Init(nCharId, nCount, tbPotential, goPotential, bMain, bRankPreview)
function PotentialListItemCtrl:Init(nCharId, nCount, tbPotential, goPotential, bMain, bRankPreview, nSkinId)
self.nCharId = nCharId
local charCfg = ConfigTable.GetData_Character(nCharId)
local nCharSkinId = PlayerData.Char:GetCharSkinId(nCharId)
local nCharSkinId = nSkinId or PlayerData.Char:GetCharSkinId(nCharId)
local charSkinCfg = ConfigTable.GetData_CharacterSkin(nCharSkinId)
local sFrame = AllEnum.FrameType_New.BoardFrame .. AllEnum.BoardFrameColor[charCfg.Grade]
self:SetPngSprite(self._mapNode.imgHead, charSkinCfg.Icon, AllEnum.CharHeadIconSurfix.XXL)
@@ -155,6 +155,15 @@ local FilterGradeIdx = {
btn_FilterGradeB = 1,
btn_FilterGradeC = 0
}
function StarTowerBuildBriefCtrl:GetEditableBuildCount()
local nCount = 0
for _, mapBuild in ipairs(self._tbAllBuild) do
if PlayerData.Build:IsBuildEditable(mapBuild.nBuildId) then
nCount = nCount + 1
end
end
return nCount
end
function StarTowerBuildBriefCtrl:RefreshList()
local isDirty = PlayerData.Filter:IsDirtyByOption(self._panel.tbOption)
self._mapNode.imgFilterChoose:SetActive(isDirty)
@@ -177,7 +186,7 @@ function StarTowerBuildBriefCtrl:RefreshList()
self._mapNode.ListContent:SetActive(true)
end
self._mapNode.BuildList:Init(#self.tbCurShow, self, self.RefreshBuildGrid)
NovaAPI.SetTMPText(self._mapNode.txt_BuildCount, string.format("%d/%d", #self._tbAllBuild, ConfigTable.GetConfigNumber("StarTowerBuildNumberMax")))
NovaAPI.SetTMPText(self._mapNode.txt_BuildCount, string.format("%d/%d", self:GetEditableBuildCount(), ConfigTable.GetConfigNumber("StarTowerBuildNumberMax")))
end
function StarTowerBuildBriefCtrl:FilterAndSortBuildData()
local ret = {}
@@ -273,6 +282,18 @@ function StarTowerBuildBriefCtrl:FilterAndSortBuildData()
end
table.sort(ret, sortByScore)
end
if self.nSortype == SortType.Score then
PlayerData.Build:PrioritizeLimitedTrialBuilds(ret, function(mapBuild)
if self.nPanelState == PanelState.Delete then
return self.mapDelete[mapBuild.nBuildId] ~= nil and 1 or 0
elseif self.nPanelState == PanelState.Preference then
local bCheckIn = self.mapPreferenceCheckIn[mapBuild.nBuildId] ~= nil
local bCheckOut = self.mapPreferenceCheckOut[mapBuild.nBuildId] ~= nil
return (not (not mapBuild.bPreference or bCheckOut) or not mapBuild.bPreference and bCheckIn) and 1 or 0
end
return 0
end)
end
return ret
end
function StarTowerBuildBriefCtrl:RefreshBuildGrid(goGrid, gridIndex)
@@ -289,6 +310,9 @@ function StarTowerBuildBriefCtrl:RefreshBuildGrid(goGrid, gridIndex)
end
function StarTowerBuildBriefCtrl:OnBuildGridLock(nIdx, itemCtrl)
local mapBuild = self.tbCurShow[nIdx]
if not PlayerData.Build:IsBuildEditable(mapBuild.nBuildId) then
return
end
local callback = function()
itemCtrl:SetLockState(mapBuild.bLock)
if self.nPanelState == PanelState.Delete and mapBuild.bLock and self.mapDelete[mapBuild.nBuildId] ~= nil then
@@ -306,6 +330,9 @@ function StarTowerBuildBriefCtrl:OnBuildGridPreference(nIdx, itemCtrl)
return
end
local mapBuild = self.tbCurShow[nIdx]
if not PlayerData.Build:IsBuildEditable(mapBuild.nBuildId) then
return
end
local tbPreferenceCheckIn = {}
local tbPreferenceCheckOut = {}
local callback = function()
@@ -320,6 +347,9 @@ function StarTowerBuildBriefCtrl:OnBuildGridPreference(nIdx, itemCtrl)
end
function StarTowerBuildBriefCtrl:OnBtnClickGrid(nIdx, itemCtrl)
local mapBuild = self.tbCurShow[nIdx]
if self.nPanelState ~= PanelState.Normal and not PlayerData.Build:IsBuildEditable(mapBuild.nBuildId) then
return
end
if self.nPanelState == PanelState.Delete then
if mapBuild.bLock then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("BUILD_01"))
@@ -356,7 +386,7 @@ function StarTowerBuildBriefCtrl:OnBtnClickGrid(nIdx, itemCtrl)
itemCtrl:SetSelectPreferenceState(true)
self.nPreferenceCount = self.nPreferenceCount + 1
end
NovaAPI.SetTMPText(self._mapNode.txt_PreferenceCount, string.format("%d/%d", self.nPreferenceCount, #self._tbAllBuild))
NovaAPI.SetTMPText(self._mapNode.txt_PreferenceCount, string.format("%d/%d", self.nPreferenceCount, self:GetEditableBuildCount()))
else
local callback = function(mapData)
EventManager.Hit(EventId.OpenPanel, PanelId.StarTowerBuildDetail, mapData)
@@ -386,12 +416,12 @@ function StarTowerBuildBriefCtrl:SetDeleteResult()
self._mapNode.rtResultTitle.gameObject:SetActive(true)
self._mapNode.result1:SetItem(self.nDeleteReturnId, nil, nCoin, nil, nil, nil, nil, true)
end
NovaAPI.SetTMPText(self._mapNode.txt_SelectCount, string.format("%d/%d", self.nSelectedDeleteCount, #self._tbAllBuild))
NovaAPI.SetTMPText(self._mapNode.txt_SelectCount, string.format("%d/%d", self.nSelectedDeleteCount, self:GetEditableBuildCount()))
end
function StarTowerBuildBriefCtrl:CalPreferenceCount()
local ret = 0
for _, mapBuild in ipairs(self._tbAllBuild) do
if mapBuild.bPreference then
if PlayerData.Build:IsBuildEditable(mapBuild.nBuildId) and mapBuild.bPreference then
ret = ret + 1
end
end
@@ -428,7 +458,7 @@ function StarTowerBuildBriefCtrl:OpenConfirmHint()
end
end
self:OnBtnClick_CloseDelete()
PlayerData.Build:GetAllBuildBriefData(GetDataCallback)
PlayerData.Build:GetSelectableBuildBriefData(GetDataCallback, nil, true)
end
local tbDelete = {}
for key, _ in pairs(self.mapDelete) do
@@ -507,7 +537,7 @@ function StarTowerBuildBriefCtrl:OnEnable()
self._tbAllBuild = tbBuildData
self:RefreshList()
end
PlayerData.Build:GetAllBuildBriefData(GetDataCallback)
PlayerData.Build:GetSelectableBuildBriefData(GetDataCallback, nil, true)
end
function StarTowerBuildBriefCtrl:OnDisable()
self.mapPreferenceCheckIn = {}
@@ -581,7 +611,7 @@ function StarTowerBuildBriefCtrl:OnBtnClick_SelectPreference()
self.mapPreferenceCheckIn = {}
self.mapPreferenceCheckOut = {}
self.nPreferenceCount = self:CalPreferenceCount()
NovaAPI.SetTMPText(self._mapNode.txt_PreferenceCount, string.format("%d/%d", self.nPreferenceCount, #self._tbAllBuild))
NovaAPI.SetTMPText(self._mapNode.txt_PreferenceCount, string.format("%d/%d", self.nPreferenceCount, self:GetEditableBuildCount()))
self:RefreshList()
self._mapNode.PreferenceContent:SetActive(true)
end
@@ -639,7 +669,7 @@ function StarTowerBuildBriefCtrl:OnBtnClick_FastSelectDeleteBuild(btn)
return
end
for _, mapBuild in ipairs(self.tbCurShow) do
if mapBuild.mapRank.Rarity >= 4 - filterGrade and not mapBuild.bLock and self.mapDelete[mapBuild.nBuildId] == nil then
if PlayerData.Build:IsBuildEditable(mapBuild.nBuildId) and mapBuild.mapRank.Rarity >= 4 - filterGrade and not mapBuild.bLock and self.mapDelete[mapBuild.nBuildId] == nil then
self.mapDelete[mapBuild.nBuildId] = 0
self.nSelectedDeleteCount = self.nSelectedDeleteCount + 1
end
@@ -55,6 +55,10 @@ StarTowerBuildBriefItem._mapNodeConfig = {
},
btnExport = {sComponentName = "UIButton"},
objUnavailable = {},
imgUnavailableMask = {
sNodeName = "objUnavailable",
sComponentName = "Image"
},
objUnavailableIcon = {sComponentName = "Image"},
imgRareScoreMask = {sComponentName = "Image"},
texUnavailable = {
@@ -79,14 +83,15 @@ StarTowerBuildBriefItem._mapNodeConfig = {
}
}
StarTowerBuildBriefItem._mapEventConfig = {}
function StarTowerBuildBriefItem:RefreshGrid(mapData, nPanelState, bSelectDelete, bCheckOut, bCheckIn, nType, bTrial)
function StarTowerBuildBriefItem:RefreshGrid(mapData, nPanelState, bSelectDelete, bCheckOut, bCheckIn, nType)
self._mapData = mapData
self._nType = nType
self._bTrial = bTrial
self._bLimitedTrialBuild = mapData.nBuildSource == AllEnum.BuildSource.LimitedTrial
self._bLimitedTrialBuildLocked = self._bLimitedTrialBuild and not PlayerData.Build:IsLimitedTrialBuildAllowedType(self._nType)
self:RefreshInfo()
self:RefreshChar()
self:RefreshDisc()
self._mapNode.imgLabel2:SetActive(bTrial == true)
self._mapNode.imgLabel2:SetActive(self._bLimitedTrialBuild)
if nPanelState == PanelState.Delete then
self._mapNode.img_SelectDelete:SetActive(bSelectDelete)
self._mapNode.img_SelectPreference:SetActive(false)
@@ -115,7 +120,7 @@ function StarTowerBuildBriefItem:RefreshGrid(mapData, nPanelState, bSelectDelete
bShowUnavailable = self._mapData.bBuildUsed or self._mapData.bCharUsed
end
self._mapNode.objUnavailable:SetActive(bShowUnavailable)
self._mapNode.imgUnavailable:SetActive(self._mapData.isCanUse)
self._mapNode.imgUnavailable:SetActive(false)
self._mapNode.imgBuildUsed:SetActive(self._mapData.bBuildUsed)
self._mapNode.imgCharUsed:SetActive(self._mapData.bCharUsed and not self._mapData.bBuildUsed)
local sKey = self._nType == AllEnum.RegionBossFormationType.InfinityTower and "InfinityTower_Build_NotAvailable" or "VampireFormation_Unable"
@@ -123,12 +128,31 @@ function StarTowerBuildBriefItem:RefreshGrid(mapData, nPanelState, bSelectDelete
else
self._mapNode.objUnavailable:SetActive(false)
end
if self._bLimitedTrialBuildLocked then
self._mapNode.objUnavailable:SetActive(true)
self._mapNode.imgUnavailable:SetActive(true)
self._mapNode.imgBuildUsed:SetActive(false)
self._mapNode.imgCharUsed:SetActive(false)
NovaAPI.SetTMPText(self._mapNode.texUnavailable, ConfigTable.GetUIText("LimitedTrialBuild_UnableTip"))
end
end
function StarTowerBuildBriefItem:RefreshInfo()
local sScore = "Icon/BuildRank/BuildRank_" .. self._mapData.mapRank.Id
local sFrame = AllEnum.FrameType_New.BuildRankDB .. AllEnum.FrameColor_New[self._mapData.mapRank.Rarity]
self:SetPngSprite(self._mapNode.imgRareScore, sScore)
self:SetAtlasSprite(self._mapNode.imgRareFrame, "12_rare", sFrame)
local nBuildRank = self._mapData.mapRank.Id
local nMaskIndex = 1
if 31 <= nBuildRank then
nMaskIndex = 5
elseif 21 <= nBuildRank then
nMaskIndex = 4
elseif 11 <= nBuildRank then
nMaskIndex = 3
elseif 6 <= nBuildRank then
nMaskIndex = 2
end
self:SetAtlasSprite(self._mapNode.imgUnavailableMask, "08_db", "db_common_bd_mask_0" .. nMaskIndex)
if self._mapData.sName == "" or self._mapData.sName == nil then
NovaAPI.SetTMPText(self._mapNode.txtBuildName, ConfigTable.GetUIText("RoguelikeBuild_EmptyBuildName"))
else
@@ -140,7 +164,7 @@ end
function StarTowerBuildBriefItem:RefreshChar()
for i = 1, 3 do
local nCharTid = self._mapData.tbChar[i].nTid
local nCharSkinId = PlayerData.Char:GetCharSkinId(nCharTid)
local nCharSkinId = PlayerData.Build:GetBuildCharSkinId(self._mapData, self._mapData.tbChar[i])
local mapCharSkin = ConfigTable.GetData_CharacterSkin(nCharSkinId)
local mapCharCfg = ConfigTable.GetData_Character(nCharTid)
local sFrame = AllEnum.FrameType_New.BoardFrame .. AllEnum.BoardFrameColor[mapCharCfg.Grade]
@@ -186,6 +210,10 @@ end
function StarTowerBuildBriefItem:OnRelease()
end
function StarTowerBuildBriefItem:OnBtnClick_Grid(btn)
if self._bLimitedTrialBuildLocked then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("LimitedTrialBuild_UnableTip"))
return
end
if self._nType then
if self._nType == AllEnum.RegionBossFormationType.InfinityTower or self._nType == AllEnum.RegionBossFormationType.Vampire then
if not self._mapData.isCanUse then
@@ -39,8 +39,8 @@ StarTowerBuildContentCtrl._mapNodeConfig = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Build_DiscSkill_Title"
},
imgNote = {nCount = 12, sComponentName = "Image"},
txtNoteCount = {nCount = 12, sComponentName = "TMP_Text"},
imgNote = {nCount = 13, sComponentName = "Image"},
txtNoteCount = {nCount = 13, sComponentName = "TMP_Text"},
imgSkillEmpty = {},
rtSkill = {},
txtSkillEmpty = {
@@ -96,14 +96,17 @@ StarTowerBuildContentCtrl._mapEventConfig = {
SelectDepotPotential = "OnEvent_SelectDepotPotential"
}
StarTowerBuildContentCtrl._mapRedDotConfig = {}
function StarTowerBuildContentCtrl:Refresh(mapBuild)
function StarTowerBuildContentCtrl:Refresh(mapBuild, nDefaultTab)
self.mapBuild = mapBuild
self:InitDisc()
self:InitPotential()
self:SetDefaultTab()
if nDefaultTab == nil then
nDefaultTab = 1
end
self:SetDefaultTab(nDefaultTab)
end
function StarTowerBuildContentCtrl:SetDefaultTab()
self.nCurTab = 1
function StarTowerBuildContentCtrl:SetDefaultTab(nDefaultTab)
self.nCurTab = nDefaultTab
for i = 1, 2 do
self._mapNode.imgOn[i]:SetActive(i == self.nCurTab)
self._mapNode.imgOff[i]:SetActive(i ~= self.nCurTab)
@@ -120,7 +123,8 @@ function StarTowerBuildContentCtrl:InitPotential()
v.gameObject:SetActive(0 < nCount)
if 0 < nCount then
bEmpty = false
v:Init(tbChar[k].nTid, tbChar[k].nPotentialCount, tbPotential[tbChar[k].nTid], self._mapNode.PotentialDepotItem, k == 1, self.mapBuild.bRankPreview)
local nCharSkinId = PlayerData.Build:GetBuildCharSkinId(self.mapBuild, tbChar[k])
v:Init(tbChar[k].nTid, tbChar[k].nPotentialCount, tbPotential[tbChar[k].nTid], self._mapNode.PotentialDepotItem, k == 1, self.mapBuild.bRankPreview, nCharSkinId)
end
end
self._mapNode.goEmptyPotential.gameObject:SetActive(bEmpty)
@@ -153,7 +157,7 @@ function StarTowerBuildContentCtrl:InitDisc()
end
local nNoteCount = #tbNote
self.tbShowNote = {}
for i = 1, 12 do
for i = 1, 13 do
self._mapNode.imgNote[i].gameObject:SetActive(i <= nNoteCount)
if i <= nNoteCount then
self.tbShowNote[tbNote[i]] = self.mapBuild.tbNotes[tbNote[i]] or 0
@@ -168,13 +172,7 @@ function StarTowerBuildContentCtrl:InitDisc()
local tbDisc = self.mapBuild.tbDisc
for k, nId in ipairs(tbDisc) do
if k <= 3 then
local mapDisc = PlayerData.Disc:GetDiscById(nId)
if mapDisc == nil then
mapDisc = PlayerData.Disc:GetTrialDiscById(nId)
end
if mapDisc == nil then
mapDisc = PlayerData.Disc:GetRankDetailDisc(nId)
end
local mapDisc = PlayerData.Build:GetBuildDiscByData(self.mapBuild, nId)
if mapDisc ~= nil then
local tbSubSkill = mapDisc:GetAllSubSkill(self.mapBuild.tbNotes)
for nSkillIndex, v in ipairs(tbSubSkill) do
@@ -233,6 +231,7 @@ function StarTowerBuildContentCtrl:ChangeTab(nIndex)
self.nCurTab = nIndex
self._mapNode.svPotential:SetActive(self.nCurTab == 1)
self._mapNode.svDisc:SetActive(self.nCurTab == 2)
EventManager.Hit("StarTowerBuildContent_ChangeTab", nIndex)
end
function StarTowerBuildContentCtrl:Awake()
self._mapNode.PotentialDepotItem.gameObject:SetActive(false)
@@ -41,21 +41,33 @@ StarTowerBuildDetailCtrl._mapNodeConfig = {
},
ContentList = {
sCtrlName = "Game.UI.StarTower.Build.StarTowerBuildContentCtrl"
},
txtEdit = {sComponentName = "TMP_Text"},
BtnEntrance = {sComponentName = "Transform"},
EditNml = {
sComponentName = "UIButton",
callback = "OnBtnClick_EditBuild"
},
EditInvalid = {
sComponentName = "UIButton",
callback = "OnBtnClick_EditBuild"
}
}
StarTowerBuildDetailCtrl._mapEventConfig = {}
StarTowerBuildDetailCtrl._mapEventConfig = {
StarTowerBuildContent_ChangeTab = "OnEvent_ContentChangeTab"
}
function StarTowerBuildDetailCtrl:InitPanel()
if not self.mapBuild.bDetail then
print("build数据错误 无详细数据")
return
end
self._mapNode.BuildDetail:Refresh(self.mapBuild)
self._mapNode.ContentList:Refresh(self.mapBuild)
self._mapNode.btn_Preference.gameObject:SetActive(self.mapBuild.bTrial ~= true)
self._mapNode.btn_Lock.gameObject:SetActive(self.mapBuild.bTrial ~= true)
self._mapNode.TMPBuildSaveTime.gameObject:SetActive(self.mapBuild.bTrial ~= true)
self._mapNode.btnDelete.gameObject:SetActive(self.mapBuild.bTrial ~= true)
self._mapNode.btnRename.gameObject:SetActive(self.mapBuild.bTrial ~= true)
local bEditable = PlayerData.Build:IsBuildEditable(self.mapBuild.nBuildId)
self._mapNode.btn_Preference.gameObject:SetActive(bEditable)
self._mapNode.btn_Lock.gameObject:SetActive(bEditable)
self._mapNode.TMPBuildSaveTime.gameObject:SetActive(bEditable)
self._mapNode.btnDelete.gameObject:SetActive(bEditable)
self._mapNode.btnRename.gameObject:SetActive(bEditable)
self._mapNode.BtnEntrance.gameObject:SetActive(not PlayerData.Build:IsLimitedTrialBuild(self.mapBuild.nBuildId))
if self.mapBuild.bPreference ~= nil then
self._mapNode.btn_PreferenceIcon.interactable = self.mapBuild.bPreference
NovaAPI.SetTMPColor(self._mapNode.txtLike, self.mapBuild.bPreference and Color(0.14901960784313725, 0.25882352941176473, 0.47058823529411764) or Color(0.5803921568627451, 0.6666666666666666, 0.7529411764705882))
@@ -65,9 +77,13 @@ function StarTowerBuildDetailCtrl:InitPanel()
NovaAPI.SetTMPText(self._mapNode.txtBuildLock, self.mapBuild.bLock and ConfigTable.GetUIText("RoguelikeBuild_Save_Lock") or ConfigTable.GetUIText("RoguelikeBuild_Save_Unlock"))
NovaAPI.SetTMPColor(self._mapNode.txtBuildLock, self.mapBuild.bLock and Color(0.14901960784313725, 0.25882352941176473, 0.47058823529411764) or Color(0.5803921568627451, 0.6666666666666666, 0.7529411764705882))
end
if self.mapBuild.bTrial ~= true then
if bEditable then
NovaAPI.SetTMPText(self._mapNode.TMPBuildSaveTime, string.format("<color=#5e89b4>保存时间:</color>%s", os.date("%Y/%m/%d %H:%M", math.floor(self.mapBuild.nBuildId / 1.0E9))))
end
self._panel.nCachedIdx = (self._panel.nCachedIdx == nil or self._panel.nCachedIdx == 0) and 1 or self._panel.nCachedIdx
self:OnEvent_ContentChangeTab(self._panel.nCachedIdx)
self._mapNode.BuildDetail:Refresh(self.mapBuild)
self._mapNode.ContentList:Refresh(self.mapBuild, self._panel.nCachedIdx)
end
function StarTowerBuildDetailCtrl:OpenConfirmHint()
local nCoin = math.floor(math.min(math.max(self.mapBuild.nScore / tonumber(self.tbCoinRate[1]), tonumber(self.tbCoinRate[2])), tonumber(self.tbCoinRate[3])))
@@ -127,6 +143,9 @@ end
function StarTowerBuildDetailCtrl:OnRelease()
end
function StarTowerBuildDetailCtrl:OnBtnClick_Preference(btn)
if not PlayerData.Build:IsBuildEditable(self.mapBuild.nBuildId) then
return
end
local tbPreferenceCheckIn = {}
local tbPreferenceCheckOut = {}
local callback = function()
@@ -141,6 +160,9 @@ function StarTowerBuildDetailCtrl:OnBtnClick_Preference(btn)
PlayerData.Build:SetBuildPreference(tbPreferenceCheckIn, tbPreferenceCheckOut, callback)
end
function StarTowerBuildDetailCtrl:OnBtnClick_Lock(btn)
if not PlayerData.Build:IsBuildEditable(self.mapBuild.nBuildId) then
return
end
local callback = function()
self._mapNode.btn_LockIcon.interactable = self.mapBuild.bLock
NovaAPI.SetTMPText(self._mapNode.txtBuildLock, self.mapBuild.bLock and ConfigTable.GetUIText("RoguelikeBuild_Save_Lock") or ConfigTable.GetUIText("RoguelikeBuild_Save_Unlock"))
@@ -149,6 +171,9 @@ function StarTowerBuildDetailCtrl:OnBtnClick_Lock(btn)
PlayerData.Build:ChangeBuildLock(self.mapBuild.nBuildId, not self.mapBuild.bLock, callback)
end
function StarTowerBuildDetailCtrl:OnBtnClick_DeleteBuild(btn)
if not PlayerData.Build:IsBuildEditable(self.mapBuild.nBuildId) then
return
end
if self.mapBuild.bLock then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("BUILD_01"))
return
@@ -156,6 +181,9 @@ function StarTowerBuildDetailCtrl:OnBtnClick_DeleteBuild(btn)
self:OpenConfirmHint()
end
function StarTowerBuildDetailCtrl:OnBtnClick_Rename(btn)
if not PlayerData.Build:IsBuildEditable(self.mapBuild.nBuildId) then
return
end
local callback = function(sName)
self._mapNode.BuildDetail:SetName(sName)
end
@@ -170,4 +198,66 @@ function StarTowerBuildDetailCtrl:OnBtnClick_CharInfo(btn, nIndex)
}
EventManager.Hit(EventId.OpenPanel, PanelId.CharBgPanel, PanelId.CharInfo, nCharTid, tbChar)
end
function StarTowerBuildDetailCtrl:OnBtnClick_EditBuild()
if PlayerData.Build:IsLimitedTrialBuild(self.mapBuild.nBuildId) then
return
end
if self.mapBuild.bLock then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("BuildModifier_ValidTips5"))
return
end
local nScoreFixedable = ConfigTable.GetConfigNumber("BuildModifierScoreMin")
if nScoreFixedable > self.mapBuild.nScore then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("BuildModifier_ValidTips2"))
return
end
local nIdx = self._mapNode.ContentList.nCurTab
if nIdx == 1 then
local nModifierState = self.mapBuild and self.mapBuild.nModifierState
local bPotentialModifiable = nModifierState == AllEnum.BuildModifierState.NotModified or nModifierState == AllEnum.BuildModifierState.NoteModified
local nModifiyCount = bPotentialModifiable and 1 or 0
if nModifiyCount < 1 then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("BuildModifier_ValidTips3"))
return
end
EventManager.Hit(EventId.OpenPanel, PanelId.BuildModifierPotentialPanel, self.mapBuild.nBuildId)
else
local nModifierState = self.mapBuild and self.mapBuild.nModifierState
local bNoteModifiable = nModifierState == AllEnum.BuildModifierState.NotModified or nModifierState == AllEnum.BuildModifierState.PotentialModified
local nModifiyCount = bNoteModifiable and 1 or 0
if nModifiyCount < 1 then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("BuildModifier_ValidTips4"))
return
end
EventManager.Hit(EventId.OpenPanel, PanelId.BuildModifierMusicPanel, self.mapBuild.nBuildId)
end
end
function StarTowerBuildDetailCtrl:OnEvent_ContentChangeTab(nIdx)
self._panel.nCachedIdx = nIdx
local sEdit = ""
local nScoreFixedable = ConfigTable.GetConfigNumber("BuildModifierScoreMin")
if nScoreFixedable > self.mapBuild.nScore then
self._mapNode.EditNml.gameObject:SetActive(false)
self._mapNode.EditInvalid.gameObject:SetActive(true)
sEdit = ConfigTable.GetUIText("BuildModifier_ValidTips1")
NovaAPI.SetTMPText(self._mapNode.txtEdit, sEdit)
return
end
if nIdx == 1 then
local nModifierState = self.mapBuild and self.mapBuild.nModifierState
local bPotentialModifiable = nModifierState == AllEnum.BuildModifierState.NotModified or nModifierState == AllEnum.BuildModifierState.NoteModified
local nModifiyCount = bPotentialModifiable and 1 or 0
self._mapNode.EditNml.gameObject:SetActive(0 < nModifiyCount)
self._mapNode.EditInvalid.gameObject:SetActive(nModifiyCount == 0)
sEdit = orderedFormat(ConfigTable.GetUIText("BuildDetail_PotentialModifiyTitle"), nModifiyCount)
else
local nModifierState = self.mapBuild and self.mapBuild.nModifierState
local bNoteModifiable = nModifierState == AllEnum.BuildModifierState.NotModified or nModifierState == AllEnum.BuildModifierState.PotentialModified
local nModifiyCount = bNoteModifiable and 1 or 0
self._mapNode.EditNml.gameObject:SetActive(0 < nModifiyCount)
self._mapNode.EditInvalid.gameObject:SetActive(nModifiyCount == 0)
sEdit = orderedFormat(ConfigTable.GetUIText("BuildDetail_NoteModifiyTitle"), nModifiyCount)
end
NovaAPI.SetTMPText(self._mapNode.txtEdit, sEdit)
end
return StarTowerBuildDetailCtrl
@@ -61,14 +61,15 @@ StarTowerBuildDetailItemCtrl._mapEventConfig = {}
StarTowerBuildDetailItemCtrl._mapRedDotConfig = {}
function StarTowerBuildDetailItemCtrl:Refresh(mapData)
self.mapBuild = mapData
if self.mapBuild.bTrial == true then
self._mapNode.btnLeader.interactable = false
for k, v in pairs(self._mapNode.btnSub) do
v.interactable = false
end
for k, v in pairs(self._mapNode.btnDiscItem) do
v.interactable = false
end
local nBuildSource = PlayerData.Build:GetBuildSourceByData(mapData)
self.bTrialBuild = nBuildSource == AllEnum.BuildSource.Trial or nBuildSource == AllEnum.BuildSource.LimitedTrial or mapData.bTrial == true
local bInteractable = self.mapBuild.bTrial ~= true
self._mapNode.btnLeader.interactable = not self.bTrialBuild
for _, btnSub in pairs(self._mapNode.btnSub) do
btnSub.interactable = not self.bTrialBuild
end
for _, btnDiscItem in pairs(self._mapNode.btnDiscItem) do
btnDiscItem.interactable = bInteractable
end
self:RefreshInfo()
self:RefreshChar()
@@ -92,7 +93,7 @@ function StarTowerBuildDetailItemCtrl:RefreshChar()
local nCharTid = self.mapBuild.tbChar[i].nTid
local mapCharCfg = ConfigTable.GetData_Character(nCharTid)
if mapCharCfg ~= nil then
local nCharSkinId = PlayerData.Char:GetCharSkinId(nCharTid)
local nCharSkinId = PlayerData.Build:GetBuildCharSkinId(self.mapBuild, self.mapBuild.tbChar[i])
if self.mapBuild.bRankPreview then
nCharSkinId = mapCharCfg.DefaultSkinId
end
@@ -137,93 +138,54 @@ function StarTowerBuildDetailItemCtrl:OnBtnClick_Attr()
end
function StarTowerBuildDetailItemCtrl:OnBtnClick_Disc(btn, nIndex)
local nDiscId = self.mapBuild.tbDisc[nIndex]
if nDiscId == nil or nDiscId == 0 then
return
end
if self.mapBuild.bRankPreview == true then
EventManager.Hit(EventId.OpenPanel, PanelId.DiscSample, nDiscId)
elseif self.mapBuild.bTrial == true then
local mapDiscData = PlayerData.Disc:GetDiscById(nDiscId)
if mapDiscData == nil then
EventManager.Hit(EventId.OpenPanel, PanelId.DiscSample, nDiscId)
else
EventManager.Hit(EventId.OpenPanel, PanelId.Disc, nDiscId, {nDiscId})
end
elseif self.bTrialBuild then
self:OnBtnClick_DiscDetail(btn, nIndex)
elseif PlayerData.Disc:GetDiscById(nDiscId) ~= nil then
EventManager.Hit(EventId.OpenPanel, PanelId.Disc, nDiscId, self.mapBuild.tbDisc)
end
end
function StarTowerBuildDetailItemCtrl:OpenCharDetail(nIndex)
if self.bTrialBuild then
return
end
local nCharTid = self.mapBuild.tbChar[nIndex].nTid
if self.mapBuild.bRankPreview == true then
EventManager.Hit(EventId.OpenPanel, PanelId.CharBgTrialPanel, PanelId.CharInfoTrial, nCharTid)
else
local nIdx = 0
local nDiscId = 0
local tbAllDisc = {}
for _, nId in ipairs(self.mapBuild.tbDisc) do
nIdx = nIdx + 1
if nIdx == nIndex then
nDiscId = nId
end
table.insert(tbAllDisc, nId)
end
if nDiscId ~= 0 then
local mapDisc = PlayerData.Disc:GetDiscById(nDiscId)
if mapDisc ~= nil then
EventManager.Hit(EventId.OpenPanel, PanelId.Disc, nDiscId, tbAllDisc)
end
local tbCharId = {}
for _, mapChar in ipairs(self.mapBuild.tbChar) do
table.insert(tbCharId, mapChar.nTid)
end
EventManager.Hit(EventId.OpenPanel, PanelId.CharBgPanel, PanelId.CharInfo, nCharTid, tbCharId, true)
end
end
function StarTowerBuildDetailItemCtrl:OnBtnClick_Leader()
local nCharTid = self.mapBuild.tbChar[1].nTid
if self.mapBuild.bRankPreview == true then
EventManager.Hit(EventId.OpenPanel, PanelId.CharBgTrialPanel, PanelId.CharInfoTrial, nCharTid)
elseif self.mapBuild.bTrial == true then
local mapCharCfg = PlayerData.Char:GetCharDataByTid(nCharTid)
if mapCharCfg == nil then
EventManager.Hit(EventId.OpenPanel, PanelId.CharBgTrialPanel, PanelId.CharInfoTrial, nCharTid)
else
EventManager.Hit(EventId.OpenPanel, PanelId.CharBgPanel, PanelId.CharInfo, nCharTid, {nCharTid})
end
else
local tbCharId = {}
for _, v in ipairs(self.mapBuild.tbChar) do
table.insert(tbCharId, v.nTid)
end
EventManager.Hit(EventId.OpenPanel, PanelId.CharBgPanel, PanelId.CharInfo, tbCharId[1], tbCharId, true)
end
self:OpenCharDetail(1)
end
function StarTowerBuildDetailItemCtrl:OnBtnClick_Sub(btn, nIndex)
local nCharTid = self.mapBuild.tbChar[nIndex + 1].nTid
if self.mapBuild.bRankPreview == true then
EventManager.Hit(EventId.OpenPanel, PanelId.CharBgTrialPanel, PanelId.CharInfoTrial, nCharTid)
elseif self.mapBuild.bTrial == true then
local mapCharCfg = PlayerData.Char:GetCharDataByTid(nCharTid)
if mapCharCfg == nil then
EventManager.Hit(EventId.OpenPanel, PanelId.CharBgTrialPanel, PanelId.CharInfoTrial, nCharTid)
else
EventManager.Hit(EventId.OpenPanel, PanelId.CharBgPanel, PanelId.CharInfo, nCharTid, {nCharTid})
end
else
local tbCharId = {}
for _, v in ipairs(self.mapBuild.tbChar) do
table.insert(tbCharId, v.nTid)
end
EventManager.Hit(EventId.OpenPanel, PanelId.CharBgPanel, PanelId.CharInfo, tbCharId[nIndex + 1], tbCharId, true)
end
self:OpenCharDetail(nIndex + 1)
end
function StarTowerBuildDetailItemCtrl:OnBtnClick_DiscDetail(btn, nIndex)
if self.mapBuild.bTrial == true then
local nDiscId = self.mapBuild.tbDisc[nIndex]
EventManager.Hit(EventId.OpenPanel, PanelId.DiscSample, nDiscId)
return
end
local tbDisc = {}
local mapDiscData = {}
for i = 1, 6 do
tbDisc[i] = self.mapBuild.tbDisc[i] or 0
if 0 ~= tbDisc[i] then
local mapDisc = PlayerData.Disc:GetDiscById(tbDisc[i])
for nDiscIndex = 1, 6 do
local nDiscId = self.mapBuild.tbDisc[nDiscIndex] or 0
tbDisc[nDiscIndex] = nDiscId
if nDiscId ~= 0 then
local mapDisc = PlayerData.Build:GetBuildDiscByData(self.mapBuild, nDiscId)
if mapDisc == nil then
mapDisc = PlayerData.Disc:GetTrialDiscById(tbDisc[i])
printError("Build disc data missing: " .. tostring(self.mapBuild.nBuildId) .. ", " .. nDiscId)
return
end
if mapDisc == nil then
mapDisc = PlayerData.Disc:GetRankDetailDisc(tbDisc[i])
end
mapDiscData[tbDisc[i]] = mapDisc
mapDiscData[nDiscId] = mapDisc
end
end
EventManager.Hit(EventId.OpenPanel, PanelId.DiscSkill, tbDisc, self.mapBuild.tbNotes, mapDiscData)
local nSelectedDiscId = nIndex and tbDisc[nIndex] or nil
EventManager.Hit(EventId.OpenPanel, PanelId.DiscSkill, tbDisc, self.mapBuild.tbNotes, mapDiscData, nSelectedDiscId)
end
return StarTowerBuildDetailItemCtrl
@@ -160,7 +160,11 @@ function StarTowerBuildSaveCtrl:Awake()
if type(tbParam) == "table" then
self.bSuccess = tbParam[1]
self.mapBuild = tbParam[2]
self.bSweep = tbParam[4]
if type(tbParam[3]) == "function" then
self._fnCloseCallback = tbParam[3]
else
self.bSweep = tbParam[4]
end
end
end
function StarTowerBuildSaveCtrl:OnEnable()
@@ -182,6 +186,11 @@ function StarTowerBuildSaveCtrl:OnEnable()
cs_coroutine.start(wait)
end
function StarTowerBuildSaveCtrl:OnDisable()
if self._fnCloseCallback ~= nil then
local fnCloseCallback = self._fnCloseCallback
self._fnCloseCallback = nil
fnCloseCallback()
end
end
function StarTowerBuildSaveCtrl:OnDestroy()
end
@@ -60,13 +60,14 @@ function DepotDiscSkillCtrl:RefreshDiscSkill(mapNote, tbActiveSecondaryIds)
for i = 1, 9 do
self._mapNode.imgNote[i].gameObject:SetActive(false)
end
for nIdx, nNoteId in ipairs(self._panel.tbShowNote) do
for nIdx, sNoteId in ipairs(self._panel.tbShowNote) do
if nIdx <= #self._mapNode.imgNote then
self._mapNode.imgNote[nIdx].gameObject:SetActive(true)
nNoteId = tonumber(nNoteId)
local nNoteId = tonumber(sNoteId)
local nNoteCount = mapNote[nNoteId] == nil and 0 or mapNote[nNoteId]
local noteCfg = ConfigTable.GetData("SubNoteSkill", nNoteId)
local nNoteNeed = self._panel.mapNoteNeed[nNoteId]
local sIconPath = ""
if nNoteNeed ~= nil and 0 < nNoteNeed then
sIconPath = noteCfg.Icon .. AllEnum.DiscSkillIconSurfix.S_Light
else
@@ -154,6 +155,10 @@ function DepotDiscSkillCtrl:OnEvent_SelectDepotDiscSkill(nDiscId, nMainSkillId,
self._mapNode.goDiscSkillItem:ChangeWordRaycast(true)
end
function DepotDiscSkillCtrl:OnBtnClick_DiscDetail()
if self:GetPanelId() == PanelId.StarTowerFastBattle then
self._panel:OpenDepotDetailPanel(PanelId.DiscSkill, self._panel.tbDisc, self.tbMapNote, self._panel.mapDiscData)
return
end
EventManager.Hit(EventId.OpenPanel, PanelId.DiscSkill, self._panel.tbDisc, self.tbMapNote, self._panel.mapDiscData)
end
return DepotDiscSkillCtrl
@@ -234,6 +234,10 @@ function StarTowerDepotCtrl:OnEvent_SelectDepotTog(nTog)
self:SwitchTog()
end
function StarTowerDepotCtrl:OnBtnClick_Dictionary()
EventManager.Hit(EventId.OpenPanel, PanelId.DictionaryFR, self:GetPanelId() == PanelId.StarTowerFastBattle)
if self:GetPanelId() == PanelId.StarTowerFastBattle then
self._panel:OpenDepotDetailPanel(PanelId.DictionaryFR, true)
return
end
EventManager.Hit(EventId.OpenPanel, PanelId.DictionaryFR, false)
end
return StarTowerDepotCtrl
@@ -83,12 +83,14 @@ DiscSkillActiveCtrl._mapEventConfig = {
StarTowerShowDiscSkill = "OnEvent_ShowDiscSkillActive",
OpenNoteDepot = "OnEvent_OpenNoteDepot",
GamepadUIReopen = "OnEvent_Reopen",
StarTowerDiscTips = "OnEvent_StarTowerDiscTips"
StarTowerDiscTips = "OnEvent_StarTowerDiscTips",
StarTowerAutoAdvanceDiscSkill = "OnEvent_AutoAdvance"
}
DiscSkillActiveCtrl._mapRedDotConfig = {}
local panel_stage_note = 1
local panel_stage_skill = 2
local panel_stage_skill_upgrade = 3
local AUTO_ADVANCE_DELAY = 2
function DiscSkillActiveCtrl:InitNoteSkillList()
for k, v in ipairs(self._mapNode.imgNote) do
v.gameObject:SetActive(self._panel.tbShowNote[k] ~= nil)
@@ -195,10 +197,12 @@ function DiscSkillActiveCtrl:RefreshNoteSkill(tbNoteChange)
self._mapNode.txtTips[1].gameObject:SetActive(true)
self._mapNode.txtTips[2].gameObject:SetActive(true)
EventManager.Hit("Guide_PassiveCheck_Msg", "Guide_OpenDiscSkillActive")
self:TryAutoAdvance()
end
end, true, true, true)
else
EventManager.Hit(EventId.BlockInput, false)
self:TryAutoAdvance()
end
self._mapNode.txtTips[1].gameObject:SetActive(false)
self._mapNode.txtTips[2].gameObject:SetActive(false)
@@ -239,10 +243,13 @@ function DiscSkillActiveCtrl:RefreshDiscSkill(tbSkillList)
EventManager.Hit(EventId.BlockInput, false)
self._mapNode.txtTips[1].gameObject:SetActive(true)
self._mapNode.txtTips[2].gameObject:SetActive(true)
self:TryAutoAdvance()
end
end, true, true, true)
self._mapNode.txtTips[1].gameObject:SetActive(false)
self._mapNode.txtTips[2].gameObject:SetActive(false)
else
self:TryAutoAdvance()
end
end
function DiscSkillActiveCtrl:ShowDiscUpgradeCard()
@@ -255,6 +262,7 @@ function DiscSkillActiveCtrl:ShowDiscUpgradeCard()
self:AddTimer(1, nAnimLen, function()
self._mapNode.txtTips[1].gameObject:SetActive(true)
self._mapNode.txtTips[2].gameObject:SetActive(true)
self:TryAutoAdvance()
end, true, true, true)
EventManager.Hit(EventId.TemporaryBlockInput, nAnimLen)
WwiseManger:PlaySound("ui_roguelike_outfit_select")
@@ -277,6 +285,8 @@ function DiscSkillActiveCtrl:ShowDiscUpgradeCard()
end
function DiscSkillActiveCtrl:HidePanel()
self.bOpen = false
self._bAutoAdvance = false
self._bAutoAdvanceScheduled = false
GamepadUIManager.DisableGamepadUI("DiscSkillActiveCtrl")
EventManager.Hit("StarTowerSetButtonEnable", true, true)
PanelManager.InputEnable()
@@ -329,7 +339,33 @@ function DiscSkillActiveCtrl:OnDisable()
end
self.tbSkillItemCtrl = {}
end
function DiscSkillActiveCtrl:TryAutoAdvance()
if not self._bAutoAdvance or self._bAutoAdvanceScheduled or not self.bOpen then
return
end
if self._isAutoEnabledCallback ~= nil and not self._isAutoEnabledCallback() then
self._bAutoAdvance = false
return
end
self._bAutoAdvanceScheduled = true
local nSerial = self._nAutoAdvanceSerial or 0
self:AddTimer(1, AUTO_ADVANCE_DELAY, function()
self._bAutoAdvanceScheduled = false
if nSerial == (self._nAutoAdvanceSerial or 0) and self._bAutoAdvance and self.bOpen and (self._isAutoEnabledCallback == nil or self._isAutoEnabledCallback()) then
self:OnBtnClick_BtnBg()
end
end, true, true, true)
end
function DiscSkillActiveCtrl:OnEvent_AutoAdvance(callback, isAutoEnabledCallback)
if not self.bOpen or self.callback ~= callback then
return
end
self._bAutoAdvance = true
self._isAutoEnabledCallback = isAutoEnabledCallback
end
function DiscSkillActiveCtrl:OnBtnClick_BtnBg()
self._nAutoAdvanceSerial = (self._nAutoAdvanceSerial or 0) + 1
self._bAutoAdvanceScheduled = false
if self.nPanelStage == panel_stage_note then
if self.tbParam.tbSkill ~= nil and next(self.tbParam.tbSkill) ~= nil then
self.nPanelStage = panel_stage_skill
@@ -108,13 +108,16 @@ NpcOptionCtrl._mapNodeConfig = {
NpcOptionCtrl._mapEventConfig = {
RefreshStarTowerCoin = "OnEvent_SetCoin",
GamepadUIChange = "OnEvent_GamepadUIChange",
GamepadUIReopen = "OnEvent_Reopen"
GamepadUIReopen = "OnEvent_Reopen",
StarTowerAutoSelectEvent = "OnEvent_AutoSelectEvent",
StarTowerAutoDisplayEvent = "OnEvent_AutoDisplayEvent"
}
NpcOptionCtrl._mapRedDotConfig = {}
function NpcOptionCtrl:Awake()
self.PanelOffset = Vector3.zero
self.tbGamepadUINode = self:GetGamepadUINode()
self.nCoin = 0
self._nAutoDisplaySerial = 0
self:SetSprite_Coin(self._mapNode.imgCoin, AllEnum.CoinItemId.FixedRogCurrency)
NovaAPI.SetTMPText(self._mapNode.txtCoinCount, self.nCoin)
end
@@ -156,6 +159,7 @@ function NpcOptionCtrl:OnEnable()
self.nStarTowerId = tbParams[13]
self.tbNote = tbParams[14]
self.tbDisc = tbParams[15]
self.mapAutoDisplay = tbParams[16]
NovaAPI.SetTMPText(self._mapNode.txtCoinCount, self:ThousandsNumber(self.nCoin))
self._mapNode.imgMask.gameObject:SetActive(false)
self._mapNode.goContent.gameObject:SetActive(false)
@@ -175,6 +179,7 @@ function NpcOptionCtrl:OnEnable()
else
self:RefreshHighDanger(nEventId, nNpcSkinId, nTalkId)
end
self:SetAutoDisplay(self.mapAutoDisplay)
end
cs_coroutine.start(wait)
end
@@ -635,12 +640,12 @@ function NpcOptionCtrl:OnDestroy()
end
function NpcOptionCtrl:OnRelease()
end
function NpcOptionCtrl:ClosePanel(bOnlyTalk, nSelectIdx, nEventId)
function NpcOptionCtrl:ClosePanel(bOnlyTalk, nSelectIdx, nEventId, bAuto)
local callback = function()
GamepadUIManager.DisableGamepadUI("NpcOptionCtrl")
PanelManager.InputEnable()
if self.callback ~= nil and not bOnlyTalk then
self.callback(nSelectIdx, nEventId)
self.callback(nSelectIdx, nEventId, false, bAuto == true)
end
EventManager.Hit(EventId.ClosePanel, PanelId.NpcOptionPanel)
end
@@ -688,6 +693,85 @@ function NpcOptionCtrl:OnBtnClick_Select(btn)
end
self:ClosePanel(false, nIdx, self.nEventId)
end
function NpcOptionCtrl:PreviewAutoSelect(nIndex)
local btnChoose = self._mapNode.btnChoose[nIndex]
if btnChoose == nil or not btnChoose.interactable then
return false
end
local nReadyDelay = 0
if self.bSelectTalk then
nReadyDelay = self:OnBtnClick_Talk() or 0
end
for k, selectNode in ipairs(self._mapNode.Select) do
selectNode:SetActive(k == nIndex)
end
self.nSelectIdx = nIndex
GamepadUIManager.SetSelectedUI(btnChoose.gameObject)
return true, nReadyDelay
end
function NpcOptionCtrl:SetAutoDisplay(mapAutoDisplay)
if type(mapAutoDisplay) ~= "table" then
return
end
self.mapAutoDisplay = mapAutoDisplay
self._nAutoDisplaySerial = self._nAutoDisplaySerial + 1
self:StartAutoDisplay(self._nAutoDisplaySerial)
end
function NpcOptionCtrl:StartAutoDisplay(nSerial)
local mapAutoDisplay = self.mapAutoDisplay
local IsAutoDisplayEnabled = function()
if nSerial ~= self._nAutoDisplaySerial then
return false
end
return type(mapAutoDisplay.isEnabledCallback) ~= "function" or mapAutoDisplay.isEnabledCallback()
end
local PreviewAndReady = function()
if not IsAutoDisplayEnabled() then
return
end
local bPreviewSuccess, nReadyDelay = self:PreviewAutoSelect(mapAutoDisplay.nTargetIndex)
if not bPreviewSuccess or type(mapAutoDisplay.readyCallback) ~= "function" then
return
end
local Ready = function()
if IsAutoDisplayEnabled() then
mapAutoDisplay.readyCallback()
end
end
if 0 < nReadyDelay then
self:AddTimer(1, nReadyDelay, Ready, true, true, true)
else
Ready()
end
end
if not self.bSelectTalk then
PreviewAndReady()
return
end
self:AddTimer(1, 2, function()
if not IsAutoDisplayEnabled() then
return
end
local nAnimLen = self.bSelectTalk and (self:OnBtnClick_Talk() or 0) or 0
if 0 < nAnimLen then
self:AddTimer(1, nAnimLen, PreviewAndReady, true, true, true)
else
PreviewAndReady()
end
end, true, true, true)
end
function NpcOptionCtrl:OnEvent_AutoDisplayEvent(nEventId, mapAutoDisplay)
if self.bOnlyTalk or self.nEventId ~= nEventId then
return
end
self:SetAutoDisplay(mapAutoDisplay)
end
function NpcOptionCtrl:OnEvent_AutoSelectEvent(nEventId, nIndex)
if self.nEventId ~= nEventId or not self:PreviewAutoSelect(nIndex) then
return
end
self:ClosePanel(false, nIndex, nEventId, true)
end
function NpcOptionCtrl:OnBtnSelect_Select(btn, nIndex)
if self.nSelectIdx == nIndex then
return
@@ -741,6 +825,7 @@ function NpcOptionCtrl:OnBtnClick_Talk(btn)
end
self:SetCoinActive(true)
self:SelectChoose()
return nAnimLen
end
function NpcOptionCtrl:LoadOffset(sPath)
return self:LoadAsset(sPath, typeof(Offset))
@@ -1,6 +1,7 @@
local PotentialLevelUpCtrl = class("PotentialLevelUpCtrl", BaseCtrl)
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
local StarTowerSettingGate = require("Game.Adventure.StarTower.StarTowerSettingGate")
PotentialLevelUpCtrl._mapNodeConfig = {
blurBg = {},
menuBg = {},
@@ -62,7 +63,8 @@ PotentialLevelUpCtrl._mapNodeConfig = {
}
PotentialLevelUpCtrl._mapEventConfig = {
ShowPotentialLevelUp = "OnEvent_ShowPotentialLevelUp",
GamepadUIReopen = "OnEvent_Reopen"
GamepadUIReopen = "OnEvent_Reopen",
StarTowerAutoClosePotentialLevelUp = "OnEvent_AutoClose"
}
PotentialLevelUpCtrl._mapRedDotConfig = {}
function PotentialLevelUpCtrl:Refresh(tbPotential)
@@ -76,6 +78,7 @@ function PotentialLevelUpCtrl:Refresh(tbPotential)
self:RefreshPotentialList(tbPotential)
end
function PotentialLevelUpCtrl:RefreshPotentialList(tbPotential)
local nSettingSerial = StarTowerSettingGate.Begin()
local tbCardObj = {}
local bSimple = PlayerData.StarTower:GetPotentialDescSimple()
for k, v in ipairs(self._mapNode.potentialCard) do
@@ -111,11 +114,31 @@ function PotentialLevelUpCtrl:RefreshPotentialList(tbPotential)
end
end
EventManager.Hit(EventId.BlockInput, false)
StarTowerSettingGate.ReadyAfter(self, nSettingSerial, math.max(NovaAPI.GetAnimClipLength(self._mapNode.animCtrl, {
"PotentialSelectPanel_in"
}), NovaAPI.GetAnimClipLength(self._mapNode.potentialCard[1].animCtrl, {
"tc_newperk_card_in"
})))
self:TryAutoClose()
end
cs_coroutine.start(wait)
else
self:TryAutoClose()
end
end
function PotentialLevelUpCtrl:TryAutoClose()
if not self._bAutoClosePending or not self._mapNode.contentRoot.gameObject.activeSelf then
return
end
StarTowerSettingGate.Transition(self, 0.3)
self:AddTimer(1, 0.3, function()
if self._bAutoClosePending and (self._isAutoEnabledCallback == nil or self._isAutoEnabledCallback()) then
self:OnBtnClick_MaskBg()
end
end, true, true, true)
end
function PotentialLevelUpCtrl:HidePanel()
StarTowerSettingGate.Begin()
PanelManager.InputEnable()
EventManager.Hit("StarTowerSetButtonEnable", true, true)
self._mapNode.blurBg.gameObject:SetActive(false)
@@ -140,11 +163,21 @@ end
function PotentialLevelUpCtrl:OnEnable()
end
function PotentialLevelUpCtrl:OnDisable()
StarTowerSettingGate.Clear(self)
end
function PotentialLevelUpCtrl:OnBtnClick_MaskBg()
self._bAutoClosePending = false
self:HidePanel()
end
function PotentialLevelUpCtrl:OnEvent_AutoClose(callback, isAutoEnabledCallback)
if not self._mapNode.blurBg.gameObject.activeSelf or self.callback ~= callback then
return
end
self._bAutoClosePending = true
self._isAutoEnabledCallback = isAutoEnabledCallback
end
function PotentialLevelUpCtrl:OnBtnClick_Depot()
StarTowerSettingGate.Begin()
self.bOpenDepot = true
EventManager.Hit("StarTowerSetButtonEnable", false, false)
CS.GameCameraStackManager.Instance:OpenMainCamera()
@@ -155,6 +188,7 @@ function PotentialLevelUpCtrl:OnBtnClick_Depot()
end
function PotentialLevelUpCtrl:OnEvent_CloseStarTowerDepot()
if self.bOpenDepot then
local nSettingSerial = StarTowerSettingGate.Begin()
self.bOpenDepot = false
EventManager.Hit("StarTowerSetButtonEnable", false, false)
self._mapNode.blurBg.gameObject:SetActive(true)
@@ -171,10 +205,16 @@ function PotentialLevelUpCtrl:OnEvent_CloseStarTowerDepot()
end
end
end
cs_coroutine.start(wait)
cs_coroutine.start(function()
wait()
StarTowerSettingGate.ReadyAfter(self, nSettingSerial, NovaAPI.GetAnimClipLength(self._mapNode.potentialCard[1].animCtrl, {
"tc_newperk_card_switch_up"
}))
end)
end
end
function PotentialLevelUpCtrl:OnEvent_ShowPotentialLevelUp(tbPotential, callback)
StarTowerSettingGate.Begin()
self._panel:SetTop(self.canvas)
if self._mapNode.blurBg.gameObject.activeSelf == false then
PanelManager.InputDisable()
@@ -1,6 +1,7 @@
local PotentialSelectCtrl = class("PotentialSelectCtrl", BaseCtrl)
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
local StarTowerSettingGate = require("Game.Adventure.StarTower.StarTowerSettingGate")
PotentialSelectCtrl._mapNodeConfig = {
blurBg = {},
menuBg = {},
@@ -20,6 +21,10 @@ PotentialSelectCtrl._mapNodeConfig = {
sComponentName = "NaviButton",
callback = "OnBtnClick_Depot"
},
goDepotRoot = {
sNodeName = "imgBg_Back_Log",
sComponentName = "GameObject"
},
imgUpgradeTitle = {},
imgSelectTitle = {},
txtUpgrade = {sComponentName = "TMP_Text"},
@@ -86,14 +91,17 @@ PotentialSelectCtrl._mapEventConfig = {
StarTowerPotentialSelect = "OnEvent_StarTowerPotentialSelect",
RefreshStarTowerCoin = "OnEvent_SetCoin",
GamepadUIChange = "OnEvent_GamepadUIChange",
GamepadUIReopen = "OnEvent_Reopen"
GamepadUIReopen = "OnEvent_Reopen",
StarTowerAutoSelectPotential = "OnEvent_AutoSelectPotential",
StarTowerAutoDecisionStateChanged = "OnEvent_AutoDecisionStateChanged"
}
PotentialSelectCtrl._mapRedDotConfig = {}
function PotentialSelectCtrl:Refresh(nEventId, tbPotential, mapPotential, nType, nLevel, tbNewIds, mapRoll, nCoin, tbLuckyIds, bAfterRoll, tbRecommend)
function PotentialSelectCtrl:Refresh(nEventId, tbPotential, mapPotential, nType, nLevel, tbNewIds, mapRoll, nCoin, tbLuckyIds, bAfterRoll, tbRecommend, nAutoSelectIdx)
self.nEventId = nEventId
self._nAutoSelectIdx = nAutoSelectIdx
if tbPotential == nil or #tbPotential == 0 then
local completeFunc = function(nEventId, tbPotential, mapPotential, nType, nLevel, tbNewIds, mapRoll, nCoin, tbLuckyIds, tbRecommend)
self:SelectComplete(nEventId, tbPotential, mapPotential, nType, nLevel, tbNewIds, mapRoll, nCoin, tbLuckyIds, tbRecommend)
local completeFunc = function(nEventId, tbPotential, mapPotential, nType, nLevel, tbNewIds, mapRoll, nCoin, tbLuckyIds, tbRecommend, nAutoSelectIdx)
self:SelectComplete(nEventId, tbPotential, mapPotential, nType, nLevel, tbNewIds, mapRoll, nCoin, tbLuckyIds, tbRecommend, nAutoSelectIdx)
end
self.callback(1000, nEventId, completeFunc)
traceback("潜能卡选择列表为空!!!")
@@ -124,6 +132,7 @@ function PotentialSelectCtrl:Refresh(nEventId, tbPotential, mapPotential, nType,
end
self._mapNode.RollButton:SetActive(mapRoll and mapRoll.CanReRoll and nType ~= 2)
self._mapNode.btnConfirm.gameObject:SetActive(false)
self._mapNode.goDepotRoot:SetActive(self._panel.nStarTowerId ~= 999)
self.nCoin = nCoin
NovaAPI.SetTMPText(self._mapNode.txtCoinCount, self:ThousandsNumber(self.nCoin))
self.mapRoll = mapRoll
@@ -201,7 +210,22 @@ function PotentialSelectCtrl:RefreshCoin(nCoin, mapRoll)
NovaAPI.SetTMPText(self._mapNode.txtRollCostCount, mapRoll.ReRollPrice)
NovaAPI.SetTMPColor(self._mapNode.txtRollCostCount, nCoin < mapRoll.ReRollPrice and Red_Unable or Blue_Normal)
end
function PotentialSelectCtrl:ReadySettingPresentationAfter(mapPresentation, nDuration)
if self._mapSettingPresentation ~= mapPresentation then
return
end
self:AddTimer(1, nDuration, function()
if self._mapSettingPresentation == mapPresentation then
mapPresentation.bReady = true
StarTowerSettingGate.Ready(self, mapPresentation.nSerial)
end
end, true, true, true)
end
function PotentialSelectCtrl:RefreshPotentialList(tbPotential, mapPotential, tbNewIds, tbLuckyIds, bAfterRoll, tbRecommendParam)
local mapPresentation = {
nSerial = StarTowerSettingGate.Begin()
}
self._mapSettingPresentation = mapPresentation
local tbRecommend = {}
if 0 < #tbRecommendParam then
if tbRecommendParam[1].nLevel == nil then
@@ -318,7 +342,13 @@ function PotentialSelectCtrl:RefreshPotentialList(tbPotential, mapPotential, tbN
end
end
end
cs_coroutine.start(wait)
cs_coroutine.start(function()
wait()
local nRollAnimTime = NovaAPI.GetAnimClipLength(self._mapNode.potentialCard[1].animCtrl, {
"tc_newperk_card_RollEffect"
})
self:ReadySettingPresentationAfter(mapPresentation, math.max(nAnimTime, bAfterRoll and nRollAnimTime or 0))
end)
end
end
function PotentialSelectCtrl:SetSimpleState()
@@ -346,70 +376,87 @@ function PotentialSelectCtrl:PlayCharVoice(tbPotential)
end
PlayerData.Voice:PlayCharVoice(sVoiceKey, nCharId)
end
function PotentialSelectCtrl:SelectComplete(nEventId, tbPotential, mapPotential, nType, nLevel, tbNewIds, mapRoll, nCoin, tbLuckyIds, tbRecommend)
if nEventId == 0 then
if self.bSkip then
function PotentialSelectCtrl:SelectComplete(nEventId, tbPotential, mapPotential, nType, nLevel, tbNewIds, mapRoll, nCoin, tbLuckyIds, tbRecommend, nAutoSelectIdx, readyCallback)
self._mapSettingPresentation = nil
StarTowerSettingGate.Begin()
self:PlaySelectCollect(nEventId == 0, function()
if nEventId == 0 then
self:HidePanel()
if nil ~= self.callback then
if self.callback ~= nil then
self.callback(nEventId, -1)
end
return
end
EventManager.Hit(EventId.BlockInput, true)
self._mapNode.blurBg.gameObject:SetActive(false)
self._mapNode.menuBg.gameObject:SetActive(true)
self._mapNode.btnConfirm.gameObject:SetActive(false)
EventManager.Hit("StarTowerSetButtonEnable", true, false)
CS.GameCameraStackManager.Instance:OpenMainCamera()
for k, v in ipairs(self._mapNode.potentialCard) do
if k == self.nSelectIdx then
local animCtrl = v.gameObject:GetComponent("Animator")
animCtrl:Play("tc_newperk_card_out")
local fxRoot = v.gameObject.transform:Find("FX")
local fx = v.gameObject.transform:Find("FX/glow")
local OutAnimFinish = function()
local beginPos = fxRoot.transform.position
local controlPos = Vector3(3, 5, 0)
local endPos = self._mapNode.depotPoint.transform.position
local wait = function()
WwiseAudioMgr:PlaySound("ui_roguelike_card_flyby")
local totalMoveTime = 0.3
local moveTime = 0
local normalizedTime = 0
while normalizedTime < 1 do
moveTime = moveTime + CS.UnityEngine.Time.unscaledDeltaTime
normalizedTime = moveTime / totalMoveTime
normalizedTime = normalizedTime <= 1 and normalizedTime or 1
local x, y, z = UTILS.GetBezierPointByT(beginPos, controlPos, endPos, normalizedTime)
local angleZ = 100 * normalizedTime * 2
angleZ = angleZ <= 100 and angleZ or 100
fxRoot.transform.localEulerAngles = Vector3(0, 0, angleZ)
fxRoot.transform.position = Vector3(x, y, z)
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
end
self._mapNode.cardFinishParticle:SetActive(true)
fx.gameObject:SetActive(false)
coroutine.yield(CS.UnityEngine.WaitForSecondsRealtime(0.5))
EventManager.Hit(EventId.BlockInput, false)
self:HidePanel()
fxRoot.transform.position = beginPos
fxRoot.transform.localEulerAngles = Vector3(0, 0, 0)
fx.gameObject:SetActive(true)
if nil ~= self.callback then
self.callback(nEventId, -1)
end
end
cs_coroutine.start(wait)
end
self:SetAnimationCallback(animCtrl, OutAnimFinish)
else
v.gameObject:SetActive(false)
else
self._mapNode.cardFinishParticle:SetActive(false)
self:Refresh(nEventId, tbPotential, mapPotential, nType, nLevel, tbNewIds, mapRoll, nCoin, tbLuckyIds, false, tbRecommend, nAutoSelectIdx)
if type(readyCallback) == "function" then
readyCallback()
end
end
end)
end
function PotentialSelectCtrl:PlaySelectCollect(bLastSelection, completeCallback)
if self.bSkip then
self:SetSubmitInputBlocked(false)
completeCallback()
return
end
if self.selectTimer ~= nil then
self.selectTimer:Cancel()
self.selectTimer = nil
end
self:SetSubmitInputBlocked(true)
self._mapNode.btnConfirm.gameObject:SetActive(false)
self._mapNode.goDepotRoot:SetActive(false)
self._mapNode.RollButton:SetActive(false)
if bLastSelection then
self._mapNode.blurBg.gameObject:SetActive(false)
self._mapNode.menuBg.gameObject:SetActive(true)
EventManager.Hit("StarTowerSetButtonEnable", true, false)
CS.GameCameraStackManager.Instance:OpenMainCamera()
end
for nIndex, ctrlCard in ipairs(self._mapNode.potentialCard) do
if nIndex == self.nSelectIdx then
local animCtrl = ctrlCard.gameObject:GetComponent("Animator")
animCtrl:Play("tc_newperk_card_out")
local fxRoot = ctrlCard.gameObject.transform:Find("FX")
local fx = ctrlCard.gameObject.transform:Find("FX/glow")
local OutAnimFinish = function()
local beginPos = fxRoot.transform.position
local controlPos = Vector3(3, 5, 0)
local endPos = self._mapNode.depotPoint.transform.position
local wait = function()
WwiseAudioMgr:PlaySound("ui_roguelike_card_flyby")
local totalMoveTime = 0.3
local moveTime = 0
local normalizedTime = 0
while normalizedTime < 1 do
moveTime = moveTime + CS.UnityEngine.Time.unscaledDeltaTime
normalizedTime = math.min(moveTime / totalMoveTime, 1)
local nPosX, nPosY, nPosZ = UTILS.GetBezierPointByT(beginPos, controlPos, endPos, normalizedTime)
local angleZ = math.min(100 * normalizedTime * 2, 100)
fxRoot.transform.localEulerAngles = Vector3(0, 0, angleZ)
fxRoot.transform.position = Vector3(nPosX, nPosY, nPosZ)
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
end
self._mapNode.cardFinishParticle:SetActive(true)
fx.gameObject:SetActive(false)
coroutine.yield(CS.UnityEngine.WaitForSecondsRealtime(0.5))
fxRoot.transform.position = beginPos
fxRoot.transform.localEulerAngles = Vector3(0, 0, 0)
fx.gameObject:SetActive(true)
self:SetSubmitInputBlocked(false)
completeCallback()
end
cs_coroutine.start(wait)
end
self:SetAnimationCallback(animCtrl, OutAnimFinish)
else
ctrlCard.gameObject:SetActive(false)
end
end
if bLastSelection then
self._mapNode.animCtrl:Play("PotentialSelectPanel_out")
EventManager.Hit("Guide_Potential_SelectComplete")
else
self:Refresh(nEventId, tbPotential, mapPotential, nType, nLevel, tbNewIds, mapRoll, nCoin, tbLuckyIds, false, tbRecommend)
end
end
function PotentialSelectCtrl:MoveConfirmButton(btnCard)
@@ -423,7 +470,10 @@ function PotentialSelectCtrl:MoveConfirmButton(btnCard)
end
end
function PotentialSelectCtrl:HidePanel()
self._mapSettingPresentation = nil
StarTowerSettingGate.Begin()
self.bOpen = false
self._nAutoSelectIdx = nil
if not self.bSkip then
PanelManager.InputEnable()
EventManager.Hit("StarTowerSetButtonEnable", true, true)
@@ -435,6 +485,7 @@ function PotentialSelectCtrl:HidePanel()
end
function PotentialSelectCtrl:Awake()
self.nRecommendIdx = 1
self._bSubmitInputBlocked = false
self.canvas = self.gameObject:GetComponent("Canvas")
self.nInitSortingOrder = NovaAPI.GetCanvasSortingOrder(self.canvas)
self.btnConfirmPosY = self._mapNode.rtBtnConfirm.localPosition.y
@@ -463,6 +514,10 @@ function PotentialSelectCtrl:OnEnable()
end
end
function PotentialSelectCtrl:OnDisable()
self._mapSettingPresentation = nil
StarTowerSettingGate.Clear(self)
self._nAutoSelectIdx = nil
self:SetSubmitInputBlocked(false)
for k, v in ipairs(self._mapNode.btnPotential) do
v.onSelect:RemoveListener(self.handler[k])
end
@@ -472,6 +527,8 @@ function PotentialSelectCtrl:OnDisable()
end
end
function PotentialSelectCtrl:OnBtnClick_Depot()
self._mapSettingPresentation = nil
StarTowerSettingGate.Begin()
self.bOpenDepot = true
EventManager.Hit("StarTowerSetButtonEnable", false, false)
CS.GameCameraStackManager.Instance:OpenMainCamera()
@@ -492,31 +549,50 @@ function PotentialSelectCtrl:OnBtnClick_ChangeDesc()
end
function PotentialSelectCtrl:OnBtnClick_Confirm()
if self.nSelectIdx ~= 0 and self.callback ~= nil then
local completeFunc = function(nEventId, tbPotential, mapPotential, nType, nLevel, tbNewIds, mapRoll, nCoin, tbLuckyIds, tbRecommend)
EventManager.Hit(EventId.BlockInput, false)
self:SelectComplete(nEventId, tbPotential, mapPotential, nType, nLevel, tbNewIds, mapRoll, nCoin, tbLuckyIds, tbRecommend)
local completeFunc = function(nEventId, tbPotential, mapPotential, nType, nLevel, tbNewIds, mapRoll, nCoin, tbLuckyIds, tbRecommend, nAutoSelectIdx, readyCallback)
self:SelectComplete(nEventId, tbPotential, mapPotential, nType, nLevel, tbNewIds, mapRoll, nCoin, tbLuckyIds, tbRecommend, nAutoSelectIdx, readyCallback)
if self.nPanelType == 2 then
PlayerData.Voice:PlayCharVoice("thankLvup", 9133, nil, true)
end
end
EventManager.Hit(EventId.BlockInput, true)
self.callback(self.nSelectIdx, self.nEventId, completeFunc)
local bAuto = self._bAutoSubmitting == true
self._bAutoSubmitting = false
self:SetSubmitInputBlocked(true)
self.callback(self.nSelectIdx, self.nEventId, completeFunc, false, bAuto)
end
end
function PotentialSelectCtrl:OnBtnClick_Roll()
if not self.callback then
if not (self.callback and self.mapRoll and self.mapRoll.CanReRoll) or self.bSpecialPotential then
self._bAutoSubmitting = false
return
end
if self.nCoin < self.mapRoll.ReRollPrice then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("StarTower_ReRoll_NotEnoughCoin"))
return
end
local completeFunc = function(nEventId, tbPotential, mapPotential, nType, nLevel, tbNewIds, mapRoll, nCoin, tbLuckyIds, tbRecommend)
EventManager.Hit(EventId.BlockInput, false)
self:Refresh(nEventId, tbPotential, mapPotential, nType, nLevel, tbNewIds, mapRoll, nCoin, tbLuckyIds, true, tbRecommend)
local completeFunc = function(nEventId, tbPotential, mapPotential, nType, nLevel, tbNewIds, mapRoll, nCoin, tbLuckyIds, tbRecommend, nAutoSelectIdx, readyCallback)
self:SetSubmitInputBlocked(false)
self:Refresh(nEventId, tbPotential, mapPotential, nType, nLevel, tbNewIds, mapRoll, nCoin, tbLuckyIds, true, tbRecommend, nAutoSelectIdx)
if type(readyCallback) == "function" then
readyCallback()
end
end
EventManager.Hit(EventId.BlockInput, true)
self.callback(self.nSelectIdx, self.nEventId, completeFunc, true)
local bAuto = self._bAutoSubmitting == true
self._bAutoSubmitting = false
self:SetSubmitInputBlocked(true)
self.callback(self.nSelectIdx, self.nEventId, completeFunc, true, bAuto)
end
function PotentialSelectCtrl:SetSubmitInputBlocked(bBlocked)
if bBlocked then
self._mapSettingPresentation = nil
StarTowerSettingGate.Begin()
end
bBlocked = bBlocked == true
if self._bSubmitInputBlocked == bBlocked then
return
end
self._bSubmitInputBlocked = bBlocked
EventManager.Hit(EventId.BlockInput, bBlocked)
end
function PotentialSelectCtrl:OnBtnSelect_PotentialItem(btn, nIndex)
local nUIType = GamepadUIManager.GetCurUIType()
@@ -529,6 +605,11 @@ function PotentialSelectCtrl:OnBtnClick_PotentialItem(btn, nIndex)
return
end
WwiseAudioMgr:PlaySound("ui_roguelike_xintiao_slide")
StarTowerSettingGate.Transition(self, math.max(NovaAPI.GetAnimClipLength(self._mapNode.potentialCard[nIndex].animCtrl, {
"tc_newperk_card_switch_up"
}), NovaAPI.GetAnimClipLength(self._mapNode.potentialCard[nIndex].animCtrl, {
"tc_newperk_card_switch_down"
})))
self:MoveConfirmButton(btn)
for k, v in ipairs(self._mapNode.potentialCard) do
if k == nIndex then
@@ -542,7 +623,36 @@ function PotentialSelectCtrl:OnBtnClick_PotentialItem(btn, nIndex)
self:SelectScroll(nIndex)
self.nSelectIdx = nIndex
end
function PotentialSelectCtrl:OnEvent_StarTowerPotentialSelect(nEventId, tbPotential, mapPotential, nType, nLevel, tbNewIds, callback, mapRoll, nCoin, tbLuckyIds, tbRecommend)
function PotentialSelectCtrl:OnEvent_AutoSelectPotential(nEventId, nIndex, bReRoll)
if not self.bOpen or self.nEventId ~= nEventId or self.callback == nil then
return
end
if not self._mapNode.contentRoot.gameObject.activeSelf then
return
end
self._bAutoSubmitting = true
if bReRoll then
self:OnBtnClick_Roll()
return
end
local btn = self._mapNode.btnPotential[nIndex]
if btn == nil or self.tbPotential[nIndex] == nil then
self._bAutoSubmitting = false
return
end
self:OnBtnClick_PotentialItem(btn.gameObject, nIndex)
self:OnBtnClick_Confirm()
end
function PotentialSelectCtrl:OnEvent_AutoDecisionStateChanged(mapState)
local bAutoInactive = type(mapState) == "table" and (mapState.bEnabled ~= true or mapState.bPaused == true)
if bAutoInactive then
self._nAutoSelectIdx = nil
end
if bAutoInactive and mapState.bRequesting ~= true then
self:SetSubmitInputBlocked(false)
end
end
function PotentialSelectCtrl:OnEvent_StarTowerPotentialSelect(nEventId, tbPotential, mapPotential, nType, nLevel, tbNewIds, callback, mapRoll, nCoin, tbLuckyIds, tbRecommend, nAutoSelectIdx)
self.callback = callback
if tbPotential == nil or #tbPotential == 0 then
self.bSkip = true
@@ -553,7 +663,24 @@ function PotentialSelectCtrl:OnEvent_StarTowerPotentialSelect(nEventId, tbPotent
traceback("潜能卡选择列表为空!!!")
return
end
if self.bOpen and self.nEventId == nEventId then
self._nAutoSelectIdx = nAutoSelectIdx
if self.nSelectIdx ~= 0 and nAutoSelectIdx and self.tbPotential[nAutoSelectIdx] and self._mapNode.btnPotential[nAutoSelectIdx] then
GamepadUIManager.SetSelectedUI(self._mapNode.btnPotential[nAutoSelectIdx].gameObject)
self:OnBtnClick_PotentialItem(self._mapNode.btnPotential[nAutoSelectIdx].gameObject, nAutoSelectIdx)
end
local mapPresentation = self._mapSettingPresentation
if mapPresentation ~= nil and not self._bSubmitInputBlocked and not self.bOpenDepot then
mapPresentation.nSerial = StarTowerSettingGate.Begin()
if mapPresentation.bReady then
StarTowerSettingGate.Ready(self, mapPresentation.nSerial)
end
end
return
end
self._panel:SetTop(self.canvas)
self._mapSettingPresentation = nil
StarTowerSettingGate.Begin()
self.bSkip = false
local bCloseCamera = false
if not self.bOpen then
@@ -578,7 +705,7 @@ function PotentialSelectCtrl:OnEvent_StarTowerPotentialSelect(nEventId, tbPotent
end
self._mapNode.contentRoot.gameObject:SetActive(true)
self._mapNode.animCtrl:Play("PotentialSelectPanel_in")
self:Refresh(nEventId, tbPotential, mapPotential, nType, nLevel, tbNewIds, mapRoll, nCoin, tbLuckyIds, false, tbRecommend)
self:Refresh(nEventId, tbPotential, mapPotential, nType, nLevel, tbNewIds, mapRoll, nCoin, tbLuckyIds, false, tbRecommend, nAutoSelectIdx)
end
cs_coroutine.start(wait)
self._mapNode.btnConfirm.gameObject:SetActive(false)
@@ -587,6 +714,10 @@ function PotentialSelectCtrl:OnEvent_StarTowerPotentialSelect(nEventId, tbPotent
end
function PotentialSelectCtrl:OnEvent_CloseStarTowerDepot()
if self.bOpenDepot then
local mapPresentation = {
nSerial = StarTowerSettingGate.Begin()
}
self._mapSettingPresentation = mapPresentation
self.bOpenDepot = false
EventManager.Hit("StarTowerSetButtonEnable", false, false)
self._mapNode.blurBg.gameObject:SetActive(true)
@@ -599,11 +730,14 @@ function PotentialSelectCtrl:OnEvent_CloseStarTowerDepot()
self._mapNode.contentRoot.gameObject:SetActive(true)
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
EventManager.Hit(EventId.BlockInput, false)
self:ReadySettingPresentationAfter(mapPresentation, NovaAPI.GetAnimClipLength(self._mapNode.potentialCard[1].animCtrl, {
"tc_newperk_card_switch_up"
}))
for k, v in ipairs(self._mapNode.potentialCard) do
v:CloseBgEffect()
end
if self.nSelectIdx == 0 and GamepadUIManager.GetCurUIType() ~= AllEnum.GamepadUIType.Other then
self.nSelectIdx = 1
self.nSelectIdx = self:GetDefaultSelectIndex(1)
self:MoveConfirmButton(self._mapNode.btnPotential[self.nSelectIdx])
end
if self.nSelectIdx ~= 0 then
@@ -624,7 +758,7 @@ function PotentialSelectCtrl:OnEvent_GamepadUIChange(sName, nBeforeType, nAfterT
return
end
if nBeforeType == AllEnum.GamepadUIType.Other or nBeforeType == AllEnum.GamepadUIType.Mouse then
local nSelect = self.nSelectIdx ~= 0 and self.nSelectIdx or self.nRecommendIdx
local nSelect = self.nSelectIdx ~= 0 and self.nSelectIdx or self:GetDefaultSelectIndex()
GamepadUIManager.ClearSelectedUI()
GamepadUIManager.SetSelectedUI(self._mapNode.btnPotential[nSelect].gameObject)
end
@@ -637,7 +771,8 @@ function PotentialSelectCtrl:OnEvent_Reopen(sName)
self:OnEvent_CloseStarTowerDepot()
else
if self.nSelectIdx == 0 and GamepadUIManager.GetCurUIType() ~= AllEnum.GamepadUIType.Other then
self.nSelectIdx = 1
local nSelect = self:GetDefaultSelectIndex(1)
self:OnBtnClick_PotentialItem(self._mapNode.btnPotential[nSelect].gameObject, nSelect)
end
if self.nSelectIdx == 0 then
return
@@ -650,6 +785,7 @@ end
function PotentialSelectCtrl:OnEvent_SetCoin(nCount)
if self.mapRoll ~= nil and self.mapRoll.CanReRoll and nCount then
if nCount > self.nCoin then
StarTowerSettingGate.Transition(self, 1)
local twCoin = DOTween.To(function()
return self.nCoin
end, function(v)
@@ -665,6 +801,13 @@ function PotentialSelectCtrl:OnEvent_SetCoin(nCount)
end
end
end
function PotentialSelectCtrl:GetDefaultSelectIndex(nFallbackIndex)
local nAutoSelectIdx = self._nAutoSelectIdx
if nAutoSelectIdx and self.tbPotential[nAutoSelectIdx] and self._mapNode.btnPotential[nAutoSelectIdx] then
return nAutoSelectIdx
end
return nFallbackIndex or self.nRecommendIdx == 0 and 1 or self.nRecommendIdx
end
function PotentialSelectCtrl:ResetSelect(tbUI)
self.nSelectIdx = 0
self.bRecommended = self.nRecommendIdx ~= 0
@@ -677,18 +820,17 @@ function PotentialSelectCtrl:ResetSelect(tbUI)
})
local nAnimTime = nCardAnimTime > nPanelAnimTime and nCardAnimTime or nPanelAnimTime
nAnimTime = nAnimTime + 0.4
StarTowerSettingGate.Transition(self, nAnimTime)
if self.selectTimer ~= nil then
self.selectTimer:Cancel()
self.selectTimer = nil
end
self.selectTimer = self:AddTimer(1, nAnimTime, function()
if self.nSelectIdx == 0 then
local nSelect = self.nRecommendIdx == 0 and 1 or self.nRecommendIdx
local nSelect = self:GetDefaultSelectIndex()
GamepadUIManager.ClearSelectedUI()
GamepadUIManager.SetSelectedUI(self._mapNode.btnPotential[nSelect].gameObject)
if GamepadUIManager.GetCurUIType() == AllEnum.GamepadUIType.Mouse then
self:OnBtnClick_PotentialItem(self._mapNode.btnPotential[nSelect].gameObject, nSelect)
end
self:OnBtnClick_PotentialItem(self._mapNode.btnPotential[nSelect].gameObject, nSelect)
end
if self._panel.nStarTowerId ~= 999 then
if self.bSpecialPotential then
@@ -4,6 +4,7 @@ local BubbleVoiceManager = require("Game.Actor2D.BubbleVoiceManager")
local LocalSettingData = require("GameCore.Data.LocalSettingData")
local Actor2DManager = require("Game.Actor2D.Actor2DManager")
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
local TimerManager = require("GameCore.Timer.TimerManager")
local StarTowerShopCtrl = class("StarTowerShopCtrl", BaseCtrl)
local _, GrayColor = ColorUtility.TryParseHtmlString("#94aac0")
StarTowerShopCtrl._mapNodeConfig = {
@@ -146,6 +147,9 @@ StarTowerShopCtrl._mapEventConfig = {
StarTowerShoopSelectGoods = "OnEvent_SelectGoods",
GamepadUIReopen = "OnEvent_Reopen",
RefreshStarTowerCoin = "OnEvent_RefreshCoin",
StarTowerAutoShopExecute = "OnEvent_AutoShopExecute",
StarTowerAutoShopComplete = "OnEvent_AutoShopComplete",
StarTowerAutoDecisionStateChanged = "OnEvent_AutoDecisionStateChanged",
[EventId.ShowBubbleVoiceText] = "OnEvent_ShowBubbleVoiceText"
}
function StarTowerShopCtrl:Refresh()
@@ -408,6 +412,8 @@ function StarTowerShopCtrl:OpenPanel()
self.mapNoteCount = tbParam[7]
self.nStarTowerId = tbParam[8]
self.nCurLevel = tbParam[9]
self.autoStartCallback = tbParam[10]
self.bAutoShop = type(self.autoStartCallback) == "function"
self:OpenShop(tbGoodsList, self.nCoin)
end
CS.GameCameraStackManager.Instance:CloseMainCamera(0.1)
@@ -420,6 +426,11 @@ function StarTowerShopCtrl:OpenPanel()
Actor2DManager.SetBoardNPC2D_PNG(self._mapNode.trActor2D_PNG, self:GetPanelId(), self.nNPCId)
end
self:PlayEnterShopNPCVoice()
if self.bAutoShop then
local callback = self.autoStartCallback
self.autoStartCallback = nil
callback()
end
end
function StarTowerShopCtrl:OnEvent_AvgVoiceEnd(nDuration)
end
@@ -480,6 +491,8 @@ function StarTowerShopCtrl:OnEnable()
EventManager.Add(EventId.AvgVoiceEnd, self, self.OnEvent_AvgVoiceEnd)
end
function StarTowerShopCtrl:OnDisable()
self._timerAutoShopClose = nil
self._autoShopCloseCallback = nil
if self.mapGoodCtrl then
for nInstanceId, objCtrl in pairs(self.mapGoodCtrl) do
self:UnbindCtrlByNode(objCtrl)
@@ -617,6 +630,64 @@ end
function StarTowerShopCtrl:OnEvent_SelectGoods(nIndex)
self.nSelectIdx = nIndex
end
function StarTowerShopCtrl:OnEvent_AutoShopExecute(nSid, bReRoll)
if not self.bAutoShop or self.BuyCallback == nil then
return
end
if bReRoll then
local rerollCallback = function(nCoin, tbGoodsList, mapRoll)
self.nCoin = nCoin
self.tbGoods = self:SortGoods(tbGoodsList)
self.mapRoll = mapRoll
self:Refresh()
end
self.BuyCallback(self.nCaseId, nil, rerollCallback, true, true)
return
end
local buyCallback = function(nCoin)
for _, mapGoods in ipairs(self.tbGoods) do
if mapGoods.nSid == nSid then
mapGoods.bSoldOut = true
break
end
end
self.nCoin = nCoin
self:Refresh()
end
self.BuyCallback(self.nCaseId, nSid, buyCallback, false, true)
end
function StarTowerShopCtrl:OnEvent_AutoShopComplete(completeCallback)
if self.bAutoShop then
self._autoShopCloseCallback = completeCallback
if self._timerAutoShopClose ~= nil then
return
end
self._timerAutoShopClose = self:AddTimer(1, 1, function()
self._timerAutoShopClose = nil
local callback = self._autoShopCloseCallback
self._autoShopCloseCallback = nil
if not self.bAutoShop then
return
end
self.bAutoShop = false
self:OnBtn_CloseShop()
if type(callback) == "function" then
callback()
end
end, true, true, true)
end
end
function StarTowerShopCtrl:OnEvent_AutoDecisionStateChanged(mapState)
if type(mapState) ~= "table" then
return
end
self.bAutoShop = mapState.bEnabled == true and mapState.bPaused ~= true
if not self.bAutoShop then
TimerManager.Remove(self._timerAutoShopClose, false)
self._timerAutoShopClose = nil
self._autoShopCloseCallback = nil
end
end
function StarTowerShopCtrl:OnEvent_RefreshCoin(nCoin)
self.nCoin = nCoin
self:Refresh()