80af235e05
EN: 1.12.0.120 CN: 1.12.0.120 JP: 1.12.0.124 KR: 1.12.0.124
181 lines
4.6 KiB
Lua
181 lines
4.6 KiB
Lua
local RedDotNode = class("RedDotNode")
|
|
local RedDotType = AllEnum.RedDotType
|
|
function RedDotNode:ctor(sKey, parent)
|
|
self.bManualRefresh = nil
|
|
self.sNodeKey = sKey
|
|
self.parentNode = parent
|
|
self.tbChildNodeList = nil
|
|
self.nRedDotCount = 0
|
|
self.tbObjNode = nil
|
|
self.tbTxtRedDotCount = nil
|
|
self.nShowType = nil
|
|
end
|
|
function RedDotNode:RegisterNode(objGo, nType, bManualRefresh)
|
|
if nil == objGo then
|
|
traceback(string.format("注册红点失败!!!传入的gameObject为空. nodeKey = %s", self.sNodeKey))
|
|
return
|
|
end
|
|
if nil == nType then
|
|
nType = RedDotType.Single
|
|
end
|
|
self.nShowType = nType
|
|
self.bManualRefresh = bManualRefresh
|
|
if self.tbObjNode == nil then
|
|
self.tbObjNode = {}
|
|
end
|
|
if type(objGo) == "table" then
|
|
for _, v in ipairs(objGo) do
|
|
local nInstanceId = v.gameObject:GetInstanceID()
|
|
self.tbObjNode[nInstanceId] = v.gameObject
|
|
end
|
|
else
|
|
local nInstanceId = objGo.gameObject:GetInstanceID()
|
|
self.tbObjNode[nInstanceId] = objGo.gameObject
|
|
end
|
|
self.tbTxtRedDotCount = {}
|
|
for _, v in pairs(self.tbObjNode) do
|
|
if v:IsNull() ~= true then
|
|
local trObj = v.gameObject:GetComponent("Transform")
|
|
local trNode = trObj:Find("---RedDot---")
|
|
if nil == trNode then
|
|
printError("红点UI结构不标准!!!请检查")
|
|
return
|
|
end
|
|
if nType == RedDotType.Number then
|
|
local trText = trNode:Find("txtRedDot")
|
|
if nil ~= trText then
|
|
local nInstanceId = trText:GetInstanceID()
|
|
self.tbTxtRedDotCount[nInstanceId] = trText:GetComponent("TMP_Text")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
self:RefreshRedDotShow()
|
|
end
|
|
function RedDotNode:UnRegisterNode(objGo)
|
|
if nil == objGo then
|
|
self.tbObjNode = nil
|
|
self.tbTxtRedDotCount = nil
|
|
else
|
|
if self.tbObjNode == nil then
|
|
return
|
|
end
|
|
if type(objGo) == "table" then
|
|
for _, v in ipairs(objGo) do
|
|
local nInstanceId = v:GetInstanceID()
|
|
self.tbObjNode[nInstanceId] = nil
|
|
end
|
|
else
|
|
local nInstanceId = objGo:GetInstanceID()
|
|
self.tbObjNode[nInstanceId] = nil
|
|
end
|
|
end
|
|
end
|
|
function RedDotNode:AddChildNode(sKey)
|
|
if nil == self.tbChildNodeList then
|
|
self.tbChildNodeList = {}
|
|
end
|
|
local node = RedDotNode.new(sKey, self)
|
|
table.insert(self.tbChildNodeList, node)
|
|
return node
|
|
end
|
|
function RedDotNode:GetChildNode(sKey)
|
|
if nil ~= self.tbChildNodeList then
|
|
for _, node in ipairs(self.tbChildNodeList) do
|
|
if node:GetNodeKey() == sKey then
|
|
return node
|
|
end
|
|
end
|
|
end
|
|
end
|
|
function RedDotNode:SetValid(bValid)
|
|
if self:GetValid() == bValid and (nil == self.tbChildNodeList or #self.tbChildNodeList <= 0) then
|
|
return
|
|
end
|
|
if bValid then
|
|
self.nRedDotCount = self.nRedDotCount + 1
|
|
else
|
|
self.nRedDotCount = self.nRedDotCount - 1
|
|
end
|
|
if not self.bManualRefresh then
|
|
self:RefreshRedDotShow()
|
|
end
|
|
if nil ~= self.parentNode then
|
|
self.parentNode:SetValid(bValid)
|
|
end
|
|
end
|
|
function RedDotNode:SetCount(nCount)
|
|
if self:GetCount() == nCount and (nil == self.tbChildNodeList or #self.tbChildNodeList <= 0) then
|
|
return
|
|
end
|
|
self.nRedDotCount = nCount
|
|
self:RefreshRedDotShow()
|
|
if nil ~= self.parentNode then
|
|
self.parentNode:SetCount(nCount)
|
|
end
|
|
end
|
|
function RedDotNode:RefreshRedDotShow()
|
|
if nil == self.tbObjNode or nil == next(self.tbObjNode) then
|
|
return
|
|
end
|
|
for _, v in pairs(self.tbObjNode) do
|
|
if v:IsNull() == true then
|
|
traceback("疑似上一次注册的红点未注销!!!请检查 nodeKey = " .. self.sNodeKey)
|
|
else
|
|
v.gameObject:SetActive(self:GetValid())
|
|
end
|
|
end
|
|
if self.nShowType == RedDotType.Number then
|
|
for _, v in pairs(self.tbTxtRedDotCount) do
|
|
NovaAPI.SetTMPText(v, self:GetCount())
|
|
end
|
|
end
|
|
end
|
|
function RedDotNode:GetNodeKey()
|
|
return self.sNodeKey
|
|
end
|
|
function RedDotNode:GetValid()
|
|
return self.nRedDotCount > 0
|
|
end
|
|
function RedDotNode:GetCount()
|
|
return self.nRedDotCount
|
|
end
|
|
function RedDotNode:CheckLeafNode()
|
|
return nil == self.tbChildNodeList or #self.tbChildNodeList == 0
|
|
end
|
|
function RedDotNode:PrintRedDot(bLeaf, tbNode, nDepth)
|
|
if self.sNodeKey == "Root" then
|
|
if bLeaf and nil ~= self.tbChildNodeList then
|
|
for _, v in ipairs(self.tbChildNodeList) do
|
|
v:PrintRedDot(true, tbNode, 0)
|
|
end
|
|
end
|
|
return
|
|
end
|
|
table.insert(tbNode, {
|
|
node = self,
|
|
depth = nDepth or 0
|
|
})
|
|
if bLeaf and nil ~= self.tbChildNodeList then
|
|
for _, v in ipairs(self.tbChildNodeList) do
|
|
v:PrintRedDot(true, tbNode, (nDepth or 0) + 1)
|
|
end
|
|
end
|
|
end
|
|
function RedDotNode:GetParentKey(tbKey)
|
|
if self.parentNode ~= nil and self.parentNode.sNodeKey ~= "Root" then
|
|
table.insert(tbKey, self.parentNode.sNodeKey)
|
|
self.parentNode:GetParentKey(tbKey)
|
|
end
|
|
end
|
|
function RedDotNode:GetBindObjCount()
|
|
local nCount = 0
|
|
if self.tbObjNode ~= nil then
|
|
for _, v in pairs(self.tbObjNode) do
|
|
nCount = nCount + 1
|
|
end
|
|
end
|
|
return nCount
|
|
end
|
|
return RedDotNode
|