Files
UnrealEngineUWP/Engine/Source/Runtime/Foliage/Private/ProceduralFoliageVolume.cpp
JeanFrancois Dube 9d46f9daf9 World Partition:
- Added assert that the provided world is not a game world in IWorldPartitionActorLoaderInterface::ILoaderAdapter constructor.
- Apply the ALocationVolume.DebugColor to the World Partition display for loader adapters UI.

#rb richard.malo
#preflight 6283e231ed2c0847b04fd00b
#rnx

[CL 20247563 by JeanFrancois Dube in ue5-main branch]
2022-05-17 14:12:02 -04:00

70 lines
2.0 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "ProceduralFoliageVolume.h"
#include "Components/BrushComponent.h"
#include "ProceduralFoliageComponent.h"
#include "ProceduralFoliageSpawner.h"
#include "WorldPartition/LoaderAdapter/LoaderAdapterActor.h"
AProceduralFoliageVolume::AProceduralFoliageVolume(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
ProceduralComponent = ObjectInitializer.CreateDefaultSubobject<UProceduralFoliageComponent>(this, TEXT("ProceduralFoliageComponent"));
ProceduralComponent->SetSpawningVolume(this);
if (UBrushComponent* MyBrushComponent = GetBrushComponent())
{
MyBrushComponent->SetCollisionObjectType(ECC_WorldStatic);
MyBrushComponent->SetCollisionResponseToAllChannels(ECR_Ignore);
// This is important because the volume overlaps with all procedural foliage
// That means during streaming we'll get a huge hitch for UpdateOverlaps
MyBrushComponent->SetGenerateOverlapEvents(false);
}
}
#if WITH_EDITOR
void AProceduralFoliageVolume::PostRegisterAllComponents()
{
Super::PostRegisterAllComponents();
if (!GetWorld()->IsGameWorld() && GetWorld()->IsPartitionedWorld() && !WorldPartitionActorLoader)
{
WorldPartitionActorLoader = new FLoaderAdapterActor(this);
}
}
void AProceduralFoliageVolume::BeginDestroy()
{
if (WorldPartitionActorLoader)
{
delete WorldPartitionActorLoader;
WorldPartitionActorLoader = nullptr;
}
Super::BeginDestroy();
}
IWorldPartitionActorLoaderInterface::ILoaderAdapter* AProceduralFoliageVolume::GetLoaderAdapter()
{
return WorldPartitionActorLoader;
}
void AProceduralFoliageVolume::PostEditImport()
{
// Make sure that this is the component's spawning volume
ProceduralComponent->SetSpawningVolume(this);
}
bool AProceduralFoliageVolume::GetReferencedContentObjects(TArray<UObject*>& Objects) const
{
Super::GetReferencedContentObjects(Objects);
if (ProceduralComponent && ProceduralComponent->FoliageSpawner)
{
Objects.Add(ProceduralComponent->FoliageSpawner);
}
return true;
}
#endif