---@class WB_TraceTarget_C:UUserWidget ---@field Border_Target UBorder ---@field Image_Key UImage ---@field Image_Positioning UImage ---@field Overlay_Positioning UOverlay ---@field TextBlock_Dis UTextBlock --Edit Below-- ---@type WB_TraceTarget_C local WB_TraceTarget = { bInitDoOnce = false; TargetPlayerKey = -1; InterpSpeed = 20; }; function WB_TraceTarget:Construct() UGCEventSystem.AddListener(EventEnum.KeyOwnerChange, self.KeyOwnerChange, self) end function WB_TraceTarget:KeyOwnerChange(NewOwnerPlayerKey) self.TargetPlayerKey = NewOwnerPlayerKey if self.TargetPlayerKey > 0 and UGCSystemLibrary.GetLocalPlayerKey() == self.TargetPlayerKey then self:SetVisibility(ESlateVisibility.Hidden) --else -- self:SetVisibility(ESlateVisibility.SelfHitTestInvisible) end end function WB_TraceTarget:GetKey() --if self.Key == nil then -- self.Key = UGCSystemLibrary.GetUniqueInstanceFromPath(UGCGameSystem.GetUGCResourcesFullPath('Asset/Blueprint/SceneKey/BP_Key.BP_Key_C')) --end return self.Key end function WB_TraceTarget:SetKey(TargetKey, KeyColor) if UE.IsValid(TargetKey) then self.Key = TargetKey if KeyColor then self.Image_Key:SetColorAndOpacity(KeyColor) end end end function WB_TraceTarget:Tick(MyGeometry, InDeltaTime) if self:GetKey() and (self:GetKey():GetIsRealKey() or self:GetKey():GetbEnableKeyPickup()) then local TraceActorPos = nil if self:GetKey().bIsRealKey and self.TargetPlayerKey > 0 and UGCSystemLibrary.GetLocalPlayerKey() ~= self.TargetPlayerKey then local TargetPawn = UGCGameSystem.GetPlayerPawnByPlayerKey(self.TargetPlayerKey) if UE.IsValid(TargetPawn) then TraceActorPos = TargetPawn:K2_GetActorLocation() end elseif self.TargetPlayerKey < 0 then TraceActorPos = self:GetKey().Key:K2_GetComponentLocation() end if TraceActorPos then local CanvasSlot = WidgetLayoutLibrary.SlotAsCanvasSlot(self.Border_Target) local WidgetPosition, TargetDir = WidgetLibrary.SetWidgetAlignToWorldPosition(TraceActorPos, WidgetLayoutLibrary.SlotAsCanvasSlot(self.Border_Target)) if self.NowWidgetPos then self.NowWidgetPos = KismetMathLibrary.Vector2DInterpTo(self.NowWidgetPos, WidgetPosition, InDeltaTime, self.InterpSpeed) else self.NowWidgetPos = WidgetPosition end CanvasSlot:SetPosition(self.NowWidgetPos) if TargetDir then self.Overlay_Positioning:SetVisibility(ESlateVisibility.SelfHitTestInvisible) local UpdateAngle = KismetMathLibrary.DegAtan(TargetDir.Y / TargetDir.X) if TargetDir.X < 0 then UpdateAngle = UpdateAngle + 180 end self.Overlay_Positioning:SetRenderAngle(UpdateAngle) else self.Overlay_Positioning:SetVisibility(ESlateVisibility.Hidden) end local CameraManager = UGCSystemLibrary.GetLocalPlayerController().PlayerCameraManager local CameraPos = CameraManager:K2_GetActorLocation() self.TextBlock_Dis:SetText(string.format("%.0fm", VectorHelper.Length(VectorHelper.Sub(TraceActorPos, CameraPos)) / 100)) end end end -- function WB_TraceTarget:Destruct() -- end return WB_TraceTarget;