Files
UnrealEngine/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/NiagaraBakerOutputRegistry.cpp
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

103 lines
3.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "NiagaraBakerOutputRegistry.h"
#include "IDetailsView.h"
#include "NiagaraBakerOutputSimCache.h"
#include "NiagaraBakerOutputStaticMesh.h"
#include "NiagaraBakerOutputTexture2D.h"
#include "NiagaraBakerOutputVolumeTexture.h"
#include "NiagaraBakerOutputSparseVolumeTexture.h"
#include "NiagaraBakerRendererOutputSimCache.h"
#include "NiagaraBakerRendererOutputStaticMesh.h"
#include "NiagaraBakerRendererOutputTexture2D.h"
#include "NiagaraBakerRendererOutputVolumeTexture.h"
#include "NiagaraBakerRendererOutputSparseVolumeTexture.h"
#include "Customizations/NiagaraBakerOutputCustomization.h"
FNiagaraBakerOutputRegistry& FNiagaraBakerOutputRegistry::Get()
{
static TUniquePtr<FNiagaraBakerOutputRegistry> Singleton;
if ( Singleton.IsValid() == false )
{
Singleton = MakeUnique<FNiagaraBakerOutputRegistry>();
// Sim Cache
{
FRegistryEntry& Entry = Singleton->Registry.AddDefaulted_GetRef();
Entry.WeakClass = UNiagaraBakerOutputSimCache::StaticClass();
Entry.CreateRenderer = []() -> FNiagaraBakerOutputRenderer* { return new FNiagaraBakerRendererOutputSimCache(); };
Entry.CreateCustomization = FOnGetDetailCustomizationInstance::CreateStatic(&FNiagaraBakerOutputSimCacheDetails::MakeInstance);
}
// Static Mesh
{
FRegistryEntry& Entry = Singleton->Registry.AddDefaulted_GetRef();
Entry.WeakClass = UNiagaraBakerOutputStaticMesh::StaticClass();
Entry.CreateRenderer = []() -> FNiagaraBakerOutputRenderer* { return new FNiagaraBakerRendererOutputStaticMesh(); };
Entry.CreateCustomization = FOnGetDetailCustomizationInstance::CreateStatic(&FNiagaraBakerOutputStaticMeshDetails::MakeInstance);
}
// Texture 2D
{
FRegistryEntry& Entry = Singleton->Registry.AddDefaulted_GetRef();
Entry.WeakClass = UNiagaraBakerOutputTexture2D::StaticClass();
Entry.CreateRenderer = []() -> FNiagaraBakerOutputRenderer* { return new FNiagaraBakerRendererOutputTexture2D(); };
Entry.CreateCustomization = FOnGetDetailCustomizationInstance::CreateStatic(&FNiagaraBakerOutputTexture2DDetails::MakeInstance);
}
// Volume Texture
{
FRegistryEntry& Entry = Singleton->Registry.AddDefaulted_GetRef();
Entry.WeakClass = UNiagaraBakerOutputVolumeTexture::StaticClass();
Entry.CreateRenderer = []() -> FNiagaraBakerOutputRenderer* { return new FNiagaraBakerRendererOutputVolumeTexture(); };
Entry.CreateCustomization = FOnGetDetailCustomizationInstance::CreateStatic(&FNiagaraBakerOutputVolumeTextureDetails::MakeInstance);
}
// Sparse Volume Texture
{
FRegistryEntry& Entry = Singleton->Registry.AddDefaulted_GetRef();
Entry.WeakClass = UNiagaraBakerOutputSparseVolumeTexture::StaticClass();
Entry.CreateRenderer = []() -> FNiagaraBakerOutputRenderer* { return new FNiagaraBakerRendererOutputSparseVolumeTexture(); };
Entry.CreateCustomization = FOnGetDetailCustomizationInstance::CreateStatic(&FNiagaraBakerOutputSparseVolumeTextureDetails::MakeInstance);
}
}
return *Singleton.Get();
}
TArray<UClass*> FNiagaraBakerOutputRegistry::GetOutputClasses() const
{
TArray<UClass*> Classes;
for ( const FRegistryEntry& Entry : Registry )
{
if (Entry.WeakClass.Get() == nullptr)
{
continue;
}
if ( Entry.ShouldShowCVar != nullptr && Entry.ShouldShowCVar->GetBool() == false )
{
continue;
}
Classes.Add(Entry.WeakClass.Get());
}
return Classes;
}
FNiagaraBakerOutputRenderer* FNiagaraBakerOutputRegistry::GetRendererForClass(UClass* Class) const
{
for (const FRegistryEntry& Entry : Registry)
{
if (Entry.WeakClass.Get() == Class)
{
return Entry.CreateRenderer();
}
}
return nullptr;
}
void FNiagaraBakerOutputRegistry::RegisterCustomizations(IDetailsView* DetailsView) const
{
for (const FRegistryEntry& Entry : Registry)
{
if (Entry.WeakClass.Get() && Entry.CreateCustomization.IsBound() )
{
DetailsView->RegisterInstancedCustomPropertyLayout(Entry.WeakClass.Get(), Entry.CreateCustomization);
}
}
}