---@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;