54 lines
1.9 KiB
Lua
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; |