Files
SL1900 e0549005e1 Update - 1.9.0.103
EN: 1.9.0.103
CN: 1.9.0.104
JP: 1.9.0.106
KR: 1.9.0.108
2026-04-18 00:15:00 +09:00

139 lines
3.9 KiB
Lua

local KeyNodeListCtrl = class("KeyNodeListCtrl", BaseCtrl)
local _, ReadyColor = ColorUtility.TryParseHtmlString("#f1f4f6")
local _, LockColor = ColorUtility.TryParseHtmlString("#657eae")
KeyNodeListCtrl._mapNodeConfig = {
goLine = {nCount = 5},
line1_ = {nCount = 2, sComponentName = "Image"},
line2_ = {nCount = 2, sComponentName = "Image"},
line3_1 = {sComponentName = "Image"},
line4_1 = {sComponentName = "Image"},
line5_1 = {sComponentName = "Image"},
KeyNode = {
nCount = 2,
sCtrlName = "Game.UI.StarTowerGrowth.KeyNodeCtrl"
},
goOne = {},
btnNode = {
nCount = 2,
sComponentName = "UIButton",
callback = "OnBtnClick_Node"
}
}
KeyNodeListCtrl._mapEventConfig = {}
function KeyNodeListCtrl:Refresh(nCloumn, tbNodes, tbId, mapNext)
self.nCloumn = nCloumn
self.tbId = tbId
self.tbNodes = tbNodes
local nCount = #tbId
if nCount == 1 then
self._mapNode.goOne:SetActive(true)
self._mapNode.KeyNode[2].gameObject:SetActive(false)
elseif nCount == 2 then
self._mapNode.goOne:SetActive(false)
self._mapNode.KeyNode[2].gameObject:SetActive(true)
end
for i, nId in ipairs(tbId) do
local mapNode = tbNodes[nId]
local nState = 1
if mapNode.bActive then
nState = 3
elseif not mapNode.bReady then
nState = 1
elseif mapNode.bReady then
nState = 2
end
self._mapNode.KeyNode[i]:Refresh(nId, nState, nCount == 2)
end
local nLineType = 0
if mapNext then
if #mapNext.tbId == 2 then
nLineType = nCount + 2
elseif #mapNext.tbId == 3 then
nLineType = nCount
elseif nCount == 1 and #mapNext.tbId == 1 then
nLineType = 5
end
end
for i = 1, 5 do
self._mapNode.goLine[i]:SetActive(nLineType == i)
end
if nLineType == 1 then
local color = tbNodes[tbId[1]].bActive and ReadyColor or LockColor
NovaAPI.SetImageColor(self._mapNode.line1_[1], color)
NovaAPI.SetImageColor(self._mapNode.line1_[2], color)
elseif nLineType == 2 then
NovaAPI.SetImageColor(self._mapNode.line2_[1], tbNodes[tbId[1]].bActive and ReadyColor or LockColor)
NovaAPI.SetImageColor(self._mapNode.line2_[2], tbNodes[tbId[2]].bActive and ReadyColor or LockColor)
elseif nLineType == 3 or nLineType == 4 then
local bActive = true
for _, nId in ipairs(tbId) do
if not tbNodes[nId].bActive then
bActive = false
break
end
end
local color = bActive and ReadyColor or LockColor
if nLineType == 3 then
NovaAPI.SetImageColor(self._mapNode.line3_1, color)
elseif nLineType == 4 then
NovaAPI.SetImageColor(self._mapNode.line4_1, color)
end
elseif nLineType == 5 then
local color = tbNodes[tbId[1]].bActive and ReadyColor or LockColor
NovaAPI.SetImageColor(self._mapNode.line5_1, color)
end
end
function KeyNodeListCtrl:GetType()
return GameEnum.towerGrowthNodeType.Core
end
function KeyNodeListCtrl:GetReadyNode()
local goNode
for i, nId in ipairs(self.tbId) do
local mapNode = self.tbNodes[nId]
if mapNode.bReady and not mapNode.bActive then
goNode = self._mapNode.btnNode[i].gameObject
end
end
return goNode, GameEnum.towerGrowthNodeType.Core
end
function KeyNodeListCtrl:SetSelect(nId, bSelect)
for i, v in ipairs(self.tbId) do
if v == nId then
self._mapNode.KeyNode[i]:SetSelect(bSelect)
return
end
end
end
function KeyNodeListCtrl:PlayActiveAnim(nId, callback)
for i, v in ipairs(self.tbId) do
if v == nId then
self._mapNode.KeyNode[i]:PlayActiveAnim(callback)
return
end
end
end
function KeyNodeListCtrl:PlayActiveAnimFromActive(tbActiveId)
for i, v in ipairs(self.tbId) do
if table.indexof(tbActiveId, v) > 0 then
self._mapNode.KeyNode[i]:PlayActiveAnim()
end
end
end
function KeyNodeListCtrl:ClearSelect()
for i = 1, 2 do
self._mapNode.KeyNode[i]:SetSelect(false)
end
end
function KeyNodeListCtrl:Awake()
end
function KeyNodeListCtrl:OnEnable()
end
function KeyNodeListCtrl:OnDisable()
end
function KeyNodeListCtrl:OnDestroy()
end
function KeyNodeListCtrl:OnBtnClick_Node(btn, nIndex)
EventManager.Hit("StarTowerGrowthNodeSelect", self.tbId[nIndex], self.nCloumn, btn.gameObject)
end
return KeyNodeListCtrl