You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
- Version up source archetypes to become two interfaces: channel interfaces (mono/stereo) & base source namespace - Clean-up Interface panel to support namespacing better - Fix bugs with assuming interfaces are always and the only base namespace members - Allow namespacing for any arbitrary interface member - Add lock icon to clarify what interface members cannot be modified individually (i.e. cannot add, remove, or rename them as they are interface members) - Organize members alphabetically #jira UE-135000 #rnx #rb phil.popp #preflight 61a7d1079c77d610079303ec #ROBOMERGE-AUTHOR: rob.gay #ROBOMERGE-SOURCE: CL 18344347 in //UE5/Release-5.0/... via CL 18344412 #ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469) [CL 18344446 by rob gay in ue5-release-engine-test branch]
233 lines
5.4 KiB
C++
233 lines
5.4 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
#include "AudioParameter.h"
|
|
|
|
|
|
namespace Audio
|
|
{
|
|
namespace ParameterPrivate
|
|
{
|
|
template <typename T>
|
|
void SetOrMergeArray(const TArray<T>& InArray, TArray<T>& OutArray, bool bInMerge)
|
|
{
|
|
if (bInMerge)
|
|
{
|
|
OutArray.Append(InArray);
|
|
}
|
|
else
|
|
{
|
|
OutArray = InArray;
|
|
}
|
|
}
|
|
} // ParameterPrivate
|
|
|
|
const FString FParameterPath::NamespaceDelimiter = TEXT(AUDIO_PARAMETER_NAMESPACE_PATH_DELIMITER);
|
|
|
|
FName FParameterPath::CombineNames(FName InLeft, FName InRight)
|
|
{
|
|
if (InLeft.IsNone())
|
|
{
|
|
return InRight;
|
|
}
|
|
|
|
const FString FullName = FString::Join(TArray<FString>({ *InLeft.ToString(), *InRight.ToString() }), *NamespaceDelimiter);
|
|
return FName(FullName);
|
|
}
|
|
|
|
void FParameterPath::SplitName(FName InFullName, FName& OutNamespace, FName& OutParameterName)
|
|
{
|
|
FString FullName = InFullName.ToString();
|
|
const int32 IndexOfDelim = FullName.Find(NamespaceDelimiter, ESearchCase::IgnoreCase, ESearchDir::FromEnd);
|
|
if (IndexOfDelim != INDEX_NONE)
|
|
{
|
|
OutNamespace = FName(*FullName.Left(IndexOfDelim));
|
|
OutParameterName = FName(*FullName.RightChop(IndexOfDelim + 1));
|
|
}
|
|
else
|
|
{
|
|
OutNamespace = FName();
|
|
OutParameterName = InFullName;
|
|
}
|
|
}
|
|
} // namespace Audio
|
|
|
|
void FAudioParameter::Merge(const FAudioParameter& InParameter, bool bInTakeName, bool bInTakeType, bool bInMergeArrayTypes)
|
|
{
|
|
if (bInTakeName)
|
|
{
|
|
ParamName = InParameter.ParamName;
|
|
}
|
|
|
|
if (bInTakeType)
|
|
{
|
|
ParamType = InParameter.ParamType;
|
|
}
|
|
|
|
switch (InParameter.ParamType)
|
|
{
|
|
case EAudioParameterType::Boolean:
|
|
{
|
|
BoolParam = InParameter.BoolParam;
|
|
}
|
|
break;
|
|
|
|
case EAudioParameterType::BooleanArray:
|
|
{
|
|
Audio::ParameterPrivate::SetOrMergeArray(InParameter.ArrayBoolParam, ArrayBoolParam, bInMergeArrayTypes);
|
|
}
|
|
break;
|
|
|
|
case EAudioParameterType::Float:
|
|
{
|
|
FloatParam = InParameter.FloatParam;
|
|
}
|
|
break;
|
|
|
|
case EAudioParameterType::FloatArray:
|
|
{
|
|
Audio::ParameterPrivate::SetOrMergeArray(InParameter.ArrayFloatParam, ArrayFloatParam, bInMergeArrayTypes);
|
|
}
|
|
break;
|
|
|
|
case EAudioParameterType::Integer:
|
|
case EAudioParameterType::NoneArray:
|
|
{
|
|
if (bInMergeArrayTypes)
|
|
{
|
|
IntParam += InParameter.IntParam;
|
|
}
|
|
else
|
|
{
|
|
IntParam = InParameter.IntParam;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case EAudioParameterType::IntegerArray:
|
|
{
|
|
Audio::ParameterPrivate::SetOrMergeArray(InParameter.ArrayIntParam, ArrayIntParam, bInMergeArrayTypes);
|
|
}
|
|
break;
|
|
|
|
case EAudioParameterType::None:
|
|
{
|
|
FloatParam = InParameter.FloatParam;
|
|
BoolParam = InParameter.BoolParam;
|
|
IntParam = InParameter.IntParam;
|
|
ObjectParam = InParameter.ObjectParam;
|
|
StringParam = InParameter.StringParam;
|
|
|
|
Audio::ParameterPrivate::SetOrMergeArray(InParameter.ArrayBoolParam, ArrayBoolParam, bInMergeArrayTypes);
|
|
Audio::ParameterPrivate::SetOrMergeArray(InParameter.ArrayFloatParam, ArrayFloatParam, bInMergeArrayTypes);
|
|
Audio::ParameterPrivate::SetOrMergeArray(InParameter.ArrayIntParam, ArrayIntParam, bInMergeArrayTypes);
|
|
Audio::ParameterPrivate::SetOrMergeArray(InParameter.ArrayObjectParam, ArrayObjectParam, bInMergeArrayTypes);
|
|
Audio::ParameterPrivate::SetOrMergeArray(InParameter.ArrayStringParam, ArrayStringParam, bInMergeArrayTypes);
|
|
|
|
if (!bInMergeArrayTypes)
|
|
{
|
|
ObjectProxies.Reset();
|
|
}
|
|
|
|
for (const Audio::IProxyDataPtr& ProxyPtr : InParameter.ObjectProxies)
|
|
{
|
|
if (ensure(ProxyPtr.IsValid()))
|
|
{
|
|
ObjectProxies.Emplace(ProxyPtr->Clone());
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case EAudioParameterType::Object:
|
|
{
|
|
ObjectParam = InParameter.ObjectParam;
|
|
|
|
ObjectProxies.Reset();
|
|
for (const Audio::IProxyDataPtr& ProxyPtr : InParameter.ObjectProxies)
|
|
{
|
|
if (ensure(ProxyPtr.IsValid()))
|
|
{
|
|
ObjectProxies.Emplace(ProxyPtr->Clone());
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case EAudioParameterType::ObjectArray:
|
|
{
|
|
Audio::ParameterPrivate::SetOrMergeArray(InParameter.ArrayObjectParam, ArrayObjectParam, bInMergeArrayTypes);
|
|
|
|
if (!bInMergeArrayTypes)
|
|
{
|
|
ObjectProxies.Reset();
|
|
}
|
|
|
|
for (const Audio::IProxyDataPtr& ProxyPtr : InParameter.ObjectProxies)
|
|
{
|
|
if (ensure(ProxyPtr.IsValid()))
|
|
{
|
|
ObjectProxies.Emplace(ProxyPtr->Clone());
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case EAudioParameterType::String:
|
|
{
|
|
StringParam = InParameter.StringParam;
|
|
}
|
|
break;
|
|
|
|
case EAudioParameterType::StringArray:
|
|
{
|
|
Audio::ParameterPrivate::SetOrMergeArray(InParameter.ArrayStringParam, ArrayStringParam, bInMergeArrayTypes);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void FAudioParameter::Merge(TArray<FAudioParameter>&& InParams, TArray<FAudioParameter>& OutParams)
|
|
{
|
|
if (InParams.IsEmpty())
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (OutParams.IsEmpty())
|
|
{
|
|
OutParams.Append(MoveTemp(InParams));
|
|
return;
|
|
}
|
|
|
|
auto SortParamsPredicate = [](const FAudioParameter& A, const FAudioParameter& B) { return A.ParamName.FastLess(B.ParamName); };
|
|
|
|
InParams.Sort(SortParamsPredicate);
|
|
OutParams.Sort(SortParamsPredicate);
|
|
|
|
for (int32 i = OutParams.Num() - 1; i >= 0; --i)
|
|
{
|
|
while (!InParams.IsEmpty())
|
|
{
|
|
FAudioParameter& OutParam = OutParams[i];
|
|
if (InParams.Last().ParamName.FastLess(OutParam.ParamName))
|
|
{
|
|
break;
|
|
}
|
|
|
|
constexpr bool bAllowShrinking = false;
|
|
FAudioParameter NewParam = InParams.Pop(bAllowShrinking);
|
|
if (NewParam.ParamName == OutParam.ParamName)
|
|
{
|
|
NewParam.Merge(OutParam);
|
|
OutParam = MoveTemp(NewParam);
|
|
}
|
|
else
|
|
{
|
|
OutParams.Emplace(MoveTemp(NewParam));
|
|
}
|
|
}
|
|
}
|
|
}
|