157 lines
5.6 KiB
Lua
157 lines
5.6 KiB
Lua
|
---@class WBP_AttackBossPanel_C:UUserWidget
|
||
|
---@field Anim_Fade_Out UWidgetAnimation
|
||
|
---@field Anim_Fade_In UWidgetAnimation
|
||
|
---@field Button_Trigger UButton
|
||
|
---@field CheckBox_Boss_1 UCheckBox
|
||
|
---@field CheckBox_Boss_2 UCheckBox
|
||
|
---@field CheckBox_Boss_3 UCheckBox
|
||
|
---@field CheckBox_Boss_4 UCheckBox
|
||
|
---@field Panel_Button_Trigger UCanvasPanel
|
||
|
---@field Panel_Info UCanvasPanel
|
||
|
---@field Panel_Player_1 UCanvasPanel
|
||
|
---@field Panel_Player_2 UCanvasPanel
|
||
|
---@field Panel_Player_3 UCanvasPanel
|
||
|
---@field Panel_Player_4 UCanvasPanel
|
||
|
---@field ProogressBar_Damage_Player_1 UProgressBar
|
||
|
---@field ProogressBar_Damage_Player_2 UProgressBar
|
||
|
---@field ProogressBar_Damage_Player_3 UProgressBar
|
||
|
---@field ProogressBar_Damage_Player_4 UProgressBar
|
||
|
---@field TextBlock_Damage_Player_1 UTextBlock
|
||
|
---@field TextBlock_Damage_Player_2 UTextBlock
|
||
|
---@field TextBlock_Damage_Player_3 UTextBlock
|
||
|
---@field TextBlock_Damage_Player_4 UTextBlock
|
||
|
---@field TextBlock_Name_Player_1 UTextBlock
|
||
|
---@field TextBlock_Name_Player_2 UTextBlock
|
||
|
---@field TextBlock_Name_Player_3 UTextBlock
|
||
|
---@field TextBlock_Name_Player_4 UTextBlock
|
||
|
---@field TextBlock_Percent_Player_1 UTextBlock
|
||
|
---@field TextBlock_Percent_Player_2 UTextBlock
|
||
|
---@field TextBlock_Percent_Player_3 UTextBlock
|
||
|
---@field TextBlock_Percent_Player_4 UTextBlock
|
||
|
---@field WidgetSwitcher_Trigger UWidgetSwitcher
|
||
|
--Edit Below--
|
||
|
local WBP_AttackBossPanel = {
|
||
|
bInitDoOnce = false,
|
||
|
bHasTriggered = false,
|
||
|
CheckBoxList = {},
|
||
|
CurIndex = 0,
|
||
|
PlayerDamageList = {},
|
||
|
}
|
||
|
|
||
|
function WBP_AttackBossPanel:Construct()
|
||
|
WBP_AttackBossPanel.SuperClass.Construct(self)
|
||
|
|
||
|
if self.bInitDoOnce then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
self.bInitDoOnce = true
|
||
|
|
||
|
self.CurIndex = 1
|
||
|
|
||
|
local AnimFinishDelegate = ObjectExtend.CreateDelegate(self,
|
||
|
function()
|
||
|
if self.bHasTriggered then
|
||
|
self.Panel_Info:SetRenderOpacity(1)
|
||
|
else
|
||
|
self.Panel_Info:SetRenderOpacity(0)
|
||
|
end
|
||
|
end)
|
||
|
self:BindToAnimationFinished(self.Anim_Fade_In, AnimFinishDelegate)
|
||
|
self.Button_Trigger.OnClicked:Add(WBP_AttackBossPanel.OnTriggerButtonClicked, self)
|
||
|
|
||
|
self.CheckBoxList ={
|
||
|
self.CheckBox_Boss_1,
|
||
|
self.CheckBox_Boss_2,
|
||
|
self.CheckBox_Boss_3,
|
||
|
self.CheckBox_Boss_4,
|
||
|
}
|
||
|
|
||
|
for index, CheckBox in ipairs(self.CheckBoxList) do
|
||
|
CheckBox.OnCheckStateChanged:Add(
|
||
|
function(bIsChecked)
|
||
|
if bIsChecked then
|
||
|
self.CurIndex = index
|
||
|
self:OnCurIndexChanged(self.CurIndex)
|
||
|
end
|
||
|
end, self)
|
||
|
end
|
||
|
|
||
|
EventSystem:AddListener(EventType.OnPlayerDamageChanged, WBP_AttackBossPanel.OnPlayerDamageChanged, self)
|
||
|
end
|
||
|
|
||
|
function WBP_AttackBossPanel:Destruct()
|
||
|
EventSystem:RemoveListener(EventType.OnPlayerDamageChanged, WBP_AttackBossPanel.OnPlayerDamageChanged, self)
|
||
|
self:UnbindAllFromAnimationFinished(self.Anim_Fade_In)
|
||
|
self.Button_Trigger.OnClicked:Remove(WBP_AttackBossPanel.OnTriggerButtonClicked, self)
|
||
|
|
||
|
WBP_AttackBossPanel.SuperClass.Destruct(self)
|
||
|
end
|
||
|
|
||
|
function WBP_AttackBossPanel:OnTriggerButtonClicked()
|
||
|
self.bHasTriggered = not self.bHasTriggered
|
||
|
|
||
|
local Anim = self.bHasTriggered and self.Anim_Fade_In or self.Anim_Fade_Out
|
||
|
self:PlayAnimation(Anim, 0.0, 1, EUMGSequencePlayMode.Forward, 1.0)
|
||
|
|
||
|
local WidgetIndex = self.bHasTriggered and 1 or 0
|
||
|
self.WidgetSwitcher_Trigger:SetActiveWidgetIndex(WidgetIndex)
|
||
|
|
||
|
if self.bHasTriggered then
|
||
|
self:OnPlayerDamageChanged(UGCGameSystem.GameState.PlayerDamageList)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function WBP_AttackBossPanel:OnCurIndexChanged(InIndex)
|
||
|
for index, CheckBox in ipairs(self.CheckBoxList) do
|
||
|
if index ~= InIndex then
|
||
|
CheckBox:SetIsChecked(false)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
for i = 1, 4 do
|
||
|
self["Panel_Player_"..tostring(i)]:SetVisibility(ESlateVisibility.Collapsed)
|
||
|
self["CheckBox_Boss_"..tostring(i)]:SetVisibility(ESlateVisibility.Collapsed)
|
||
|
end
|
||
|
for index, _ in pairs(self.BossList) do
|
||
|
self["CheckBox_Boss_"..tostring(index)]:SetVisibility(ESlateVisibility.Visible)
|
||
|
end
|
||
|
|
||
|
local TotalDamage = 0.0
|
||
|
local CurBossID = self.BossList[self.CurIndex]
|
||
|
local CurDamageInfoList = {}
|
||
|
|
||
|
for PlayerKey, DamageInfo in pairs(self.PlayerDamageList) do
|
||
|
local DamageValue = tonumber(DamageInfo[CurBossID])
|
||
|
TotalDamage = TotalDamage + DamageValue
|
||
|
|
||
|
local CurDamageInfo = {PlayerName = "", CurDamage = 0.0}
|
||
|
CurDamageInfo.PlayerName = self.PlayerDataList[PlayerKey].PlayerName
|
||
|
CurDamageInfo.CurDamage = DamageValue
|
||
|
|
||
|
table.insert(CurDamageInfoList, CurDamageInfo)
|
||
|
end
|
||
|
|
||
|
for index, DamageInfo in pairs(CurDamageInfoList) do
|
||
|
self["Panel_Player_"..tostring(index)]:SetVisibility(ESlateVisibility.HitTestInvisible)
|
||
|
self["TextBlock_Name_Player_"..tostring(index)]:SetText(DamageInfo.PlayerName)
|
||
|
self["TextBlock_Damage_Player_"..tostring(index)]:SetText(tostring(math.ceil(DamageInfo.CurDamage)))
|
||
|
|
||
|
local DamagePercent = math.isNearlyEqual(TotalDamage, 0.0, 0.001) and 0 or DamageInfo.CurDamage / TotalDamage
|
||
|
self["ProogressBar_Damage_Player_"..tostring(index)]:SetPercent(DamagePercent)
|
||
|
self["TextBlock_Percent_Player_"..tostring(index)]:SetText(tostring(math.ceil(DamagePercent * 100).."%"))
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function WBP_AttackBossPanel:OnPlayerDamageChanged(InPlayerDamageList)
|
||
|
if self.bHasTriggered then
|
||
|
self.PlayerDamageList = InPlayerDamageList
|
||
|
self.BossList = UGCGameSystem.GameState.BossList
|
||
|
self.PlayerDataList = UGCGameSystem.GameState.PlayerDataList
|
||
|
self.CheckBoxList[self.CurIndex]:SetIsChecked(true)
|
||
|
self:OnCurIndexChanged(self.CurIndex)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
return WBP_AttackBossPanel;
|