[战斗]========= buff 叠层表现修改

dev_chengFeng
wangzhenxing 2021-03-12 11:04:06 +08:00
parent 04ab1e5451
commit 491a6f311a
3 changed files with 170 additions and 55 deletions

View File

@ -263,37 +263,40 @@ function BuffManager:Update()
buffList = self.buffDic.kvList[buff.type] buffList = self.buffDic.kvList[buff.type]
end end
-- 是覆盖类型的buff且有老buff -- 是覆盖类型的buff且有老buff buff表现层修改所有cover 字段没用了 注释 by:王振兴 2021/03/11 20:40
if buff.cover and buffList.size > 0 then -- if buff.cover and buffList.size > 0 then
local isCovered = false -- local isCovered = false
for i=1, buffList.size do -- for i=1, buffList.size do
local oldBuff = buffList.buffer[i] -- local oldBuff = buffList.buffer[i]
if oldBuff.cover and oldBuff.target == buff.target and oldBuff.clear == buff.clear and oldBuff:OnCover(buff) then --判定该效果能否被覆盖 -- if oldBuff.cover and oldBuff.target == buff.target and oldBuff.clear == buff.clear and oldBuff:OnCover(buff) then --判定该效果能否被覆盖
-- 结束并回收老buff -- -- 结束并回收老buff
oldBuff:OnEnd() -- oldBuff:OnEnd()
oldBuff.target.Event:DispatchEvent(BattleEventName.BuffEnd, oldBuff) -- oldBuff.target.Event:DispatchEvent(BattleEventName.BuffEnd, oldBuff)
putBuff(oldBuff) -- putBuff(oldBuff)
-- 覆盖老buff -- -- 覆盖老buff
buffList.buffer[i] = buff -- buffList.buffer[i] = buff
buff:OnStart() -- buff:OnStart()
buff.target.Event:DispatchEvent(BattleEventName.BuffStart, buff) -- buff.target.Event:DispatchEvent(BattleEventName.BuffStart, buff)
buff.target.Event:DispatchEvent(BattleEventName.BuffCover, buff) -- buff.target.Event:DispatchEvent(BattleEventName.BuffCover, buff)
isCovered = true -- isCovered = true
break -- break
end -- end
end -- end
-- 没有覆盖新buff -- -- 没有覆盖新buff
if not isCovered then -- if not isCovered then
buffList:Add(buff) -- buffList:Add(buff)
buff:OnStart() -- buff:OnStart()
buff.target.Event:DispatchEvent(BattleEventName.BuffStart, buff) -- buff.target.Event:DispatchEvent(BattleEventName.BuffStart, buff)
end -- end
else -- else
-- 新buff -- -- 新buff
buffList:Add(buff) -- buffList:Add(buff)
buff:OnStart() -- buff:OnStart()
buff.target.Event:DispatchEvent(BattleEventName.BuffStart, buff) -- buff.target.Event:DispatchEvent(BattleEventName.BuffStart, buff)
end -- end
buffList:Add(buff)
buff:OnStart()
buff.target.Event:DispatchEvent(BattleEventName.BuffStart, buff)
end end
-- 清除过期buff -- 清除过期buff

View File

