Files
StellaSora_DataLua/lua/game/ui/roguelikeitemtips/roguelikeitemtipsctrl.lua
T
SL1900 5e0d58cfad Initial version - 1.2.0.60
EN: 1.2.0.60
CN: 1.2.0.61
JP: 1.2.0.63
KR: 1.2.0.67
2025-12-03 01:00:00 +09:00

95 lines
2.9 KiB
Lua

local RoguelikeItemTipsCtrl = class("RoguelikeItemTipsCtrl", BaseCtrl)
RoguelikeItemTipsCtrl._mapNodeConfig = {
tr_TipContent = {sComponentName = "Transform"},
TipPool = {sComponentName = "Transform"},
TemplateTip = {sComponentName = "GameObject"}
}
RoguelikeItemTipsCtrl._mapEventConfig = {
[EventId.ShowRoguelikeDrop] = "OnEvent_ShowTips",
AvgBubbleStart = "OnAvgBubbleStart",
[EventId.AvgBubbleExit] = "OnAvgBubbleEnd",
TipsShowEnd = "OnEvent_TipsShowEnd"
}
function RoguelikeItemTipsCtrl:GetItem()
local TipItem
if #self._tbTipPool > 0 then
local idx = #self._tbTipPool
TipItem = self._tbTipPool[idx]
table.remove(self._tbTipPool, idx)
TipItem.gameObject.transform:SetParent(self._mapNode.tr_TipContent)
return TipItem
else
local itemObj = instantiate(self._mapNode.TemplateTip, self._mapNode.tr_TipContent)
itemObj:SetActive(true)
TipItem = self:BindCtrlByNode(itemObj, "Game.UI.RoguelikeItemTips.RoguelikeItemTipsItemCtrl")
return TipItem
end
end
function RoguelikeItemTipsCtrl:RecycleItem(itemCtrl)
itemCtrl.gameObject.transform:SetParent(self._mapNode.TipPool)
table.insert(self._tbTipPool, itemCtrl)
end
function RoguelikeItemTipsCtrl:ShowTips()
if not self.bPause then
while #self._tbTipShow < self.nMaxTipsCount and #self._tbTipsQueue > 0 do
local itemInfo = table.remove(self._tbTipsQueue, 1)
local tipItem = self:GetItem()
tipItem.gameObject:SetActive(true)
table.insert(self._tbTipShow, tipItem)
tipItem:Show(itemInfo.nTid, itemInfo.nCount)
end
else
print("剧情中无法显示物品提示")
end
end
function RoguelikeItemTipsCtrl:Awake()
self.nMaxTipsCount = 4
self.bPause = false
end
function RoguelikeItemTipsCtrl:OnEnable()
self.bPause = false
self.nMaxTipsCount = 4
self._tbTipPool = {}
self._tbTipShow = {}
self._tbTipsQueue = {}
delChildren(self._mapNode.tr_TipContent)
end
function RoguelikeItemTipsCtrl:OnDisable()
end
function RoguelikeItemTipsCtrl:OnDestroy()
end
function RoguelikeItemTipsCtrl:OnEvent_ShowTips(nTid, nCount)
table.insert(self._tbTipsQueue, {nTid = nTid, nCount = nCount})
self:ShowTips()
end
function RoguelikeItemTipsCtrl:OnEvent_TipsShowEnd(itemCtrl)
local idx = table.indexof(self._tbTipShow, itemCtrl)
table.remove(self._tbTipShow, idx)
self:RecycleItem(itemCtrl)
self:ShowTips()
end
function RoguelikeItemTipsCtrl:OnAvgBubbleStart(sAvgId, nGroupId)
self.bPause = true
if #self._tbTipShow > 0 then
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForSeconds(1))
for _, item in pairs(self._tbTipShow) do
item:FadeOut()
end
coroutine.yield(CS.UnityEngine.WaitForSeconds(0.5))
for _, item in pairs(self._tbTipShow) do
self:RecycleItem(item)
end
EventManager.Hit(EventId.AvgBubbleShow, sAvgId, nGroupId)
end
cs_coroutine.start(wait)
else
EventManager.Hit(EventId.AvgBubbleShow, sAvgId, nGroupId)
end
end
function RoguelikeItemTipsCtrl:OnAvgBubbleEnd()
self.bPause = false
self:ShowTips()
end
return RoguelikeItemTipsCtrl