80af235e05
EN: 1.12.0.120 CN: 1.12.0.120 JP: 1.12.0.124 KR: 1.12.0.124
282 lines
8.9 KiB
Lua
282 lines
8.9 KiB
Lua
local AdventureModuleHelper = CS.AdventureModuleHelper
|
|
local BossPanelCtrl = class("BossPanelCtrl", BaseCtrl)
|
|
BossPanelCtrl._mapNodeConfig = {
|
|
BossCanvas = {sNodeName = "Boss", sComponentName = "Canvas"},
|
|
BossCanvasGroup = {
|
|
sNodeName = "Boss",
|
|
sComponentName = "CanvasGroup"
|
|
},
|
|
animBoss = {sNodeName = "Boss", sComponentName = "Animator"},
|
|
singleBoss = {
|
|
sNodeName = "goSingleBoss",
|
|
sCtrlName = "Game.UI.Battle.BossHUDCtrl"
|
|
},
|
|
goMultipleBoss = {},
|
|
goBossCtrl = {
|
|
nCount = 3,
|
|
sNodeName = "goMultipleBoss",
|
|
sCtrlName = "Game.UI.Battle.BossHUDCtrl"
|
|
},
|
|
goJointDrillBoss_2 = {},
|
|
goJointDrillBossCtrl = {
|
|
nCount = 2,
|
|
sNodeName = "goJointDrillBoss_2_",
|
|
sCtrlName = "Game.UI.Battle.BossHUDCtrl"
|
|
}
|
|
}
|
|
BossPanelCtrl._mapEventConfig = {
|
|
RefreshCenterHpBar = "OnEvent_RefreshCenterHpBar",
|
|
MonsterBossDead = "OnEvent_MonsterBossDead",
|
|
ShowCenterHpBar = "OnEvent_ShowCenterHpBar",
|
|
Level_Settlement = "OnEvent_ResetBossHUD",
|
|
ResetBossHUD = "OnEvent_ResetBossHUD",
|
|
InputEnable = "OnEvent_InputEnable",
|
|
ADVENTURE_LEVEL_UNLOAD_COMPLETE = "OnEvent_ResetBossHUD"
|
|
}
|
|
function BossPanelCtrl:Awake()
|
|
self.bInputEnable = false
|
|
self.inputEnableCallback = nil
|
|
end
|
|
function BossPanelCtrl:OnEnable()
|
|
self.bInit = true
|
|
self.nBloodType = 0
|
|
self.tbBoss = {}
|
|
self.tbBossCtrl = {}
|
|
self._mapNode.BossCanvas.enabled = true
|
|
NovaAPI.SetCanvasGroupAlpha(self._mapNode.BossCanvasGroup, 0)
|
|
NovaAPI.SetComponentEnable(self._mapNode.BossCanvas, false)
|
|
end
|
|
function BossPanelCtrl:OnDisable()
|
|
self.tbBoss = {}
|
|
end
|
|
function BossPanelCtrl:OnDestroy()
|
|
end
|
|
function BossPanelCtrl:SetBossHUD(mapData, ctrl, bRefresh)
|
|
ctrl:CloseUI()
|
|
ctrl:OpenUI(mapData.nBossId, mapData.nDataId, mapData.nType, self.nBloodType, bRefresh)
|
|
self.tbBossCtrl[mapData.nBossId] = ctrl
|
|
end
|
|
function BossPanelCtrl:RefreshBossPanel(bRefresh)
|
|
if #self.tbBoss == 0 then
|
|
self:CloseUI()
|
|
return
|
|
end
|
|
if self.bInit then
|
|
self.bInit = false
|
|
NovaAPI.SetComponentEnable(self._mapNode.BossCanvas, true)
|
|
self.bossHUDOpenAnimTweener = Sequence()
|
|
self.bossHUDOpenAnimTweener:Append(self._mapNode.BossCanvasGroup:DOFade(1, 0.5))
|
|
self.bossHUDOpenAnimTweener:SetUpdate(true)
|
|
self.bossHUDOpenAnimTweener:OnComplete(function()
|
|
self.bossHUDOpenAnimTweener:Kill()
|
|
self.bossHUDOpenAnimTweener = nil
|
|
end)
|
|
end
|
|
self.nBloodType = 0
|
|
local refreshHUD = function()
|
|
if self.nBloodType == AllEnum.BossBloodType.Single then
|
|
self._mapNode.singleBoss.gameObject:SetActive(true)
|
|
self._mapNode.goMultipleBoss.gameObject:SetActive(false)
|
|
self._mapNode.goJointDrillBoss_2.gameObject:SetActive(false)
|
|
local mapData = self.tbBoss[1]
|
|
self:SetBossHUD(mapData, self._mapNode.singleBoss, bRefresh)
|
|
self.tbBoss[1].bInit = false
|
|
EventManager.Hit("ShowBossHUD", mapData.nBossId, mapData.nType, false, mapData.nDataId, self.nBloodType)
|
|
elseif self.nBloodType == AllEnum.BossBloodType.Multiple then
|
|
self._mapNode.singleBoss.gameObject:SetActive(false)
|
|
self._mapNode.goMultipleBoss.gameObject:SetActive(true)
|
|
self._mapNode.goJointDrillBoss_2.gameObject:SetActive(false)
|
|
for i, v in ipairs(self._mapNode.goBossCtrl) do
|
|
v.gameObject:SetActive(self.tbBoss[i] ~= nil)
|
|
if self.tbBoss[i] ~= nil then
|
|
self:SetBossHUD(self.tbBoss[i], v, bRefresh)
|
|
self.tbBoss[i].bInit = false
|
|
EventManager.Hit("ShowBossHUD", self.tbBoss[i].nBossId, self.tbBoss[i].nType, true, self.tbBoss[i].nDataId, self.nBloodType)
|
|
end
|
|
end
|
|
elseif self.nBloodType == AllEnum.BossBloodType.JointDrill_Mode_2 then
|
|
self._mapNode.singleBoss.gameObject:SetActive(false)
|
|
self._mapNode.goMultipleBoss.gameObject:SetActive(false)
|
|
self._mapNode.goJointDrillBoss_2.gameObject:SetActive(true)
|
|
for i, v in ipairs(self._mapNode.goJointDrillBossCtrl) do
|
|
v.gameObject:SetActive(self.tbBoss[i] ~= nil)
|
|
if self.tbBoss[i] ~= nil then
|
|
self:SetBossHUD(self.tbBoss[i], v, bRefresh)
|
|
self.tbBoss[i].bInit = false
|
|
EventManager.Hit("ShowBossHUD", self.tbBoss[i].nBossId, self.tbBoss[i].nType, true, self.tbBoss[i].nDataId, self.nBloodType)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if self.bossAnimTimer ~= nil then
|
|
self.bossAnimTimer:Cancel()
|
|
self.bossAnimTimer = nil
|
|
if self.nBloodType == AllEnum.BossBloodType.Multiple then
|
|
refreshHUD()
|
|
end
|
|
end
|
|
if #self.tbBoss == 1 then
|
|
self.nBloodType = AllEnum.BossBloodType.Single
|
|
if self.nLastBossCount == 2 then
|
|
local nAnimLen = NovaAPI.GetAnimClipLength(self._mapNode.animBoss, {
|
|
"MultipleBoss_out"
|
|
})
|
|
self.bossAnimTimer = self:AddTimer(1, nAnimLen, function()
|
|
self._mapNode.animBoss:Play("SingleBoss_in", 0, 0)
|
|
self.bossAnimTimer = nil
|
|
refreshHUD()
|
|
end)
|
|
self._mapNode.animBoss:Play("MultipleBoss_out", 0, 0)
|
|
else
|
|
self._mapNode.animBoss:Play("SingleBoss_in", 0, 0)
|
|
refreshHUD()
|
|
end
|
|
else
|
|
self.nBloodType = AllEnum.BossBloodType.Multiple
|
|
if self._panel.nType ~= nil and self._panel.nType == GameEnum.JointDrillMode.JointDrill_Mode_2 and #self.tbBoss == 2 then
|
|
self.nBloodType = AllEnum.BossBloodType.JointDrill_Mode_2
|
|
end
|
|
if self.nLastBossCount == 3 and #self.tbBoss == 2 then
|
|
local nAnimLen = NovaAPI.GetAnimClipLength(self._mapNode.animBoss, {
|
|
"MultipleBoss_out"
|
|
})
|
|
self.bossAnimTimer = self:AddTimer(1, nAnimLen, function()
|
|
self._mapNode.animBoss:Play("MultipleBoss_in", 0, 0)
|
|
self.bossAnimTimer = nil
|
|
refreshHUD()
|
|
end)
|
|
self._mapNode.animBoss:Play("MultipleBoss_out", 0, 0)
|
|
else
|
|
refreshHUD()
|
|
self._mapNode.animBoss:Play("MultipleBoss_in", 0, 0)
|
|
end
|
|
end
|
|
self.nLastBossCount = #self.tbBoss
|
|
end
|
|
function BossPanelCtrl:CloseUI()
|
|
NovaAPI.SetCanvasGroupAlpha(self._mapNode.BossCanvasGroup, 1)
|
|
self.bossHUDCloseAnimTweener = Sequence()
|
|
self.bossHUDCloseAnimTweener:Append(self._mapNode.BossCanvasGroup:DOFade(0, 0.5))
|
|
self.bossHUDCloseAnimTweener:OnComplete(function()
|
|
self._mapNode.BossCanvas.enabled = false
|
|
self.bossHUDCloseAnimTweener:Kill()
|
|
self.bossHUDCloseAnimTweener = nil
|
|
end)
|
|
self.bossHUDCloseAnimTweener:SetUpdate(true)
|
|
self.tbBoss = {}
|
|
self.tbBossCtrl = {}
|
|
end
|
|
function BossPanelCtrl:OnEvent_ShowCenterHpBar(nBossId, nType, bShow, nDataId)
|
|
if (nType == GameEnum.monsterBloodType.BOSS or nType == GameEnum.monsterBloodType.MINIBOSS or nType == GameEnum.monsterBloodType.BOSSRUSH or nType == GameEnum.monsterBloodType.JOINTDRILLBOSS) and bShow then
|
|
local bAdded = false
|
|
self.nLastBossCount = #self.tbBoss
|
|
for _, v in ipairs(self.tbBoss) do
|
|
if v.nBossId == nBossId then
|
|
bAdded = true
|
|
break
|
|
end
|
|
end
|
|
if not bAdded then
|
|
if #self.tbBoss >= 3 then
|
|
printError("场上同时显示boss血条数量超过3!!!")
|
|
return
|
|
end
|
|
local nSortType = 0
|
|
if nType == GameEnum.monsterBloodType.BOSSRUSH or nType == GameEnum.monsterBloodType.JOINTDRILLBOSS then
|
|
local nBossCount = 0
|
|
for _, v in ipairs(self.tbBoss) do
|
|
if v.nType == GameEnum.monsterBloodType.BOSSRUSH then
|
|
nBossCount = nBossCount + 1
|
|
end
|
|
end
|
|
if 1 < nBossCount then
|
|
return
|
|
end
|
|
elseif nType == GameEnum.monsterBloodType.BOSS then
|
|
nSortType = 1
|
|
elseif nType == GameEnum.monsterBloodType.MINIBOSS then
|
|
nSortType = 2
|
|
end
|
|
table.insert(self.tbBoss, {
|
|
nBossId = nBossId,
|
|
nType = nType,
|
|
nSortType = nSortType,
|
|
nDataId = nDataId,
|
|
bInit = true
|
|
})
|
|
table.sort(self.tbBoss, function(a, b)
|
|
if a.nSortType == b.nSortType then
|
|
return a.nDataId < b.nDataId
|
|
end
|
|
return a.nSortType < b.nSortType
|
|
end)
|
|
if self.bInputEnable then
|
|
self.inputEnableCallback = nil
|
|
self:RefreshBossPanel()
|
|
else
|
|
function self.inputEnableCallback()
|
|
self:RefreshBossPanel()
|
|
end
|
|
end
|
|
end
|
|
else
|
|
end
|
|
end
|
|
function BossPanelCtrl:OnEvent_ResetBossHUD()
|
|
self.bInit = true
|
|
self.nBloodType = 0
|
|
for _, v in pairs(self.tbBossCtrl) do
|
|
v:CloseUI()
|
|
end
|
|
self:CloseUI()
|
|
end
|
|
function BossPanelCtrl:OnEvent_RefreshCenterHpBar()
|
|
if self.bInputEnable then
|
|
self.inputEnableCallback = nil
|
|
self:RefreshBossPanel(true)
|
|
else
|
|
function self.inputEnableCallback()
|
|
self:RefreshBossPanel(true)
|
|
end
|
|
end
|
|
end
|
|
function BossPanelCtrl:OnEvent_MonsterBossDead(nBossId)
|
|
local nIndex = 0
|
|
for k, v in ipairs(self.tbBoss) do
|
|
if v.nBossId == nBossId then
|
|
nIndex = k
|
|
break
|
|
end
|
|
end
|
|
if nIndex ~= 0 then
|
|
table.remove(self.tbBoss, nIndex)
|
|
end
|
|
if self.nBloodType == AllEnum.BossBloodType.Single then
|
|
self._mapNode.animBoss:Play("SingleBoss_out", 0, 0)
|
|
end
|
|
end
|
|
function BossPanelCtrl:OnEvent_InputEnable(bEnable)
|
|
self.bInputEnable = bEnable
|
|
if bEnable then
|
|
if self.bossHUDCloseAnimTweener ~= nil then
|
|
self.bossHUDCloseAnimTweener:Pause()
|
|
end
|
|
if self.bossHUDOpenAnimTweener ~= nil then
|
|
self.bossHUDOpenAnimTweener:Play()
|
|
end
|
|
else
|
|
if self.bossHUDOpenAnimTweener ~= nil then
|
|
self.bossHUDOpenAnimTweener:Pause()
|
|
end
|
|
if self.bossHUDCloseAnimTweener ~= nil then
|
|
self.bossHUDCloseAnimTweener:Play()
|
|
end
|
|
end
|
|
NovaAPI.SetCanvasGroupAlpha(self._mapNode.BossCanvasGroup, bEnable == true and 1 or 0)
|
|
if bEnable and self.inputEnableCallback ~= nil then
|
|
self.inputEnableCallback()
|
|
self.inputEnableCallback = nil
|
|
end
|
|
end
|
|
return BossPanelCtrl
|