@ -159,23 +159,66 @@ end
-- --
function BuffCtrl:AddBuffIcon(buff, icon) function BuffCtrl:AddBuffIcon(buff, icon)
if not buff or not icon or icon == "" then local currBuff=buff
if not currBuff or not icon or icon == "" then
return return
end end
if not self.BuffIconList then if not self.BuffIconList then
self.BuffIconList = {} self.BuffIconList = {}
end end
if not self.BuffIconList[buff.id] then -- if not self.BuffIconList[buff.id] then
local buffGO = BattlePool.GetItem(self.buffRoot.transform, BATTLE_POOL_TYPE.BUFF_VIEW) -- local buffGO = BattlePool.GetItem(self.buffRoot.transform, BATTLE_POOL_TYPE.BUFF_VIEW)
buffGO.transform.localScale = Vector3.one -- buffGO.transform.localScale = Vector3.one
buffGO.transform.localPosition = Vector3.zero -- buffGO.transform.localPosition = Vector3.zero
buffGO:SetActive(true) -- buffGO:SetActive(true)
self.BuffIconList[buff.id] = BuffView.New(buffGO, buff, icon) -- self.BuffIconList[buff.id] = BuffView.New(buffGO, buff, icon)
else -- else
self.BuffIconList[buff.id].count = self.BuffIconList[buff.id].count + 1 -- self.BuffIconList[buff.id].count = self.BuffIconList[buff.id].count + 1
self.BuffIconList[buff.id]:SetCount() -- self.BuffIconList[buff.id]:SetCount()
end -- end
LogRed(buff.id)
if not self.BuffIconList[currBuff.id] then
--便利所有之前存在的buff图标有同类型,同数值的叠加,否则新建
for key, value in pairs(self.BuffIconList) do
local buffType=self.BuffIconList[key].buff.type
if currBuff.type == self.BuffIconList[key].buff.type then
if buffType == BuffName.PropertyChange then
--属性 判断属性类型,属性值,属性修改类型
local b = self.BuffIconList[key].buff
if self.BuffIconList[key].buffPropertyName == currBuff.propertyName and self.BuffIconList[key].buffCt == currBuff.changeType and self.BuffIconList[key].buffValue == currBuff.Value then
self.BuffIconList[key]:SetCount(self.BuffIconList[key].count+1)
return
end
--持续伤害类型,伤害系数
elseif buffType==BuffName.DOT then
if self.BuffIconList[key].buffDamageType==currBuff.damageType and self.BuffIconList[key].buffDamageFactor==currBuff.damageFactor then
self.BuffIconList[key]:SetCount(self.BuffIconList[key].count+1)
return
end
--控制类型
elseif buffType == BuffName.Control then
if self.BuffIconList[key].buffCtrlType==currBuff.ctrlType then
self.BuffIconList[key]:SetCount(self.BuffIconList[key].count+1)
return
end
elseif buffType == BuffName.HOT then
if self.BuffIconList[key].healValue==currBuff.healValue then
self.BuffIconList[key]:SetCount(self.BuffIconList[key].count+1)
return
end
end
end
end
end
local buffGO = BattlePool.GetItem(self.buffRoot.transform, BATTLE_POOL_TYPE.BUFF_VIEW)
buffGO.transform.localScale = Vector3.one
buffGO.transform.localPosition = Vector3.zero
buffGO:SetActive(true)
self.BuffIconList[currBuff.id] = BuffView.New(buffGO, buff, icon)
end end
function BuffCtrl:RemoveBuffIcon(buff) function BuffCtrl:RemoveBuffIcon(buff)
if not buff then if not buff then
@ -184,10 +227,69 @@ function BuffCtrl:RemoveBuffIcon(buff)
if not self.BuffIconList then if not self.BuffIconList then
return return
end end
if self.BuffIconList[buff.id] then -- if self.BuffIconList[buff.id] then
self.BuffIconList[buff.id]:Dispose() -- local count=self.BuffIconList[buff.id].count
self.BuffIconList[buff.id] = nil -- if count==1 then
end -- self.BuffIconList[buff.id]:Dispose()
-- self.BuffIconList[buff.id] = nil
-- else
-- self.BuffIconList[buff.id]:SetCount(count-1)
-- end
-- return
-- end
--便利所有之前存在的buff图标有同类型,同数值的叠加,否则新建
for key, value in pairs(self.BuffIconList) do
local buffType = self.BuffIconList[key].buff.type
local floor = self.BuffIconList[key].count
if buff.type == buffType then
if buffType == BuffName.PropertyChange then
--属性 判断属性类型,属性值,属性修改类型
if self.BuffIconList[key].buffPropertyName==buff.propertyName and self.BuffIconList[key].buffValue==buff.Value and self.BuffIconList[key].buffCt==buff.changeType then
if floor==1 then
self.BuffIconList[key]:Dispose()
self.BuffIconList[key] = nil
else
self.BuffIconList[key]:SetCount(floor-1)
end
return
end
--持续伤害类型,伤害系数
elseif buffType == BuffName.DOT then
if self.BuffIconList[key].buffDamageType==buff.damageType and self.BuffIconList[key].buffDamageFactor==buff.damageFactor then
if floor==1 then
self.BuffIconList[key]:Dispose()
self.BuffIconList[key] = nil
else
self.BuffIconList[key]:SetCount(floor-1)
end
return
end
--控制类型
elseif buffType == BuffName.Control then
if self.BuffIconList[key].buffCtrlType==buff.ctrlType then
if floor==1 then
self.BuffIconList[key]:Dispose()
self.BuffIconList[key] = nil
else
self.BuffIconList[key]:SetCount(floor-1)
end
return
end
elseif buffType == BuffName.HOT then
if self.BuffIconList[key].healValue==buff.healValue then
if floor==1 then
self.BuffIconList[key]:Dispose()
self.BuffIconList[key] = nil
else
self.BuffIconList[key]:SetCount(floor-1)
end
return
end
end
end
end
end end
-- 卸载所有动画 -- 卸载所有动画
function BuffCtrl:RemoveAllBuffIcon() function BuffCtrl:RemoveAllBuffIcon()

