Files
UnrealEngineUWP/Engine/Source/Runtime/AudioExtensions/Private/IAudioParameterInterfaceRegistry.cpp
rob gay 1de499ef8e More MetaSound Interface registry clean-up
- Move bIsDefault/bCanEdit(renamed bIsModifiable) from InterfaceRegistryEntry to Interface data definition
- Add checks in builder to disallow mutation of interfaces that shouldn't be via editor or document builder (ex. SourceInterface which is default and then never changed)
- Optimize SearchEngine query for finding default interfaces
- Tweak MetaSoundUObjectRegistry to support non MetasoundAssetBase classes and add UMetaSoundBuilderDocument. Update iterator w/optional param to only return asset types (true by default for back compat)
- Move FName class name comparitors to use new TopLevelAssetPath
#rb phil.popp
#jira UE-181360
#rnx
#p4v-preflight-copy 24658328
#preflight 642b10834d26bcd1eb0e566c

[CL 24920763 by rob gay in ue5-main branch]
2023-04-04 19:14:26 -04:00

117 lines
2.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "IAudioParameterInterfaceRegistry.h"
#include "Algo/Transform.h"
namespace Audio
{
namespace ParameterInterfaceRegistryPrivate
{
class FParameterInterfaceRegistry : public IAudioParameterInterfaceRegistry
{
public:
virtual void IterateInterfaces(TFunction<void(FParameterInterfacePtr)> InFunction) const override
{
for (const FParameterInterfacePtr& InterfacePtr : Interfaces)
{
InFunction(InterfacePtr);
}
}
virtual void RegisterInterface(FParameterInterfacePtr InInterface) override
{
Interfaces.Add(InInterface);
if (RegistrationFunction)
{
RegistrationFunction(InInterface);
}
}
virtual void OnRegistration(TUniqueFunction<void(FParameterInterfacePtr)>&& InFunction) override
{
RegistrationFunction = MoveTemp(InFunction);
}
};
} // namespace ParameterInterfaceRegistryPrivate
FParameterInterface::FParameterInterface(
FName InName,
const FVersion& InVersion,
const UClass& InType
)
: NamePrivate(InName)
, VersionPrivate(InVersion)
, UClassOptions({ { InType.GetClassPathName() } })
{
}
FParameterInterface::FParameterInterface(FName InName, const FVersion& InVersion)
: NamePrivate(InName)
, VersionPrivate(InVersion)
{
}
FName FParameterInterface::GetName() const
{
return NamePrivate;
}
const FParameterInterface::FVersion& FParameterInterface::GetVersion() const
{
return VersionPrivate;
}
const UClass& FParameterInterface::GetType() const
{
return *UObject::StaticClass();
}
const TArray<FParameterInterface::FClassOptions>& FParameterInterface::GetUClassOptions() const
{
return UClassOptions;
}
const TArray<FParameterInterface::FInput>& FParameterInterface::GetInputs() const
{
return Inputs;
}
const TArray<FParameterInterface::FOutput>& FParameterInterface::GetOutputs() const
{
return Outputs;
}
const TArray<FParameterInterface::FEnvironmentVariable>& FParameterInterface::GetEnvironment() const
{
return Environment;
}
TArray<const UClass*> FParameterInterface::FindSupportedUClasses() const
{
TArray<const UClass*> SupportedUClasses;
for (const FClassOptions& Options : UClassOptions)
{
if (const UClass* Class = FindObject<const UClass>(Options.ClassPath))
{
SupportedUClasses.Add(Class);
}
}
return SupportedUClasses;
}
TUniquePtr<IAudioParameterInterfaceRegistry> IAudioParameterInterfaceRegistry::Instance;
IAudioParameterInterfaceRegistry& IAudioParameterInterfaceRegistry::Get()
{
using namespace ParameterInterfaceRegistryPrivate;
if (!Instance.IsValid())
{
Instance = MakeUnique<FParameterInterfaceRegistry>();
}
return *Instance;
}
} // namespace Audio