From 027809a5bd0600f3f672c30b588bcb126e5e1b02 Mon Sep 17 00:00:00 2001 From: xiekaidong Date: Thu, 15 Jun 2023 18:55:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=98=E6=96=97=E6=94=AF=E6=8C=81=E8=A1=80?= =?UTF-8?q?=E9=87=8F=E6=8D=A2=E7=9A=AE=E8=82=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/app/bf/unity/character_spine_object.lua | 7 +++++++ .../battle/component/battle_unit_comp.lua | 21 +++++++++++++++++++ lua/app/userdata/battle/battle_data.lua | 2 ++ .../battle/team/battle_unit_entity.lua | 20 ++++++++++++++++++ 4 files changed, 50 insertions(+) diff --git a/lua/app/bf/unity/character_spine_object.lua b/lua/app/bf/unity/character_spine_object.lua index 51084f56..eca889db 100644 --- a/lua/app/bf/unity/character_spine_object.lua +++ b/lua/app/bf/unity/character_spine_object.lua @@ -51,6 +51,13 @@ function CharacterSpineObject:refreshSkeletonDataAsset(dataAsset) self.characterSpineHelper:Reload() end +function CharacterSpineObject:setSkin(skinName) + local skeletonGraphic = self:getSkeletonGraphic() + skeletonGraphic.initialSkinName = skinName + skeletonGraphic:Initialize(true) + self.characterSpineHelper:Reload() +end + function CharacterSpineObject:_genAllChildren() local childMap = {} if self.characterSpineHelper then diff --git a/lua/app/module/battle/component/battle_unit_comp.lua b/lua/app/module/battle/component/battle_unit_comp.lua index 3b29809f..9f5e7486 100644 --- a/lua/app/module/battle/component/battle_unit_comp.lua +++ b/lua/app/module/battle/component/battle_unit_comp.lua @@ -694,6 +694,7 @@ function BattleUnitComp:exitIdleState() end function BattleUnitComp:enterIdleState() + self:refreshHpSkin() self:playAnimation(SPINE_ANIMATION_NAME.IDLE, true, false) end @@ -1698,6 +1699,7 @@ function BattleUnitComp:takeDamageOrCure(atker, num, effectType, effectStatus, d local delayTime = self.lastSameTimeHealCount * BattleConst.EFFECT_NUMBER_INTERVAL self:showEffectNumber(BattleConst.EFFECT_COLOR_GREEN, BattleConst.EFFECT_TYPE_BUFF, "+" .. num, x, y, delayTime) end + self:refreshHpSkin() local hpPercent = self.unitEntity:getHpPercent() self.battleController:refreshHp(self.side, hp, hpPercent) if not atker:getIsFinalBlock() or atker:getIsCentralizedAttack() then @@ -1743,6 +1745,25 @@ function BattleUnitComp:showEffectNumber(colorType, effectType, num, x, y, delay self.battleController:showEffectNumber(colorType, effectType, num, x, y + addY, delayTime, showCombo) end +function BattleUnitComp:refreshHpSkin() + if self.unitEntity:getHpSkinInfo() then + local skin + local hpp = self.unitEntity:getHpPercent() * DEFAULT_FACTOR + for index, info in ipairs(self.unitEntity:getHpSkinInfo()) do + if hpp <= info.hpp then + skin = info.skin + break + end + end + if self.lastHpSkin == skin then + return + end + self.lastHpSkin = skin + Logger.logHighlight(skin) + self.baseObject:setSkin(skin) + end +end + function BattleUnitComp:playDead(callback) self.deadOverCallback = callback if self:getIsClear() then diff --git a/lua/app/userdata/battle/battle_data.lua b/lua/app/userdata/battle/battle_data.lua index e5dbd3ac..f9cf5930 100644 --- a/lua/app/userdata/battle/battle_data.lua +++ b/lua/app/userdata/battle/battle_data.lua @@ -658,6 +658,8 @@ function BattleData:addMonster(monsterId, newTeam, battleController) isBoss = monsterInfo.is_boss, exp = monsterInfo.monster_exp or 0, body = monsterInfo.body, + hpSkinHp = monsterInfo.monster_hp, + hpSkinSkin = monsterInfo.monster_hp_skin, attr = { hp = hp, max_hp = hp, diff --git a/lua/app/userdata/battle/team/battle_unit_entity.lua b/lua/app/userdata/battle/team/battle_unit_entity.lua index 87ad41b2..124e9967 100644 --- a/lua/app/userdata/battle/team/battle_unit_entity.lua +++ b/lua/app/userdata/battle/team/battle_unit_entity.lua @@ -12,6 +12,7 @@ function BattleUnitEntity:init(unitData, side, team) self.damageCount = 0 -- 记录伤害 self.healCount = 0 -- 记录治疗 self.activeSkillReleaseCount = 0 -- 记录主动技能释放次数 + self.hpSkinInfo = nil self:initSkill() end @@ -429,6 +430,25 @@ function BattleUnitEntity:getAttrValue(attr) return self.team:getAttrValue(attr) end +function BattleUnitEntity:getHpSkinInfo() + if not self.hpSkinInfo then + if self.unitData.hpSkinHp and self.unitData.hpSkinSkin then + self.hpSkinInfo = {} + for index, v in pairs(self.unitData.hpSkinHp) do + local skin = self.unitData.hpSkinSkin[index] + if not skin then + break + end + table.insert(self.hpSkinInfo, {hpp = v, skin = skin}) + end + table.sort(self.hpSkinInfo, function(a, b) + return a.hpp < b.hpp + end) + end + end + return self.hpSkinInfo +end + function BattleUnitEntity:addSkillExtraUseTimes(skillId, count) if self.skillExtraUseTimes == nil then self.skillExtraUseTimes = {}