79 lines
2.3 KiB
Lua
79 lines
2.3 KiB
Lua
---@class BP_LineOfDefense_C:AActor
|
|
---@field Widget UWidgetComponent
|
|
---@field Capsule UCapsuleComponent
|
|
---@field P_LineOfDefense UParticleSystemComponent
|
|
---@field CG014_Motorbooth UStaticMeshComponent
|
|
---@field DefaultSceneRoot USceneComponent
|
|
--Edit Below--
|
|
local BP_LineOfDefense = {
|
|
-- 同一个玩家进入的时间间隔
|
|
EnterTimeInterval = 5;
|
|
-- 玩家上一次进入的时间
|
|
PlayerEnterLineOfDefenseTime = {};
|
|
};
|
|
|
|
|
|
function BP_LineOfDefense:ReceiveBeginPlay()
|
|
self.SuperClass.ReceiveBeginPlay(self);
|
|
if UGCGameSystem.IsServer() then
|
|
self.CheckPlayerOverlapHandle = UGCEventSystem.SetTimerLoop(self, self.CheckPlayerOverlap, 0.5)
|
|
UGCSystemLibrary.BindBeginOverlapFunc(self.Capsule, self.PlayerOverlap, self)
|
|
end
|
|
end
|
|
|
|
|
|
function BP_LineOfDefense:CheckPlayerOverlap()
|
|
local AllPawn = UGCGameSystem.GetAllPlayerPawn()
|
|
for i, v in pairs(AllPawn) do
|
|
if self.Capsule:IsOverlappingActor(v) then
|
|
self:CheckEnterLineDefenseMeetCondition(v.PlayerKey)
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
--[[
|
|
function BP_LineOfDefense:ReceiveTick(DeltaTime)
|
|
self.SuperClass.ReceiveTick(self, DeltaTime);
|
|
end
|
|
--]]
|
|
|
|
function BP_LineOfDefense:PlayerOverlap(OverlappedComponent, OtherActor, OtherComp, OtherBodyIndex, bFromSweep, SweepResult)
|
|
if OtherActor and OtherActor.PlayerKey then
|
|
self:CheckEnterLineDefenseMeetCondition(OtherActor.PlayerKey)
|
|
end
|
|
end
|
|
|
|
function BP_LineOfDefense:CheckEnterLineDefenseMeetCondition(PlayerKey)
|
|
if PlayerKey == nil then return end
|
|
local LastEnterTime = self.PlayerEnterLineOfDefenseTime[PlayerKey]
|
|
local NowTime = UGCSystemLibrary.GetGameTime()
|
|
if LastEnterTime == nil or NowTime - LastEnterTime > self.EnterTimeInterval then
|
|
self.PlayerEnterLineOfDefenseTime[PlayerKey] = NowTime
|
|
UGCEventSystem.SendEvent(EventEnum.PlayerEnterLineOfDefense, PlayerKey)
|
|
end
|
|
end
|
|
|
|
|
|
function BP_LineOfDefense:ReceiveEndPlay()
|
|
if self.CheckPlayerOverlapHandle then
|
|
UGCEventSystem.StopTimer(self.CheckPlayerOverlapHandle)
|
|
self.CheckPlayerOverlapHandle = nil
|
|
end
|
|
self.SuperClass.ReceiveEndPlay(self);
|
|
end
|
|
|
|
|
|
--[[
|
|
function BP_LineOfDefense:GetReplicatedProperties()
|
|
return
|
|
end
|
|
--]]
|
|
|
|
--[[
|
|
function BP_LineOfDefense:GetAvailableServerRPCs()
|
|
return
|
|
end
|
|
--]]
|
|
|
|
return BP_LineOfDefense; |