149 lines
4.4 KiB
Lua
149 lines
4.4 KiB
Lua
---@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; |