88 lines
3.4 KiB
Lua
88 lines
3.4 KiB
Lua
|
---@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;
|