2025-06-04 05:12:01 +08:00

97 lines
2.4 KiB
Plaintext

local BaseCell = autoImport("BaseCell");
BuffCell = class("BuffCell", BaseCell)
BuffCellEvent = {
BuffEnd = "BuffCellEvent_BuffEnd",
}
local BUFFTYPE_DOUBLEEXPCARD = "MultiTime";
function BuffCell:Init()
self.mask = self:FindComponent("Mask", UISprite);
self.icon = self:FindComponent("Icon", UISprite);
self.layer = self:FindComponent("Layer", UILabel);
self:AddCellClickEvent();
end
function BuffCell:SetData(data)
self.data = data;
if(data)then
self.gameObject:SetActive(true);
local staticData = self.data.staticData;
-- 儲存data
if(staticData == nil)then
local storage = self.data.storage;
if(storage ~= nil)then
for k,v in pairs(storage)do
staticData = Table_Buffer[v[1]];
break;
end
end
end
if(staticData)then
IconManager:SetSkillIcon(staticData.BuffIcon, self.icon)
self.icon.width = 28;
if(data.isalways)then
TimeTickManager.Me():ClearTick(self, 1);
self.mask.fillAmount = 0;
elseif(data.starttime and data.endtime)then
self:UpdateCDTime();
else
TimeTickManager.Me():ClearTick(self, 1);
self.mask.fillAmount = 0;
end
if(not self:ObjIsNil(self.layer))then
if(data.layer and data.layer>1 and
staticData.BuffEffect.type ~= BUFFTYPE_DOUBLEEXPCARD)then
self.layer.gameObject:SetActive(true);
self.layer.text = data.layer;
else
self.layer.gameObject:SetActive(false);
end
else
-- errorLog("BuffCell Error (Not Find GameObject)");
end
else
self.gameObject:SetActive(false);
end
else
TimeTickManager.Me():ClearTick(self, 1);
self.gameObject:SetActive(false);
end
end
function BuffCell:OnRemove()
TimeTickManager.Me():ClearTick(self, 1);
TipManager.Instance:CloseNormalTip()
end
function BuffCell:UpdateCDTime(timetick)
if(not self.data)then
return;
end
local starttime,endtime = self.data.starttime, self.data.endtime;
if(starttime and endtime)then
local totalDeltaTime = endtime - starttime;
if(totalDeltaTime<=0)then
self:PassEvent(BuffCellEvent.BuffEnd, self.data);
return;
end
TimeTickManager.Me():ClearTick(self, 1);
TimeTickManager.Me():CreateTick(0, 33, function (self, deltatime)
local nowDelteTime = math.max(ServerTime.CurServerTime() - starttime, 0);
local fillAmount = nowDelteTime/totalDeltaTime;
if(fillAmount<1)then
self.mask.fillAmount = fillAmount;
else
self:PassEvent(BuffCellEvent.BuffEnd, self.data);
TimeTickManager.Me():ClearTick(self, 1);
end
end, self, 1);
end
end