88 lines
2.3 KiB
Lua
88 lines
2.3 KiB
Lua
---@class BP_RangeTest_C:AActor
|
|
---@field Sphere USphereComponent
|
|
---@field DefaultSceneRoot USceneComponent
|
|
--Edit Below--
|
|
---@type BP_RangeTest_C
|
|
local BP_RangeTest = {};
|
|
|
|
function BP_RangeTest:ReceiveBeginPlay()
|
|
self.SuperClass.ReceiveBeginPlay(self);
|
|
self.Sphere.OnComponentBeginOverlap:Add(self.OnSphereBeginOverlap, self);
|
|
end
|
|
|
|
function BP_RangeTest:OnSphereBeginOverlap(OverlappedComponent, OtherActor, OtherComp, OtherBodyIndex, bFromSweep, SweepResult)
|
|
UGCLogSystem.Log("[BP_RangeTest:OnSphereBeginOverlap] OtherActor = %s", UE.GetName(OtherActor));
|
|
end
|
|
|
|
BP_RangeTest.RangeActors = {};
|
|
|
|
function BP_RangeTest:FindAllActorsInRange()
|
|
local AllActors = {};
|
|
local Radius = self.Sphere:GetScaledSphereRadius();
|
|
UE.FindActorsByClass(nil, AllActors, function(InIndex, InActor)
|
|
if InActor then end
|
|
local Dis = VectorHelper.GetActorDis2D(self, InActor);
|
|
if Dis < Radius and InActor ~= self then
|
|
return true;
|
|
end
|
|
return false;
|
|
end);
|
|
self:SelectActors(AllActors);
|
|
end
|
|
|
|
function BP_RangeTest:FindSphereActors()
|
|
local ObjetType = { ECollisionChannel.ECC_WorldDynamic, };
|
|
local ActorList = {};
|
|
local Radius = self.Sphere:GetScaledSphereRadius();
|
|
UGCLogSystem.Log("[BP_RangeTest:FindSphereActors] Radius = %s", tostring(Radius));
|
|
KismetSystemLibrary.SphereOverlapActors(self, self:K2_GetActorLocation(), Radius, ObjetType, UE.GetActorClass(), {}, ActorList);
|
|
self:SelectActors(ActorList);
|
|
end
|
|
|
|
---@param InActorList table<int32, AActor>
|
|
function BP_RangeTest:SelectActors(InActorList)
|
|
local HadChange = false;
|
|
for i, v in pairs(self.RangeActors) do
|
|
if v == nil or not UE.IsValid(v) then
|
|
HadChange = true;
|
|
self.RangeActors[i] = nil;
|
|
end
|
|
end
|
|
for i, v in pairs(InActorList) do
|
|
if UE.IsValid(v) then
|
|
local Name = UE.GetName(v);
|
|
if self.RangeActors[Name] == nil then
|
|
HadChange = true;
|
|
self.RangeActors[Name] = v;
|
|
end
|
|
end
|
|
end
|
|
if HadChange then
|
|
UGCLogSystem.LogTree(string.format("[BP_RangeTest:SelectActors] RangeActors "), self.RangeActors)
|
|
end
|
|
end
|
|
|
|
function BP_RangeTest:ReceiveTick(DeltaTime)
|
|
self.SuperClass.ReceiveTick(self, DeltaTime);
|
|
self:FindAllActorsInRange();
|
|
end
|
|
|
|
--[[
|
|
function BP_RangeTest:ReceiveEndPlay()
|
|
self.SuperClass.ReceiveEndPlay(self);
|
|
end
|
|
--]]
|
|
|
|
--[[
|
|
function BP_RangeTest:GetReplicatedProperties()
|
|
return
|
|
end
|
|
--]]
|
|
|
|
--[[
|
|
function BP_RangeTest:GetAvailableServerRPCs()
|
|
return
|
|
end
|
|
--]]
|
|
|
|
return BP_RangeTest; |