13#include "Engine/OverlapResult.h"
14#include "Components/PrimitiveComponent.h"
15#include "Components/InstancedStaticMeshComponent.h"
16#include "Kismet/GameplayStatics.h"
17#include "Engine/World.h"
21 PrimaryActorTick.bCanEverTick =
false;
23 CollisionBox = CreateDefaultSubobject<UBoxComponent>(TEXT(
"CollisionBox"));
24 CollisionBox->InitBoxExtent(FVector(200.0f, 200.0f, 200.0f));
29 VisualizerComponent = CreateDefaultSubobject<UBoundsVisualizerComponent>(TEXT(
"BoundsVisualizerComponent"));
50 Super::EndPlay(EndPlayReason);
88 FVector BoxCenter =
CollisionBox->GetComponentLocation();
91 TArray<FOverlapResult> Overlaps;
93 bool HasOverlaps = GetWorld()->OverlapMultiByChannel(
98 FCollisionShape::MakeBox(BoxExtent),
99 FCollisionQueryParams(NAME_None,
false,
this)
111 for (
const FOverlapResult&
Overlap : Overlaps)
113 if (UPrimitiveComponent* Component =
Overlap.GetComponent())
115 UInstancedStaticMeshComponent* InstancedMesh = Cast<UInstancedStaticMeshComponent>(Component);
116 if (InstancedMesh && Renderer)
120 FBox Box = FBox(BoxCenter - BoxExtent, BoxCenter + BoxExtent);
125 if (AActor* Actor = Component->GetOwner())
129 bool CanDelete = !OnlyTrees || (OnlyTrees && InstancedActor->IsTreeActor());
132 InstancedActor->Destroy();
void DestroyOverlappingActors(bool OnlyTrees)
UBoxComponent * CollisionBox
UBoundsVisualizerComponent * VisualizerComponent
void ChangeOverlapBounds(FVector Bounds)
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override
virtual void BeginPlay() override
void DestroyOverlappingInstancesBox(UInstancedStaticMeshComponent *ISM, FBox AreaBox, bool OnlyTrees)
static void Log(const FString &Message, bool LogToTextFile=true, bool LogToROS=true)
static AInstancedRenderer * GetInstancedRenderer(const UObject *WorldContextObject)