2025-01-08 22:46:12 +08:00

54 lines
1.9 KiB
Lua

---@class BP_CharacterTrigger_C:AActor
---@field Box UBoxComponent
---@field DefaultSceneRoot USceneComponent
--Edit Below--
local BP_ArenaArea = {
InRangePlayerPawn = {}
};
function BP_ArenaArea:ReceiveBeginPlay()
BP_ArenaArea.SuperClass.ReceiveBeginPlay(self)
if self:HasAuthority() then
self.InRangePlayerPawn = {}
self.PlayerPawnClass = UE.LoadClass(BPClassPath.PlayerPawn)
self.Box.OnComponentBeginOverlap:Add(BP_ArenaArea.Box_OnComponentBeginOverlap,self)
self.Box.OnComponentEndOverlap:Add(BP_ArenaArea.Box_OnComponentEndOverlap,self)
end
end
function BP_ArenaArea:ReceiveEndPlay()
if self:HasAuthority() then
self.PlayerPawnClass = nil
self.InRangePlayerPawn = nil
self.Box.OnComponentBeginOverlap:Remove(BP_ArenaArea.Box_OnComponentBeginOverlap,self)
self.Box.OnComponentEndOverlap:Remove(BP_ArenaArea.Box_OnComponentEndOverlap,self)
end
BP_ArenaArea.SuperClass.ReceiveEndPlay(self)
end
function BP_ArenaArea:UpdatePlayerPawnInRange(InPlayerPawn, IsAdd)
if IsAdd then
table.insert(self.InRangePlayerPawn, InPlayerPawn)
InPlayerPawn.IsInArena = true
else
table.removeValue(self.InRangePlayerPawn, InPlayerPawn)
InPlayerPawn.IsInArena = false
end
EventSystem:SendEvent(EventType.PlayerPawnInArenaChanged, self.InRangePlayerPawn)
end
function BP_ArenaArea:Box_OnComponentBeginOverlap(OverlappedComponent, OtherActor, OtherComp, OtherBodyIndex, bFromSweep, SweepResult)
if UE.IsValid(OtherActor) and UE.IsA(OtherActor, self.PlayerPawnClass) then
self:UpdatePlayerPawnInRange(OtherActor, true)
end
end
function BP_ArenaArea:Box_OnComponentEndOverlap(OverlappedComponent, OtherActor, OtherComp, OtherBodyIndex)
if UE.IsValid(OtherActor) and UE.IsA(OtherActor, self.PlayerPawnClass) then
self:UpdatePlayerPawnInRange(OtherActor, false)
end
end
return BP_ArenaArea;