Files
StellaSora_DataLua/lua/game/ui/soldier/template/character/soldiercharcarditemctrl.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

210 lines
6.5 KiB
Lua

local SoldierCharCardItemCtrl = class("SoldierCharCardItemCtrl", BaseCtrl)
local iconPath2 = "Icon/SoldierOtherIcon/"
SoldierCharCardItemCtrl._mapNodeConfig = {
btnItem = {
sComponentName = "UIButton",
callback = "OnBtnItemClick"
},
Star = {nCount = 5},
FxStar = {nCount = 5},
StarRoot = {sComponentName = "Transform"},
goChar = {},
imgEmpty = {},
imgSelect = {},
imgLock = {},
imgPut = {},
imageIcon = {sComponentName = "Image"},
imageRarity = {sComponentName = "Image"},
imgRecommend = {sComponentName = "Image"},
img_Position = {sComponentName = "Image"},
imgAttribute = {sComponentName = "Image"},
animRoot = {sNodeName = "AnimRoot", sComponentName = "Animator"}
}
SoldierCharCardItemCtrl._mapEventConfig = {
SoldierCharCardItemClicked = "OnEvent_SoldierCharCardItemClicked",
SoldierRecommend_Update = "SetTrackAndRecommend",
SoldierPartnerTrace = "SetTrackAndRecommend",
SoldierExtraPartnerTagChange = "OnEvent_SoldierExtraPartnerTagChange"
}
SoldierCharCardItemCtrl._mapRedDotConfig = {}
SoldierCharCardItemCtrl.MAX_STAR = 5
function SoldierCharCardItemCtrl:Awake()
self.bActive = false
end
function SoldierCharCardItemCtrl:OnEnable()
self.bActive = true
end
function SoldierCharCardItemCtrl:OnDisable()
self._objClickCallback = nil
self._fnClickCallback = nil
self.nCharId = nil
self.bActive = false
end
function SoldierCharCardItemCtrl:OnDestroy()
self.bActive = false
end
function SoldierCharCardItemCtrl:OnSelected()
end
function SoldierCharCardItemCtrl:OnRefresh(nCharId)
self.nCharId = nCharId
self:SetItemData(nCharId)
end
function SoldierCharCardItemCtrl:SetItemData(nCharId, bInSandland)
bInSandland = bInSandland or false
self._mapNode.imgSelect:SetActive(false)
self._mapNode.imgPut:SetActive(false)
if nCharId == nil then
self._mapNode.goChar:SetActive(false)
self._mapNode.imgEmpty:SetActive(true)
return
end
self.nCharId = nCharId
self._mapNode.imgEmpty:SetActive(false)
self._mapNode.goChar:SetActive(true)
local soldierCharConfig = ConfigTable.GetData("SoldierCharacter", nCharId)
if soldierCharConfig == nil then
return
end
self:SetRarity(soldierCharConfig.Rarity)
self:SetStar(soldierCharConfig.Star, nCharId)
self:SetChessPosition(soldierCharConfig.Type)
self.bInSandland = bInSandland
self:SetTrackAndRecommend()
local skinConfig = ConfigTable.GetData("SoldierSkin", soldierCharConfig.Skin)
if skinConfig then
self:SetPngSprite(self._mapNode.imageIcon, skinConfig.Icon .. AllEnum.SoldierChessIconSurfix.M)
end
end
function SoldierCharCardItemCtrl:SetRarity(nRarity)
if nRarity == nil then
return
end
self:SetPngSprite(self._mapNode.imageRarity, "Icon/SoldierOtherIcon/" .. AllEnum.SoldierChessRarityIcon[nRarity] .. AllEnum.SoldierChessIconSurfix.M)
end
function SoldierCharCardItemCtrl:SetAttribute(nIndex)
if nIndex == nil or nIndex < 1 or 3 < nIndex then
self._mapNode.imgAttribute.gameObject:SetActive(false)
return
end
local nCfgId = PlayerData.SoldierData:GetSoldierPositionEffectDataId(nIndex)
local cfg = ConfigTable.GetData("SoldierPositionEffect", nCfgId)
if cfg then
self._mapNode.imgAttribute.gameObject:SetActive(true)
self:SetPngSprite(self._mapNode.imgAttribute, iconPath2 .. cfg.Icon)
end
end
function SoldierCharCardItemCtrl:SetStar(nStar, nCharId)
nStar = nStar or 0
local bPlayCompoundAnim = false
if self.nStar == nil then
self.nStar = nStar
elseif nStar > self.nStar and self.nCharId == nCharId then
self.nStar = nStar
bPlayCompoundAnim = true
end
for i = 1, self.MAX_STAR do
local goFxStar = self._mapNode.FxStar[i]
if goFxStar then
goFxStar:SetActive(i <= nStar)
end
end
if bPlayCompoundAnim == true then
CS.WwiseAudioManager.Instance:PostEvent("mode_900001_chess_chair_combine")
local nAnimLength = NovaAPI.GetAnimClipLength(self._mapNode.animRoot, {
"SoldierSupportCard_compound"
})
self:AddTimer(1, nAnimLength, function()
for i = 1, self.MAX_STAR do
local goStar = self._mapNode.Star[i]
if goStar then
goStar:SetActive(i <= nStar)
end
end
end)
else
for i = 1, self.MAX_STAR do
local goStar = self._mapNode.Star[i]
if goStar then
goStar:SetActive(nStar >= i)
end
end
end
end
function SoldierCharCardItemCtrl:SetTrackAndRecommend()
if self.bActive == false then
return
end
if self.bInSandland == nil or self.bInSandland == false then
self._mapNode.imgRecommend.gameObject:SetActive(false)
return
end
if self.nCharId == nil then
return
end
self._mapNode.imgRecommend.gameObject:SetActive(true)
local levelData = PlayerData.SoldierData:GetCurLevelData()
if levelData == nil then
self._mapNode.imgRecommend.gameObject:SetActive(false)
return
end
local bTrack = levelData:CheckChessTrace(self.nCharId)
local bRecommend = PlayerData.SoldierData:CheckChessRecommendState(self.nCharId)
local sIcon = ""
if bRecommend and bTrack then
sIcon = "Icon/SoldierOtherIcon/SoldierPartnerBuilds_03"
elseif bTrack then
sIcon = "Icon/SoldierOtherIcon/SoldierPartnerBuilds_02"
elseif bRecommend then
sIcon = "Icon/SoldierOtherIcon/SoldierPartnerBuilds_01"
else
self._mapNode.imgRecommend.gameObject:SetActive(false)
end
if sIcon ~= "" then
self:SetPngSprite(self._mapNode.imgRecommend, sIcon)
end
end
function SoldierCharCardItemCtrl:SetChessPosition(nType)
if nType == nil then
return
end
local tbChessTypeConfig = CacheTable.GetData("_SoldierChessType", nType)
local sIcon = ""
if tbChessTypeConfig ~= nil then
sIcon = tbChessTypeConfig.Icon
end
local sPath = "Icon/SoldierOtherIcon/" .. sIcon
self:SetPngSprite(self._mapNode.img_Position, sPath)
end
function SoldierCharCardItemCtrl:SetSelect(bSelect)
self._mapNode.ImageSelect.gameObject:SetActive(bSelect)
end
function SoldierCharCardItemCtrl:SetLock(bLock)
self._mapNode.imgLock.gameObject:SetActive(bLock)
end
function SoldierCharCardItemCtrl:SetClickCallback(obj, fn)
self._objClickCallback = obj
self._fnClickCallback = fn
end
function SoldierCharCardItemCtrl:GetAnimator()
if self._mapNode.animRoot == nil then
self._mapNode.animRoot = self.gameObejct.transform:GetChild(0):GetChild(0):GetComponent("Animator")
if self._mapNode.animRoot == nil then
return nil
end
end
return self._mapNode.animRoot
end
function SoldierCharCardItemCtrl:OnBtnItemClick()
if self._fnClickCallback ~= nil and self.nCharId ~= nil then
self._fnClickCallback(self._objClickCallback, self.nCharId)
end
end
function SoldierCharCardItemCtrl:OnEvent_SoldierCharCardItemClicked(nCharId)
if nCharId == nil then
self:SetSelect(false)
return
end
self:SetSelect(nCharId == self.nCharId)
end
return SoldierCharCardItemCtrl