Files
StellaSora_DataLua/lua/game/ui/soldier/battleevent/soldierbattleeventctrl.lua
T
SL1900 8c4bd41668 Update - 1.13.0.124
EN: 1.13.0.124
CN: 1.13.0.124
JP: 1.13.0.128
KR: 1.13.0.130
2026-07-21 12:30:00 +09:00

253 lines
8.4 KiB
Lua

local SoldierBattleEventCtrl = class("SoldierBattleEventCtrl", BaseCtrl)
local SELECT_CARD_TYPE_STRATEGY = 2
SoldierBattleEventCtrl._mapNodeConfig = {
imgBgMain = {},
imgBgMain_Fx = {},
blur = {},
mainRoot = {
sNodeName = "----SafeAreaRoot----"
},
txtLabel = {
sComponentName = "TMP_Text",
sLanguageId = "SoldierBattleEvent_Label"
},
txtRemainRewardCount = {
sComponentName = "TMP_Text",
sLanguageId = "Soldier_BattleEvent_RemainRewardCount"
},
txtFinalPoint = {sComponentName = "TMP_Text"},
txtBtnBack = {
sComponentName = "TMP_Text",
sLanguageId = "SoldierBattleEvent_Back"
},
EventItem = {
nCount = 3,
sCtrlName = "Game.UI.Soldier.BattleEvent.SoldierBattleEventItemCtrl"
},
StrategyItem = {
nCount = 3,
sCtrlName = "Game.UI.Soldier.BattleEvent.SoldierAddBuffItemCtrl"
},
btnPolicy = {
sComponentName = "UIButton",
callback = "OnBtnClick_Policy"
},
btnReturn = {
sComponentName = "UIButton",
callback = "OnBtnClick_Return"
},
btnGuide = {
sComponentName = "UIButton",
callback = "OnBtnClick_Guide"
},
btnGoToDice = {
sComponentName = "UIButton",
callback = "OnBtnClick_btnGoToDice"
},
txtGoToDice = {
sComponentName = "TMP_Text",
sLanguageId = "SoldierBattleEvent_GoToDice"
},
imgFinalPoint = {},
ImgNum = {},
EventContainers = {},
StrategyContainers = {}
}
SoldierBattleEventCtrl._mapEventConfig = {
SoldierSelectEventBattle = "OnEvent_SoldierSelectEventBattle",
SoldierShowBattleEventPanel = "OnEvent_ShowBattleEventPanel",
SoldierDiceCasted = "RefreshDiceCasted",
SoldierStrategySelect = "OnEvent_SoldierStrategySelect",
SoldierRecommendPanel_Open = "HidePanel",
SoldierRecommendPanel_Close = "ShowPanel",
SoldierHandbookPanel_Open = "HidePanel",
SoldierHandbookPanel_Close = "ShowPanel"
}
SoldierBattleEventCtrl._mapRedDotConfig = {}
function SoldierBattleEventCtrl:Awake()
self.tbStrategyCardData = nil
self.nDicePoint = nil
self.bSkipEvent = false
local tbParams = self:GetPanelParam()
if tbParams ~= nil and 0 < #tbParams then
self.bSkipEvent = tbParams[1] or false
end
end
function SoldierBattleEventCtrl:OnEnable()
self._mapNode.imgFinalPoint.gameObject:SetActive(false)
self._mapNode.btnGoToDice.gameObject:SetActive(false)
if self.bSkipEvent then
self.bSkipEvent = false
self:OnSoldierEnterCardSelect()
return
end
self:RefreshBattleEventList()
self.nDicePoint = PlayerData.SoldierData:GetCurLevelData():GetEventBattleData().nPoint or 0
if self.tbStrategyCardData == nil and self.nDicePoint ~= nil and self.nDicePoint > 0 then
self:RefreshEventDicePoint()
end
end
function SoldierBattleEventCtrl:OnDisable()
self.tbStrategyCardData = nil
self.nDicePoint = nil
end
function SoldierBattleEventCtrl:GetAddBattleEventList()
local selectCardData = PlayerData.SoldierData:GetCurLevelData():GetEventBattleData()
local tbList = {}
local tbIds = selectCardData.tbIds or {}
if next(tbIds) ~= nil then
table.sort(tbIds, function(a, b)
local mapEventA = ConfigTable.GetData("SoldierEventBattlePool", a)
local mapEventB = ConfigTable.GetData("SoldierEventBattlePool", b)
return mapEventA.LevelName < mapEventB.LevelName
end)
end
for i = 1, 3 do
local nCardId = tbIds[i]
if nCardId ~= nil then
tbList[i] = {id = nCardId, index = i}
end
end
return tbList
end
function SoldierBattleEventCtrl:RefreshBattleEventList()
local tbList = self:GetAddBattleEventList()
if tbList == nil or #tbList <= 0 then
return
end
self._mapNode.btnGoToDice.gameObject:SetActive(true)
self._mapNode.EventContainers.gameObject:SetActive(true)
self._mapNode.StrategyContainers.gameObject:SetActive(false)
self._mapNode.btnPolicy.gameObject:SetActive(false)
for i = 1, 3 do
local item = self._mapNode.EventItem[i]
if item ~= nil then
item:SetItemData(tbList[i])
end
end
end
function SoldierBattleEventCtrl:RefreshStrategyCard()
if self.tbStrategyCardData == nil then
return
end
self._mapNode.EventContainers.gameObject:SetActive(false)
self._mapNode.StrategyContainers.gameObject:SetActive(true)
self._mapNode.btnGoToDice.gameObject:SetActive(false)
self._mapNode.imgFinalPoint.gameObject:SetActive(false)
self._mapNode.btnPolicy.gameObject:SetActive(false)
self._mapNode.ImgNum.gameObject:SetActive(false)
NovaAPI.SetTMPText(self._mapNode.txtLabel, ConfigTable.GetUIText("Soldier_Strategy_Title"))
for k, v in ipairs(self._mapNode.StrategyItem) do
local tbItem = {
id = self.tbStrategyCardData[k],
index = k
}
v:SetItemData(tbItem)
end
end
function SoldierBattleEventCtrl:RefreshDiceCasted()
self:RefreshBattleEventList()
self.nDicePoint = PlayerData.SoldierData:GetCurLevelData():GetEventBattleData().nPoint or 0
if self.tbStrategyCardData == nil and self.nDicePoint ~= nil and self.nDicePoint > 0 then
self:RefreshEventDicePoint()
end
end
function SoldierBattleEventCtrl:OnItemSelected(nIndex, nCardId)
self._nSelectedIndex = nIndex or 0
self._nSelectedCardId = nCardId or -1
for k, v in ipairs(self._mapNode.StrategyItem) do
v:SetSelected(k == self._nSelectedIndex)
end
self:_MoveConfirmBtnTo(self._nSelectedIndex)
end
function SoldierBattleEventCtrl:_MoveConfirmBtnTo(nIndex)
local btnConfirm = self._mapNode.btnConfirm
if btnConfirm == nil or btnConfirm.transform == nil then
return
end
local item = self._mapNode.EventItem and self._mapNode.EventItem[nIndex]
if item == nil then
if btnConfirm.gameObject ~= nil then
btnConfirm.gameObject:SetActive(false)
end
return
end
local v3Pos = item:GetConfirmBtnPosition()
if v3Pos == nil then
return
end
btnConfirm.transform.position = v3Pos
if btnConfirm.gameObject ~= nil then
btnConfirm.gameObject:SetActive(true)
end
end
function SoldierBattleEventCtrl:GetSelectedCardId()
return self._nSelectedCardId
end
function SoldierBattleEventCtrl:GetSelectedIndex()
return self._nSelectedIndex
end
function SoldierBattleEventCtrl:HidePanel()
self.bPrevMainRootVisible = self._mapNode.mainRoot.gameObject.activeSelf or false
self.bPrevBlurVisible = self._mapNode.blur.gameObject.activeSelf or false
self.bPrevImgBgMainVisible = self._mapNode.imgBgMain.gameObject.activeSelf or false
self.bPrevImgBgMain_FxVisible = self._mapNode.imgBgMain_Fx.gameObject.activeSelf or false
self._mapNode.mainRoot.gameObject:SetActive(false)
self._mapNode.blur.gameObject:SetActive(false)
self._mapNode.imgBgMain.gameObject:SetActive(false)
self._mapNode.imgBgMain_Fx.gameObject:SetActive(false)
end
function SoldierBattleEventCtrl:ShowPanel()
self._mapNode.mainRoot.gameObject:SetActive(self.bPrevMainRootVisible)
self._mapNode.blur.gameObject:SetActive(self.bPrevBlurVisible)
self._mapNode.imgBgMain.gameObject:SetActive(self.bPrevImgBgMainVisible)
self._mapNode.imgBgMain_Fx.gameObject:SetActive(self.bPrevImgBgMain_FxVisible)
for k, v in ipairs(self._mapNode.StrategyItem) do
v:SetSelected(k == self._nSelectedIndex)
end
end
function SoldierBattleEventCtrl:OnBtnClick_btnGoToDice()
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierResolveadisputePanel)
end
function SoldierBattleEventCtrl:OnBtnClick_Return()
CS.WwiseAudioManager.Instance:PostEvent("mode_900001_chess_ingame_transition")
self:HidePanel()
end
function SoldierBattleEventCtrl:OnBtnClick_Guide()
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierRecommendPanel, true)
end
function SoldierBattleEventCtrl:OnBtnClick_Policy()
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierHandbookPanel, AllEnum.SoldierHandbookType.StrategyCard)
end
function SoldierBattleEventCtrl:RefreshEventDicePoint()
self._mapNode.imgFinalPoint.gameObject:SetActive(true)
self._mapNode.btnGoToDice.gameObject:SetActive(false)
local sFinalPoint = ConfigTable.GetUIText("SoldierBattleEvent_FinalPoint")
NovaAPI.SetTMPText(self._mapNode.txtFinalPoint, sFinalPoint .. self.nDicePoint)
for i = 1, 3 do
local item = self._mapNode.EventItem[i]
if item ~= nil then
item:SetDiceCasted(self.nDicePoint)
end
end
end
function SoldierBattleEventCtrl:OnSoldierEnterCardSelect()
self.tbStrategyCardData = PlayerData.SoldierData:GetCurLevelData():GetSelectCardData()
self:RefreshStrategyCard()
end
function SoldierBattleEventCtrl:OnEvent_SoldierSelectEventBattle()
local bInSelectCard = PlayerData.SoldierData:GetCurLevelData():CheckInSelectCard()
if not bInSelectCard then
EventManager.Hit(EventId.ClosePanel, PanelId.SoldierBattleEventPanel)
else
self:OnSoldierEnterCardSelect()
end
end
function SoldierBattleEventCtrl:OnEvent_ShowBattleEventPanel()
self:ShowPanel()
end
function SoldierBattleEventCtrl:OnEvent_SoldierStrategySelect(nIndex, nCardId)
self:OnItemSelected(nIndex, nCardId)
end
return SoldierBattleEventCtrl