149 lines
4.4 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)
self.CustomReceiveTickHandle = UGCEventSystem.SetTimerLoop(self, self.CustomReceiveTick, 1. / self.TickFrequency)
if self.SetVisHandle == nil then
self.SetVisHandle = UGCEventSystem.SetTimerLoop(self, self.AutoSetVis, 1)
end
UGCEventSystem.AddListener(EventEnum.PlayerIsAliveIsChange, self.AutoSetVis, self)
end
end
function BP_TrackWidegt:ReceiveEndPlay()
if self.SetVisHandle then
UGCEventSystem.StopTimer(self.SetVisHandle)
self.SetVisHandle = nil
end
if self.CustomReceiveTickHandle then
UGCEventSystem.StopTimer(self.CustomReceiveTickHandle)
self.CustomReceiveTickHandle = nil
end
if UGCGameSystem.IsServer() then
else
UGCEventSystem.RemoveListener(EventEnum.PlayerIsAliveIsChange, self.AutoSetVis, self)
end
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)
local TrackPawn = UGCGameSystem.GameState:GetAlivePawn(self.TargetPlayerKey)
if UE.IsValid(LocalPawn) then
self.LocalPawnPos = LocalPawn:K2_GetActorLocation()
end
if UE.IsValid(TrackPawn) then
self:K2_SetActorLocation(TrackPawn:K2_GetActorLocation())
self:GetWidget():SetVis(true)
else
self:GetWidget():SetVis(false)
end
self.Dis = VectorHelper.Length(VectorHelper.Sub(self:K2_GetActorLocation(), self.LocalPawnPos))
self:GetWidget():UpdateDis(self.Dis)
end
end
function BP_TrackWidegt:SetTrackPlayerKey(InPlayerKey)
self.TargetPlayerKey = 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)
local GameState = UGCGameSystem.GameState
--UGCLogSystem.Log("[BP_TrackWidegt_AutoSetVis]1")
if TargetPawn and TrackPlayerTeamID ~= LocalPlayerTeamID and GameState and GameState:GetPlayerIsAlive(self.TargetPlayerKey)then
-- if TargetPawn and TrackPlayerTeamID ~= LocalPlayerTeamID then
--UGCLogSystem.Log("[BP_TrackWidegt_AutoSetVis]2")
NewVis = true
end
end
if self.bIsVis ~= NewVis then
-- 设置UI可视性
self.bIsVis = NewVis
if self.bIsVis == false then
self:GetWidget():SetVis(false)
end
end
end
function BP_TrackWidegt:OnRep_TargetPlayerKey()
self:ClientUpdatePlayerKey(self.TargetPlayerKey)
end
return BP_TrackWidegt;