Files
StellaSora_DataLua/lua/game/ui/towerdefense/towerdefensemonsterinfoctrl.lua
SL1900 80af235e05 Update - 1.12.0.120
EN: 1.12.0.120
CN: 1.12.0.120
JP: 1.12.0.124
KR: 1.12.0.124
2026-06-30 14:30:00 +09:00

251 lines
9.4 KiB
Lua

local BaseCtrl = require("GameCore.UI.BaseCtrl")
local TowerDefenseMonsterInfoCtrl = class("TowerDefenseMonsterInfoCtrl", BaseCtrl)
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
local AvgData = PlayerData.Avg
TowerDefenseMonsterInfoCtrl._mapNodeConfig = {
goWindow = {sNodeName = "t_window"},
anit_window = {sNodeName = "t_window", sComponentName = "Animator"},
txtWindowTitle = {
sComponentName = "TMP_Text",
sLanguageId = "EnemyInfo_Window_Title"
},
goMonsterHead = {
sNodeName = "goMonsterHead",
sComponentName = "Transform"
},
txtMonsterName = {
sNodeName = "txtMonsterName",
sComponentName = "TMP_Text"
},
goMonsterType = {
sNodeName = "goMonsterType",
sComponentName = "GameObject"
},
got_fullscreen_blur_black = {
sNodeName = "t_fullscreen_blur_black",
sComponentName = "GameObject"
},
btnsnapshot = {
sNodeName = "snapshot",
sComponentName = "Button",
callback = "OnBtn_ClickClose"
},
btnClose = {
sComponentName = "UIButton",
callback = "OnBtn_ClickClose"
},
btn_Close = {
sComponentName = "Button",
callback = "OnBtn_ClickClose"
},
goAbility = {nCount = 3},
txtAbility = {nCount = 3, sComponentName = "TMP_Text"},
txtAbilityTitle = {nCount = 3, sComponentName = "TMP_Text"},
txtStory = {sComponentName = "TMP_Text"},
svEnemyList = {
sComponentName = "LoopScrollView"
},
rtContent = {
sNodeName = "rtInfoContent",
sComponentName = "RectTransform"
},
goStory = {
sComponentName = "RectTransform"
},
txtStoryTitle = {
sComponentName = "TMP_Text",
sLanguageId = "TowerDefense_Monster_Brief"
}
}
TowerDefenseMonsterInfoCtrl._mapEventConfig = {
OpenTowerDefenseMonsterInfo = "OnEvent_OpenTowerDefenseMonsterInfo"
}
function TowerDefenseMonsterInfoCtrl:OnEnable()
end
function TowerDefenseMonsterInfoCtrl:ShowPanel(nPreviewMonsterGroupId)
self._mapNode.goWindow:SetActive(false)
self._mapNode.got_fullscreen_blur_black:SetActive(true)
self.gameObject:SetActive(true)
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
self._mapNode.goWindow:SetActive(true)
self._mapNode.anit_window:Play("t_window_04_t_in")
local tbMonsterGroup = ConfigTable.GetData("PreviewMonsterGroup", nPreviewMonsterGroupId)
if tbMonsterGroup == nil then
printError("获取PreviewMonsterGroup配置失败!!!PreviewMonsterGroupId = " .. nPreviewMonsterGroupId)
return
end
self.tbMonster = tbMonsterGroup.MonsterIds
self.curSelect = 1
if self.tbMonster == nil or #self.tbMonster == 0 then
return
end
local bOpen = true
for _, v in ipairs(self.tbMonster) do
local monsterCfg = ConfigTable.GetData("Monster", v)
if nil == monsterCfg then
printError("读取Monster配置失败!!!monsterId = " .. v)
bOpen = false
end
end
if not bOpen then
return
end
local comp = function(a, b)
local monsterA = ConfigTable.GetData("Monster", a)
local monsterB = ConfigTable.GetData("Monster", b)
if monsterA == nil or monsterB == nil then
return
end
if monsterA.EpicLv ~= monsterB.EpicLv then
return monsterA.EpicLv < monsterB.EpicLv
else
return a < b
end
end
table.sort(self.tbMonster, comp)
local nMonsterId = self.tbMonster[self.curSelect]
self:RefreshMonsterInfo(nMonsterId)
self._mapNode.svEnemyList:SetAnim(0.03)
self._mapNode.svEnemyList:Init(#self.tbMonster, self, self.RefreshMonsterGrid, self.OnBtnClick_Grid)
end
cs_coroutine.start(wait)
end
function TowerDefenseMonsterInfoCtrl:RefreshMonsterGrid(goGrid, gridIndex)
local index = gridIndex + 1
local nMonsterId = self.tbMonster[index]
if nMonsterId == 0 then
return
end
if self.curSelect == index then
self.curSelectMonster = goGrid
end
local imgIcon = goGrid.transform:Find("btnGrid/AnimRoot/tc_head_01/--Basic--/imgIcon"):GetComponent("Image")
local goSelect = goGrid.transform:Find("btnGrid/AnimRoot/tc_head_01/--Common--").gameObject
local goBoss = goGrid.transform:Find("btnGrid/AnimRoot/tc_head_01/--Monster--/goBoss").gameObject
local goElite = goGrid.transform:Find("btnGrid/AnimRoot/tc_head_01/--Monster--/goElite").gameObject
local goLeader = goGrid.transform:Find("btnGrid/AnimRoot/tc_head_01/--Monster--/goLeader").gameObject
local mData = ConfigTable.GetData("Monster", nMonsterId)
if nil == mData then
printError("读取Monster配置失败!!!monsterId = " .. nMonsterId)
return
end
local mSkin = ConfigTable.GetData("MonsterSkin", mData.FAId)
if nil == mSkin then
printError("读取MonsterSkin配置失败!!!skinId = " .. mData.FAId)
return
end
local mManual = ConfigTable.GetData("MonsterManual", mSkin.MonsterManual)
if nil == mManual then
printError("读取MonsterSkin配置失败!!!MonsterManualId = " .. mSkin.MonsterManual)
return
end
self:SetPngSprite(imgIcon, mManual.Icon)
goSelect:SetActive(self.curSelect == index)
goBoss:SetActive(mData.EpicLv == GameEnum.monsterEpicType.LORD)
goLeader:SetActive(mData.EpicLv == GameEnum.monsterEpicType.LEADER)
goElite:SetActive(mData.EpicLv == GameEnum.monsterEpicType.ELITE)
end
function TowerDefenseMonsterInfoCtrl:RefreshMonsterInfo(nMonsterId)
local monsterData = ConfigTable.GetData("Monster", nMonsterId)
if nil == monsterData then
printError(string.format("Monster数据为空!!!id = [%s]", nMonsterId))
return
end
local monsterSkin = ConfigTable.GetData("MonsterSkin", monsterData.FAId)
if nil == monsterSkin then
printError(string.format("MonsterSkin数据为空!!!id = [%s]", monsterData.FAId))
return
end
local monsterAdjust = ConfigTable.GetData("MonsterValueTempleteAdjust", monsterData.Templete)
if nil == monsterAdjust then
printError(string.format("MonsterValueTempleteAdjust数据为空!!!id = [%s]", monsterData.Templete))
return
end
local monsterManual = ConfigTable.GetData("MonsterManual", monsterSkin.MonsterManual)
if nil == monsterManual then
printError(string.format("MonsterManual数据为空!!!id = [%s]", monsterSkin.MonsterManual))
return
end
NovaAPI.SetTMPText(self._mapNode.txtMonsterName, monsterManual.Name)
local imgIcon = self._mapNode.goMonsterHead:Find("--Basic--/imgIcon"):GetComponent("Image")
self:SetPngSprite(imgIcon, monsterManual.Icon)
if monsterData.EpicLv ~= GameEnum.monsterEpicType.NORMAL then
self._mapNode.goMonsterType:SetActive(true)
local goBoss = self._mapNode.goMonsterType.transform:GetChild(0).gameObject
goBoss:SetActive(monsterData.EpicLv == GameEnum.monsterEpicType.LORD)
local goElite = self._mapNode.goMonsterType.transform:GetChild(1).gameObject
goElite:SetActive(monsterData.EpicLv == GameEnum.monsterEpicType.ELITE)
local goLeader = self._mapNode.goMonsterType.transform:GetChild(2).gameObject
goLeader:SetActive(monsterData.EpicLv == GameEnum.monsterEpicType.LEADER)
else
self._mapNode.goMonsterType:SetActive(false)
end
local tdMonsterConfig = ConfigTable.GetData("TowerDefenseMonster", nMonsterId)
if tdMonsterConfig == nil then
printError(string.format("TowerDefenseMonster数据为空!!!id = [%s]", nMonsterId))
return
end
NovaAPI.SetTMPText(self._mapNode.txtStory, tdMonsterConfig.Brief)
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.goStory)
local eets = monsterAdjust.EET
self:RefreshAbility(monsterManual)
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtContent)
end
function TowerDefenseMonsterInfoCtrl:RefreshAbility(monsterManual)
for i = 1, 3 do
if monsterManual["AbilityTitle" .. i] ~= nil and monsterManual["AbilityTitle" .. i] ~= "" then
NovaAPI.SetTMPText(self._mapNode.txtAbility[i], monsterManual["AbilityDesc" .. i])
NovaAPI.SetTMPText(self._mapNode.txtAbilityTitle[i], monsterManual["AbilityTitle" .. i])
self._mapNode.goAbility[i]:SetActive(true)
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.goAbility[i]:GetComponent("RectTransform"))
else
self._mapNode.goAbility[i]:SetActive(false)
end
end
end
function TowerDefenseMonsterInfoCtrl:OnBtn_ClickClose()
self._mapNode.got_fullscreen_blur_black:SetActive(false)
self._mapNode.anit_window:Play("t_window_04_t_out")
self:AddTimer(1, 0.3, "OnCloseAnimFinish", true, true, true)
self.tbMonster = nil
end
function TowerDefenseMonsterInfoCtrl:OnBtnClick_Grid(goGrid, gridIndex)
local nIndex = gridIndex + 1
if nIndex ~= self.curSelect then
local curGridName = tostring(self.curSelect - 1)
local rtCurItem = self.curSelectMonster
if rtCurItem ~= nil then
rtCurItem.transform:Find("btnGrid/AnimRoot/tc_head_01/--Common--").gameObject:SetActive(false)
end
self.curSelect = nIndex
self.curSelectMonster = goGrid
goGrid.transform:Find("btnGrid/AnimRoot/tc_head_01/--Common--").gameObject:SetActive(true)
local nMonsterId = self.tbMonster[nIndex]
self:RefreshMonsterInfo(nMonsterId)
end
end
function TowerDefenseMonsterInfoCtrl:OnEvent_OpenTowerDefenseMonsterInfo(levelId)
local levelConfig = ConfigTable.GetData("TowerDefenseLevel", levelId)
if levelConfig == nil then
return
end
self.gameObject:SetActive(true)
self:ShowPanel(levelConfig.MonsterPreview)
end
function TowerDefenseMonsterInfoCtrl:OnCloseAnimFinish()
self.gameObject:SetActive(false)
end
function TowerDefenseMonsterInfoCtrl:GetAttritubeTypeSizeText(sizeType)
if sizeType == GameEnum.attributeSizeType.High then
return ConfigTable.GetUIText("Attribute_Size_High")
elseif sizeType == GameEnum.attributeSizeType.Mid then
return ConfigTable.GetUIText("Attribute_Size_Mid")
elseif sizeType == GameEnum.attributeSizeType.Low then
return ConfigTable.GetUIText("Attribute_Size_Low")
else
return ConfigTable.GetUIText("Attribute_Size_None")
end
end
return TowerDefenseMonsterInfoCtrl