2025-01-04 23:00:19 +08:00

122 lines
4.7 KiB
Lua

---@class WB_BroadcastItem_C:UUserWidget
---@field Show UWidgetAnimation
---@field HorizontalBox_Assister UHorizontalBox
---@field Image_Frame UImage
---@field Image_WeaponIcon_BroadcastData2 UImage
---@field TextBlock_Assister UTextBlock
---@field TextBlock_BroadcastData2_1 UTextBlock
---@field TextBlock_BroadcastData2_2 UTextBlock
---@field WidgetSwitcher_Weapon UWidgetSwitcher
---@field Tex_BGWrite UTexture2D
--Edit Below--
---@type WB_BroadcastItem_C
local WB_BroadcastItem = { bInitDoOnce = false; };
WB_BroadcastItem.AnimationTime = 0.6;
WB_BroadcastItem.Constructed = false;
WB_BroadcastItem.ConstructCanInit = false;
WB_BroadcastItem.AnimPlaybackSpeed = 1.5;
WB_BroadcastItem.BroadcastTime = 3.5;
function WB_BroadcastItem:Construct()
WB_BroadcastItem.SuperClass.Construct(self);
end
function WB_BroadcastItem:ShowBroadcast()
self:PlayAnimation(self.Show, 0, 1, EUMGSequencePlayMode.Forward, self.AnimPlaybackSpeed);
-- 播放关闭动画
UGCEventSystem.SetTimer(self, function()
self:PlayAnimation(self.Show, 0, 1, EUMGSequencePlayMode.Reverse, self.AnimPlaybackSpeed);
end, self.BroadcastTime - self.AnimationTime / self.AnimPlaybackSpeed);
-- 延迟销毁
UGCEventSystem.SetTimer(self, function()
self:RemoveFromParent();
end, self.BroadcastTime);
end
-- 初始化
function WB_BroadcastItem:InitBroadcast(VictimKey, CauserKey, WeaponID, DamageType, IsHeadShotDamage, Distance, DamageValue, Assister)
self:ShowBroadcast();
--UGCLogSystem.Log("[WB_BroadcastItem_InitBroadcast] DamageType:%s", tostring(DamageType))
-- UGCLogSystem.LogTree("[WB_BroadcastItem_InitBroadcast] EDamageType:", EDamageType)
local KillerTeam = UGCGameSystem.GameState:GetPlayerTeamIDByPlayerKey(CauserKey)
local DeadTeam = UGCGameSystem.GameState:GetPlayerTeamIDByPlayerKey(VictimKey)
local KillerTeamColor = TeamConfig.TeamColor[KillerTeam]
local DeadTeamColor = TeamConfig.TeamColor[DeadTeam]
local KillerName = UGCGameSystem.GameState:GetPlayerNameByPlayerKey(CauserKey);
local DeadName = UGCGameSystem.GameState:GetPlayerNameByPlayerKey(VictimKey);
local AssisterName = UGCGameSystem.GameState:GetPlayerNameByPlayerKey(Assister);
if KillerTeamColor then
self.TextBlock_BroadcastData2_1:SetColorAndOpacity({SpecifiedColor = KillerTeamColor, ColorUseRule = 0})
end
if DeadTeamColor then
self.TextBlock_BroadcastData2_2:SetColorAndOpacity({SpecifiedColor = DeadTeamColor, ColorUseRule = 0})
end
if Assister > 0 and AssisterName ~= "" then
local AssisterTeam = UGCGameSystem.GameState:GetPlayerTeamIDByPlayerKey(Assister)
local AssisterTeamColor = TeamConfig.TeamColor[AssisterTeam]
self.HorizontalBox_Assister:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
self.TextBlock_Assister:SetColorAndOpacity({SpecifiedColor = AssisterTeamColor, ColorUseRule = 0})
end
self.TextBlock_BroadcastData2_1:SetText(KillerName);
self.TextBlock_BroadcastData2_2:SetText(DeadName);
self.TextBlock_Assister:SetText(KillerName);
if WeaponID > 0 then
self.WidgetSwitcher_Weapon:SetActiveWidgetIndex(0);
local WeaponIcon;
local IsBigIcon = ItemTable.AllItem[WeaponID].BigPic ~= nil;
if IsBigIcon then
WeaponIcon = UGCSystemLibrary.LoadAsset(ItemTable.AllItem[WeaponID].BigPic, true);
else
WeaponIcon = UGCSystemLibrary.LoadAsset(ItemTable.AllItem[WeaponID].SmallPic, true);
end
if UE.IsValid(WeaponIcon) then
--- 使用材质 设置武器剪影
local Material = self.Image_WeaponIcon_BroadcastData2:GetDynamicMaterial();
if Material ~= nil then
Material:SetTextureParameterValue("MaskTexture", WeaponIcon);
Material:SetTextureParameterValue("Texture", self.Tex_BGWrite);
Material:SetScalarParameterValue("Alpha", 1.0);
Material:SetScalarParameterValue("Rotator", 0.0);
end
-- Small尺寸Icon单独判断
if not IsBigIcon then
self.Image_WeaponIcon_BroadcastData2:SetRenderScale({ X = -0.5, Y = 1 });
end
else
UGCLogSystem.LogError("[W_Broadcast_Item:InitBroadcast] WeaponIcon is nil");
end
elseif KillerName == "" then
self.WidgetSwitcher_Weapon:SetActiveWidgetIndex(2);
-- elseif DamageType >= MechanismConfig.TriggerMechanismType.MechanismWeapon then
elseif DamageType == EDamageType.UGCPointDamage then
self.WidgetSwitcher_Weapon:SetActiveWidgetIndex(3);
else
self.WidgetSwitcher_Weapon:SetActiveWidgetIndex(1);
end
--- 为自己所杀
if CauserKey == UGCSystemLibrary.GetLocalPlayerKey() then
self.Image_Frame:SetVisibility(ESlateVisibility.Visible);
-- 判断近战击杀
if UGCSystemLibrary.GetItemTypeID(WeaponID) == 108 then
SoundSystem.PlaySound(SoundSystem.ESound.Kill2);
elseif DamageType == EDamageType.UGCPointDamage then
SoundSystem.PlaySound(SoundSystem.ESound.MechanismKill);
else
SoundSystem.PlaySound(SoundSystem.ESound.Kill3);
end
end
end
return WB_BroadcastItem;