---@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 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;