2025-06-04 05:02:57 +08:00

109 lines
2.5 KiB
Plaintext

autoImport("HurtNum");
DynamicHurtNum = reusableClass("DynamicHurtNum", HurtNum)
DynamicHurtNum.PoolSize = 50
function DynamicHurtNum:Show( parent )
if(not self.pos or LuaGameObject.ObjectIsNull( parent ))then
self:Destroy();
return;
end
local path = nil;
if(HurtNumType.Miss == self.type)then
path = EffectMap.Maps.HurtNumMiss;
else
path = EffectMap.Maps.HurtNum;
end
self.effect = Asset_Effect.PlayOneShotOn( path, parent.transform, DynamicHurtNum._EffectShow, self )
self.effect:RegisterWeakObserver(self);
end
function DynamicHurtNum._EffectShow( effectHandle, owner )
if(owner)then
local effectGO = effectHandle.gameObject;
effectGO.name = "DamageNum"..owner.colorType;
effectGO:GetComponent(StayOriginalPosition):SetPosition(owner.pos);
local labelTrans = effectGO.transform:Find("Label");
local labelcomp = labelTrans:GetComponent(UILabel)
if(labelcomp)then
labelcomp.gameObject.layer = effectGO.layer;
local num = tonumber(owner.num);
if(num and num ~= 0)then
num = math.floor(num);
labelcomp.text = num;
else
labelcomp.text = owner.num;
end
if(owner.colorType and HurtNumColorMap[owner.colorType])then
labelcomp.color = HurtNumColorMap[owner.colorType];
end
if(owner.outlineColor)then
labelcomp.effectColor = owner.outlineColor;
end
end
owner.critTrans = labelTrans.transform:Find("Crit");
if(owner.critTrans)then
owner.critTrans.gameObject:SetActive(owner.critType == HurtNum_CritType.PAtk);
end
owner.magicTrans = labelTrans.transform:Find("MagicCrit");
if(owner.magicTrans)then
owner.magicTrans.gameObject:SetActive(owner.critType == HurtNum_CritType.MAtk);
end
owner:PlayAni(effectGO, owner.type);
end
end
-- override begin
function DynamicHurtNum:DoConstruct(asArray, args)
DynamicHurtNum.super.DoConstruct(self, asArray, args);
self.pos = args[1]:Clone();
self.num = args[2];
self.type = args[3];
self.colorType = args[4];
self.critType = args[5];
self:Show(SceneUIManager.Instance:GetSceneUIContainer(SceneUIType.DamageNum));
end
function DynamicHurtNum:DoDeconstruct(asArray)
if(self.effect)then
self.effect:Stop();
end
self.effect = nil;
if(self.pos)then
self.pos:Destroy();
end
self.pos = nil;
if(self.critTrans)then
self.critTrans.gameObject:SetActive(false);
self.critTrans = nil;
end
if(self.magicTrans)then
self.magicTrans.gameObject:SetActive(false);
self.magicTrans = nil;
end
end
-- override end
function DynamicHurtNum:ObserverDestroyed(obj)
if(obj == self.effect)then
self.effect = nil;
self:Destroy();
end
end