View File

@ -7,6 +7,14 @@ function BuffView.New(go, buff, icon)
instance.go = go instance.go = go
instance.buff = buff instance.buff = buff
instance.buffPropertyName = buff.propertyName
instance.buffValue = buff.Value
instance.buffCt = buff.changeType
instance.buffDamageType = buff.damageType
instance.buffDamageFactor = buff.damageFactor
instance.buffCtrlType = buff.ctrlType
instance.healValue = buff.healValue
instance.levelText = Util.GetGameObject(go, "level"):GetComponent("Text") instance.levelText = Util.GetGameObject(go, "level"):GetComponent("Text")
instance.layerText = Util.GetGameObject(go, "layer"):GetComponent("Text") instance.layerText = Util.GetGameObject(go, "layer"):GetComponent("Text")
instance.roundText = Util.GetGameObject(go, "round"):GetComponent("Text") instance.roundText = Util.GetGameObject(go, "round"):GetComponent("Text")
@ -16,13 +24,15 @@ function BuffView.New(go, buff, icon)
instance.icon.sprite = Util.LoadSprite(icon) instance.icon.sprite = Util.LoadSprite(icon)
instance.icon.color = Color.New(1,1,1,1) instance.icon.color = Color.New(1,1,1,1)
if buff.layer and buff.cover then -- if buff.layer and buff.cover then
instance.levelText.text = tostring(buff.layer) -- instance.levelText.text = tostring(buff.layer)
instance.count = buff.layer -- instance.count = buff.layer
else -- else
instance.levelText.text = "" -- instance.levelText.text = ""
instance.count = 1 -- instance.count = 1
end -- end
instance.levelText.text = ""
instance.count = 1
instance.layerText.text = "" instance.layerText.text = ""
instance.roundText.text = "" instance.roundText.text = ""
instance.hideFlag = false instance.hideFlag = false
@ -43,7 +53,7 @@ function BuffView:SetCount(count)
count = self.count count = self.count
end end
if not self.buff.cover then --if not self.buff.cover then
if count == 1 then --只有1个独立buff不显示数字 if count == 1 then --只有1个独立buff不显示数字
self.layerText.text = "" self.layerText.text = ""
self.count = 1 self.count = 1
@ -51,7 +61,7 @@ function BuffView:SetCount(count)
self.layerText.text = tostring(count) self.layerText.text = tostring(count)
self.count = count self.count = count
end end
end --end
end end
function BuffView:SetLayer(buff) function BuffView:SetLayer(buff)