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

281 lines
7.4 KiB
Plaintext

local BaseCell = autoImport("BaseCell")
SceneBottomHpSpCell = reusableClass("SceneBottomHpSpCell", BaseCell);
SceneBottomHpSpCell.resId = ResourcePathHelper.UICell("SceneBottomHpSpCell")
local tempVector3 = LuaVector3.zero
SceneBottomHpSpCell.PoolSize = 30
function SceneBottomHpSpCell:Construct(asArray, args)
self:DoConstruct(asArray, args)
end
function SceneBottomHpSpCell:DoConstruct(asArray, args)
self._alive = true
local gameObject = args[1]
local creature = args[2]
self.gameObject = gameObject
tempVector3:Set(0,0,0)
self.gameObject.transform.localPosition = tempVector3
self.gameObject.transform.localRotation = LuaGeometry.Const_Qua_identity
tempVector3:Set(1,1,1)
self.gameObject.transform.localScale = tempVector3
self:initData(creature)
self:initHpView()
self:initSpView()
self:setHpSpVisible(true)
local value = creature.data.props.Hp:GetValue()
local MaxValue = creature.data.props.MaxHp:GetValue()
self:SetHp(value,MaxValue)
value = creature.data.props.Sp:GetValue()
MaxValue = creature.data.props.MaxSp:GetValue()
self:SetSp(value,MaxValue)
end
function SceneBottomHpSpCell:Deconstruct(asArray)
if(not LuaGameObject.ObjectIsNull(self.gameObject))then
LeanTween.cancel(self.uibloodslider.gameObject)
if(self.spSlider)then
LeanTween.cancel(self.spSlider.gameObject)
end
Game.GOLuaPoolManager:AddToSceneUIPool(SceneBottomHpSpCell.resId, self.gameObject)
end
self._alive = false
end
function SceneBottomHpSpCell:Finalize()
end
function SceneBottomHpSpCell:initData( creature )
-- body
self.creatureType = creature:GetCreatureType()
self.camp = creature.data:GetCamp()
self.detailedType = creature.data.detailedType
self.ismyself = self.creatureType == Creature_Type.Me
self.isFirstSpInit = true
self.isFirstHpInit = true
self.isBeHi = false
self.bosstype = creature:GetBossType()
end
function SceneBottomHpSpCell:initHpView( )
-- body
self.uibloodcontainer = self:FindGO("BloodContainer")
self.uibloodslider = self:FindGO("BloodSlider"):GetComponent(UIProgressBar)
self.uiblood = self:FindGO("Blood"):GetComponent(UISprite)
self:initCreateBg()
self:initDecorate()
self:initHpValueLabel()
end
function SceneBottomHpSpCell:initHpValueLabel( )
self.bloodDetailContainer = self:FindGO("BloodDetailContainer")
if((Game.MapManager:IsPVEMode() and self:isMvpOrMini()) or (GvgProxy.Instance.fire and self:isPlayer()))then
self.bloodVolume = self:FindComponent("BloodVolume",UILabel)
self.bloodVolume.text = ""
self:Show(self.bloodDetailContainer)
else
self:Hide(self.bloodDetailContainer)
self.bloodVolume = nil
end
end
function SceneBottomHpSpCell:initSpView( )
-- body
local spContainer = self:FindGO("SpContainer")
if(self.ismyself)then
spContainer:SetActive(true)
self.spContainer = spContainer
local spSlider = self:FindGO("SpSlider"):GetComponent(UIProgressBar)
self.spSlider = spSlider
else
spContainer:SetActive(false)
end
end
function SceneBottomHpSpCell:setHpSpVisible( visible )
-- body
local objNull = self:ObjIsNil(self.gameObject)
if(objNull)then
return
end
self.gameObject:SetActive(visible)
end
function SceneBottomHpSpCell:SetHpLabel( hp )
if(self.bloodVolume)then
hp = hp == 0 and "" or hp
self.bloodVolume.text = hp
end
end
function SceneBottomHpSpCell:SetHp( hp,maxhp )
-- body
local objNull = self:ObjIsNil(self.uibloodcontainer)
if(objNull)then
return
end
self:tweenHpSlider(hp,maxhp)
local isLowBlood
if(hp/maxhp <= 0.2 and hp ~=0)then
isLowBlood = true
else
isLowBlood = false
end
if self.ismyself and isLowBlood then
if(not LowBloodBlinkView.Instance)then
LowBloodBlinkView.ShowLowBloodBlink()
end
elseif(self.ismyself and not isLowBlood)then
if(LowBloodBlinkView.Instance)then
LowBloodBlinkView.closeBloodBlink()
end
end
self:SetHpLabel(hp)
end
function SceneBottomHpSpCell:SetSp( sp,maxSp)
-- body
if self.ismyself then
local objNull = self:ObjIsNil(self.spContainer)
if(objNull)then
return
end
maxSp = maxSp == 0 and 99999999999 or maxSp
local curSp = self.spSlider.value * maxSp
if(self.spContainer.activeSelf and not self.isFirstSpInit)then
LeanTween.cancel(self.spSlider.gameObject)
LeanTween.value(self.spSlider.gameObject, function (v)
self.spSlider.value = v/maxSp
end, curSp, sp, math.abs((sp - curSp) / maxSp) * 0.5)
else
self.spSlider.value = sp/maxSp
self.isFirstSpInit = false
end
end
end
function SceneBottomHpSpCell:tweenHpSlider(hp,maxhp )
-- body
local objNull = self:ObjIsNil(self.uibloodcontainer)
if(objNull)then
return
end
if self.uibloodcontainer.gameObject.activeSelf then
local curHp = self.uibloodslider.value * maxhp
LeanTween.cancel(self.uibloodslider.gameObject)
if( not self.isFirstHpInit)then
LeanTween.value(self.uibloodslider.gameObject, function (v)
self:setHpValueAndColor(v / maxhp,hp)
end, curHp, hp, math.abs((hp - curHp) / maxhp) * 0.5)
else
self:setHpValueAndColor(hp / maxhp,hp)
self.isFirstHpInit = false
end
else
local value = hp == 0 and 0 or hp / maxhp
self:setHpValueAndColor(value,hp)
end
end
--finalhp 根據finalHp 和目前血條動畫目前進度,來決定是否隱藏血條
function SceneBottomHpSpCell:setHpValueAndColor( value,finalHp )
-- body
self.uibloodslider.value = value
if(value <=0 and finalHp == 0)then
self:setHpSpVisible(false)
return
end
if self.uibloodslider.value <= 0.2 and self.uibloodslider.value > 0 then
if(self.camp == RoleDefines_Camp.ENEMY )then
self.uiblood.spriteName = "com_bg_hp_3s"
else
self.uiblood.spriteName = "com_bg_hp_2s"
end
self.uiblood:MarkAsChanged()
else
if(self.camp == RoleDefines_Camp.ENEMY )then
self.uiblood.spriteName = "com_bg_hp_4s"
else
self.uiblood.spriteName = "com_bg_hp_s"
end
self.uiblood:MarkAsChanged()
end
end
function SceneBottomHpSpCell:isMvpOrMini( )
-- body
local detailedType = self.detailedType
if(detailedType == NpcData.NpcDetailedType.MINI or detailedType == NpcData.NpcDetailedType.MVP)then
return true
end
return false
end
function SceneBottomHpSpCell:isMvp( )
-- body
local detailedType = self.detailedType
if(detailedType == NpcData.NpcDetailedType.MVP)then
return true
end
return false
end
function SceneBottomHpSpCell:isPlayer( )
-- body
if(self.creatureType == Creature_Type.Player)then
return true
end
return false
end
function SceneBottomHpSpCell:initDecorate( )
-- body
local decorator = self:FindGO("Decorate")
if(self:isMvpOrMini())then
local rightBossBg = self:FindGO("rightBossBg"):GetComponent(UISprite)
local leftBossBg = self:FindGO("leftBossBg"):GetComponent(UISprite)
if(self.detailedType == NpcData.NpcDetailedType.MINI)then
rightBossBg.spriteName = "ui_head2_2_3"
leftBossBg.spriteName = "ui_head2_2_1"
elseif(self.detailedType == NpcData.NpcDetailedType.MVP)then
rightBossBg.spriteName = "ui_head2_1_3"
leftBossBg.spriteName = "ui_head2_1"
end
if(self.bosstype and self.bosstype == 3)then
rightBossBg.spriteName = "Boss_head1"
leftBossBg.spriteName = "ui_mvp_dead11_JM"
end
decorator:SetActive(true)
else
decorator:SetActive(false)
end
end
function SceneBottomHpSpCell:setCamp( camp )
-- body
self.camp = camp
self:initCreateBg()
end
function SceneBottomHpSpCell:initCreateBg( )
-- body
local camp = self.camp
if(camp == RoleDefines_Camp.ENEMY )then
self.uiblood.spriteName = "com_bg_hp_4s"
else
self.uiblood.spriteName = "com_bg_hp_s"
end
end
function SceneBottomHpSpCell:Alive()
return self._alive
end