2025-01-04 23:00:19 +08:00

82 lines
2.6 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)
UGCEventSystem.AddListener(EventEnum.UpdateCanBreakThrough, self.CheckPlayerOverlap, 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:IsAlive() then
self:CheckEnterLineDefenseMeetCondition(OtherActor.PlayerKey)
end
end
function BP_LineOfDefense:CheckEnterLineDefenseMeetCondition(PlayerKey)
if PlayerKey == nil then return end
-- 判断是否为防守方玩家
if not UGCGameSystem.GameState:PlayerIsAttacker(PlayerKey) then return end
UGCLogSystem.Log("[BP_LineOfDefense_CheckEnterLineDefenseMeetCondition] PlayerKey:%s", tostring(PlayerKey))
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;