120 lines
3.2 KiB
Lua
Raw Normal View History

2025-01-04 23:00:19 +08:00
---@class BP_TrackWidegt_C:AActor
---@field Widget UWidgetComponent
---@field DefaultSceneRoot USceneComponent
---@field TargetPlayerKey int64
--Edit Below--
---@type BP_TrackWidegt_C
local BP_TrackWidegt = {
SetVisHandle = nil;
bIsVis = false;
Dis = -1;
LocalPawnPos = {X = 0., Y = 0., Z = 0.};
TickFrequency = 25;
};
function BP_TrackWidegt:ReceiveBeginPlay()
self.SuperClass.ReceiveBeginPlay(self);
if UGCGameSystem.IsServer() then
else
-- self:GetWidget():SetVisibility(ESlateVisibility.Collapsed)
self:AutoSetVis()
self:ClientUpdatePlayerKey(self.TargetPlayerKey)
UGCEventSystem.SetTimerLoop(self, self.CustomReceiveTick, 1. / self.TickFrequency)
end
end
--[[
function BP_TrackWidegt:ReceiveEndPlay()
self.SuperClass.ReceiveEndPlay(self);
end
--]]
--[[
function BP_TrackWidegt:GetReplicatedProperties()
return
end
--]]
--[[
function BP_TrackWidegt:GetAvailableServerRPCs()
return
end
--]]
function BP_TrackWidegt:CustomReceiveTick()
if self.bIsVis then
local LocalPawn = UGCSystemLibrary.GetLocalPlayerPawn()
local TrackPawn = UGCGameSystem.GetPlayerPawnByPlayerKey(self.TargetPlayerKey)
if UE.IsValid(LocalPawn) then
self.LocalPawnPos = LocalPawn:K2_GetActorLocation()
end
if UE.IsValid(TrackPawn) then
self:K2_SetActorLocation(TrackPawn:K2_GetActorLocation())
end
self.Dis = VectorHelper.Length(VectorHelper.Sub(self:K2_GetActorLocation(), self.LocalPawnPos))
self:GetWidget():UpdateDis(self.Dis)
end
end
function BP_TrackWidegt:SetTrackPlayerKey(InPlayerKey)
UGCSendRPCSystem.ActorRPCNotify(nil, self, "ClientUpdatePlayerKey", InPlayerKey)
end
function BP_TrackWidegt:ClientUpdatePlayerKey(NewPlayerKey)
if self.TargetPlayerKey ~= NewPlayerKey then
self.TargetPlayerKey = NewPlayerKey
-- 刷新显示状态
self:AutoSetVis()
if self.TargetPlayerKey == nil or self.TargetPlayerKey < 0 then
if self.SetVisHandle == nil then
self.SetVisHandle = UGCEventSystem.SetTimerLoop(self, self.AutoSetVis, 0.3)
end
else
if self.SetVisHandle then
UGCEventSystem.StopTimer(self.SetVisHandle)
self.SetVisHandle = nil
end
end
end
end
function BP_TrackWidegt:GetWidget()
return self.Widget:GetUserWidgetObject()
end
function BP_TrackWidegt:AutoSetVis()
local NewVis = false
if self.TargetPlayerKey > 0 then
local TrackPlayerTeamID = UGCGameSystem.GameState:GetPlayerTeamIDByPlayerKey(self.TargetPlayerKey)
local LocalPlayerTeamID = UGCGameSystem.GameState:GetPlayerTeamIDByPlayerKey(UGCSystemLibrary.GetLocalPlayerKey())
local TargetPawn = UGCGameSystem.GetPlayerPawnByPlayerKey(self.TargetPlayerKey)
if TargetPawn and TrackPlayerTeamID ~= LocalPlayerTeamID then
NewVis = true
end
end
if self.bIsVis ~= NewVis then
-- 设置UI可视性
self:GetWidget():SetVis(NewVis)
self.bIsVis = NewVis
end
end
function BP_TrackWidegt:OnRep_TargetPlayerKey()
self:ClientUpdatePlayerKey(self.TargetPlayerKey)
end
return BP_TrackWidegt;