SortMethod
SortMethod
#Overview
name: SortMethod
The value of this variable can be defined or overridden in .ini config files. 1
.ini config file referencing this setting variable.
It is referenced in 56
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of SortMethod is to determine how certain data elements or events are ordered within Unreal Engine subsystems. It is used in various contexts across different modules to specify the sorting criteria for collections of data.
SortMethod is primarily utilized in the following Unreal Engine subsystems, plugins, or modules:
- Online Subsystem: Used for sorting leaderboard entries.
- Content Browser: Applied to sort asset items in the editor.
- Geometry Collection Engine: Employed to sort various Chaos physics events (collision, breaking, trailing, and removal events).
- Blueprint Header View: Used to sort functions and properties in blueprint headers.
- PCG (Procedural Content Generation): Applied to sort attributes in PCG elements.
The value of this variable is typically set through configuration settings, often using UPROPERTY macros to expose it in the Unreal Editor. For example, in the BlueprintHeaderViewSettings, it’s set as a config property:
UPROPERTY(config, EditAnywhere, Category="Settings")
EHeaderViewSortMethod SortMethod = EHeaderViewSortMethod::None;
SortMethod often interacts with other variables related to the specific context it’s used in. For example, in leaderboard systems, it works alongside variables like DisplayFormat and UpdateMethod.
Developers should be aware that:
- The sorting method can significantly impact performance, especially for large datasets.
- Different sorting methods may be more appropriate for different types of data or use cases.
- The chosen sort method may affect how data is displayed or processed in the engine or game.
Best practices when using this variable include:
- Choose the most appropriate sort method for your specific use case.
- Consider performance implications, especially for large datasets.
- Ensure that the chosen sort method aligns with the expectations of your users or gameplay requirements.
- When exposing sort options to end-users, provide clear descriptions of what each option does.
- Test thoroughly with various datasets to ensure the sorting behaves as expected in all scenarios.
#Setting Variables
#References In INI files
Location: <Workspace>/Engine/Config/BaseEditorPerProjectUserSettings.ini:993, section: [/Script/BlueprintHeaderView.BlueprintHeaderViewSettings]
- INI Section:
/Script/BlueprintHeaderView.BlueprintHeaderViewSettings
- Raw value:
None
- Is Array:
False
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Plugins/Editor/BlueprintHeaderView/Source/BlueprintHeaderView/Private/SBlueprintHeaderView.cpp:566
Scope (from outer to inner):
file
function void SBlueprintHeaderView::GatherFunctionGraphs
Source code excerpt:
const UBlueprintHeaderViewSettings* BlueprintHeaderViewSettings = GetDefault<UBlueprintHeaderViewSettings>();
if (BlueprintHeaderViewSettings->SortMethod == EHeaderViewSortMethod::SortByAccessSpecifier)
{
OutFunctionGraphs.Sort([](const UEdGraph& LeftGraph, const UEdGraph& RightGraph)
{
TArray<UK2Node_FunctionEntry*> LeftEntryNodes;
LeftGraph.GetNodesOfClass<UK2Node_FunctionEntry>(LeftEntryNodes);
TArray<UK2Node_FunctionEntry*> RightEntryNodes;
#Loc: <Workspace>/Engine/Plugins/Editor/BlueprintHeaderView/Source/BlueprintHeaderView/Private/SBlueprintHeaderView.cpp:593
Scope (from outer to inner):
file
function void SBlueprintHeaderView::AddVariableItems
Source code excerpt:
const UBlueprintHeaderViewSettings* BlueprintHeaderViewSettings = GetDefault<UBlueprintHeaderViewSettings>();
if (BlueprintHeaderViewSettings->SortMethod == EHeaderViewSortMethod::SortByAccessSpecifier)
{
VarProperties.Sort([](const FProperty& LeftProp, const FProperty& RightProp)
{
return !LeftProp.GetBoolMetaData(FBlueprintMetadata::MD_Private) && RightProp.GetBoolMetaData(FBlueprintMetadata::MD_Private);
});
}
else if (BlueprintHeaderViewSettings->SortMethod == EHeaderViewSortMethod::SortForOptimalPadding)
{
SortPropertiesForPadding(VarProperties);
}
// We should only add an access specifier line if the previous variable was a different one
int32 PrevAccessSpecifier = 0;
#Loc: <Workspace>/Engine/Plugins/Editor/BlueprintHeaderView/Source/BlueprintHeaderView/Public/BlueprintHeaderViewSettings.h:82
Scope (from outer to inner):
file
class class UBlueprintHeaderViewSettings : public UDeveloperSettings
Source code excerpt:
/** Sorting Method for Header View Functions and Properties */
UPROPERTY(config, EditAnywhere, Category="Settings")
EHeaderViewSortMethod SortMethod = EHeaderViewSortMethod::None;
};
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystem/Source/Public/OnlineStats.h:98
Scope (from outer to inner):
file
class class FOnlineLeaderboardWrite : public FOnlineStats
Source code excerpt:
/** Sort Method */
ELeaderboardSort::Type SortMethod;
/** Display Type */
ELeaderboardFormat::Type DisplayFormat;
/** Update Method */
ELeaderboardUpdateMethod::Type UpdateMethod;
/** Names of the leaderboards to write to */
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystem/Source/Public/OnlineStats.h:111
Scope (from outer to inner):
file
class class FOnlineLeaderboardWrite : public FOnlineStats
function FOnlineLeaderboardWrite
Source code excerpt:
FOnlineLeaderboardWrite() :
SortMethod(ELeaderboardSort::None),
DisplayFormat(ELeaderboardFormat::Number),
UpdateMethod(ELeaderboardUpdateMethod::KeepBest),
RatedStat(NAME_None)
{
}
};
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystem/Source/Test/OnlineLeaderboard.spec.cpp:393
Scope (from outer to inner):
file
lambda-function
lambda-function
lambda-function
lambda-function
Source code excerpt:
LeaderboardWriteObject.RatedStat = "TestStat";
LeaderboardWriteObject.DisplayFormat = ELeaderboardFormat::Number;
LeaderboardWriteObject.SortMethod = ELeaderboardSort::Descending;
LeaderboardWriteObject.UpdateMethod = ELeaderboardUpdateMethod::KeepBest;
LeaderboardWriteObject.SetIntStat("TestStat", 50);
bool bCallStarted = OnlineLeaderboards->WriteLeaderboards(TEXT("TestSessionName"), *TestAccountId, LeaderboardWriteObject);
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystem/Source/Test/OnlineLeaderboard.spec.cpp:416
Scope (from outer to inner):
file
lambda-function
lambda-function
lambda-function
lambda-function
Source code excerpt:
LeaderboardWriteObject.RatedStat = "TestStat";
LeaderboardWriteObject.DisplayFormat = ELeaderboardFormat::Number;
LeaderboardWriteObject.SortMethod = ELeaderboardSort::Descending;
LeaderboardWriteObject.UpdateMethod = ELeaderboardUpdateMethod::KeepBest;
LeaderboardWriteObject.SetIntStat("TestStat", 50);
OnlineLeaderboards->WriteLeaderboards(TEXT(""), *TestAccountId, LeaderboardWriteObject);
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystem/Source/Test/OnlineLeaderboard.spec.cpp:436
Scope (from outer to inner):
file
lambda-function
lambda-function
lambda-function
lambda-function
Source code excerpt:
LeaderboardWriteObject.RatedStat = "TestStat";
LeaderboardWriteObject.DisplayFormat = ELeaderboardFormat::Number;
LeaderboardWriteObject.SortMethod = ELeaderboardSort::Descending;
LeaderboardWriteObject.UpdateMethod = ELeaderboardUpdateMethod::KeepBest;
LeaderboardWriteObject.SetIntStat("TestStat", 50);
OnlineLeaderboards->WriteLeaderboards(TEXT("TestSessionName"), *TestAccountId, LeaderboardWriteObject);
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystem/Source/Test/OnlineLeaderboard.spec.cpp:480
Scope (from outer to inner):
file
lambda-function
lambda-function
lambda-function
lambda-function
Source code excerpt:
LeaderboardWriteObject.RatedStat = "TestStat";
LeaderboardWriteObject.DisplayFormat = ELeaderboardFormat::Number;
LeaderboardWriteObject.SortMethod = ELeaderboardSort::Descending;
LeaderboardWriteObject.UpdateMethod = ELeaderboardUpdateMethod::KeepBest;
LeaderboardWriteObject.SetIntStat("TestStat", 50);
OnlineLeaderboards->WriteLeaderboards(TEXT("TestSessionName"), *TestAccountId, LeaderboardWriteObject);
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystemNull/Source/Private/OnlineLeaderboardInterfaceNull.cpp:104
Scope (from outer to inner):
file
function bool FOnlineLeaderboardsNull::WriteLeaderboards
Source code excerpt:
{
// Will create or retrieve the leaderboards, triggering async calls as appropriate
FLeaderboardNull* Leaderboard = FindOrCreateLeaderboard(WriteObject.LeaderboardNames[LeaderboardIdx], WriteObject.SortMethod, WriteObject.DisplayFormat);
check(Leaderboard);
FOnlineStatsRow* PlayerRow = Leaderboard->FindOrCreatePlayerRecord(Player);
check(PlayerRow);
for (FStatPropertyArray::TConstIterator It(WriteObject.Properties); It; ++It)
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystemNull/Source/Private/OnlineLeaderboardInterfaceNull.cpp:127
Scope (from outer to inner):
file
function bool FOnlineLeaderboardsNull::WriteLeaderboards
Source code excerpt:
ExistingStat->GetValue(OldValue);
switch (WriteObject.SortMethod)
{
case ELeaderboardSort::Ascending:
bJustAssign = NewValue < OldValue;
break;
case ELeaderboardSort::Descending:
bJustAssign = NewValue > OldValue;
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystemNull/Source/Private/OnlineLeaderboardInterfaceNull.cpp:156
Scope (from outer to inner):
file
function FOnlineLeaderboardsNull::FLeaderboardNull* FOnlineLeaderboardsNull::FindOrCreateLeaderboard
Source code excerpt:
}
FOnlineLeaderboardsNull::FLeaderboardNull* FOnlineLeaderboardsNull::FindOrCreateLeaderboard(const FName& LeaderboardName, ELeaderboardSort::Type SortMethod, ELeaderboardFormat::Type DisplayFormat)
{
FLeaderboardNull* Existing = Leaderboards.Find(LeaderboardName);
if (Existing == NULL)
{
FLeaderboardNull NewLeaderboard;
NewLeaderboard.LeaderboardName = LeaderboardName;
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystemNull/Source/Private/OnlineLeaderboardInterfaceNull.h:55
Scope (from outer to inner):
file
class class FOnlineLeaderboardsNull : public IOnlineLeaderboards
Source code excerpt:
* If the leaderboard already exists, the leaderboard data will still be retrieved
* @param LeaderboardName name of leaderboard to create
* @param SortMethod method the leaderboard scores will be sorted, ignored if leaderboard exists
* @param DisplayFormat type of data the leaderboard represents, ignored if leaderboard exists
*/
FLeaderboardNull* FindOrCreateLeaderboard(const FName& LeaderboardName, ELeaderboardSort::Type SortMethod, ELeaderboardFormat::Type DisplayFormat);
PACKAGE_SCOPE:
FOnlineLeaderboardsNull(FOnlineSubsystemNull* InNullSubsystem) :
NullSubsystem(InNullSubsystem)
{
}
public:
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystemSteam/Source/Private/OnlineLeaderboardInterfaceSteam.cpp:594
Scope (from outer to inner):
file
class class FOnlineAsyncTaskSteamRetrieveLeaderboard : public FOnlineAsyncTaskSteam
Source code excerpt:
FName LeaderboardName;
/** Method of sorting the scores on the leaderboard */
ELeaderboardSort::Type SortMethod;
/** Method of displaying the data on the leaderboard */
ELeaderboardFormat::Type DisplayFormat;
/** Results returned from Steam backend */
LeaderboardFindResult_t CallbackResults;
/** Should find only */
bool bFindOnly;
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystemSteam/Source/Private/OnlineLeaderboardInterfaceSteam.cpp:606
Scope (from outer to inner):
file
class class FOnlineAsyncTaskSteamRetrieveLeaderboard : public FOnlineAsyncTaskSteam
Source code excerpt:
* If the leaderboard already exists, the leaderboard data will still be retrieved
* @param LeaderboardName name of leaderboard to create
* @param SortMethod method the leaderboard scores will be sorted, ignored if leaderboard exists
* @param DisplayFormat type of data the leaderboard represents, ignored if leaderboard exists
*/
void CreateOrFindLeaderboard(const FName& InLeaderboardName, ELeaderboardSort::Type InSortMethod, ELeaderboardFormat::Type InDisplayFormat)
{
if (bFindOnly)
{
CallbackHandle = SteamUserStats()->FindLeaderboard(TCHAR_TO_UTF8(*InLeaderboardName.ToString()));
}
else
{
ELeaderboardSortMethod SortMethodSteam = ToSteamLeaderboardSortMethod(InSortMethod);
ELeaderboardDisplayType DisplayTypeSteam = ToSteamLeaderboardDisplayType(InDisplayFormat);
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystemSteam/Source/Private/OnlineLeaderboardInterfaceSteam.cpp:628
Scope (from outer to inner):
file
class class FOnlineAsyncTaskSteamRetrieveLeaderboard : public FOnlineAsyncTaskSteam
function FOnlineAsyncTaskSteamRetrieveLeaderboard
Source code excerpt:
bInit(false),
LeaderboardName(NAME_None),
SortMethod(ELeaderboardSort::Ascending),
DisplayFormat(ELeaderboardFormat::Number),
bFindOnly(true)
{
}
public:
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystemSteam/Source/Private/OnlineLeaderboardInterfaceSteam.cpp:640
Scope (from outer to inner):
file
class class FOnlineAsyncTaskSteamRetrieveLeaderboard : public FOnlineAsyncTaskSteam
function FOnlineAsyncTaskSteamRetrieveLeaderboard
Source code excerpt:
bInit(false),
LeaderboardName(InLeaderboardName),
SortMethod(InSortMethod),
DisplayFormat(InDisplayFormat),
bFindOnly(false)
{
}
/** Find a leaderboard implementation */
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystemSteam/Source/Private/OnlineLeaderboardInterfaceSteam.cpp:651
Scope (from outer to inner):
file
class class FOnlineAsyncTaskSteamRetrieveLeaderboard : public FOnlineAsyncTaskSteam
function FOnlineAsyncTaskSteamRetrieveLeaderboard
Source code excerpt:
bInit(false),
LeaderboardName(InLeaderboardName),
SortMethod(ELeaderboardSort::Ascending),
DisplayFormat(ELeaderboardFormat::Number),
bFindOnly(true)
{
}
/**
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystemSteam/Source/Private/OnlineLeaderboardInterfaceSteam.cpp:676
Scope (from outer to inner):
file
class class FOnlineAsyncTaskSteamRetrieveLeaderboard : public FOnlineAsyncTaskSteam
function virtual void Tick
Source code excerpt:
if (!bInit)
{
CreateOrFindLeaderboard(LeaderboardName, SortMethod, DisplayFormat);
bInit = true;
}
if (CallbackHandle != k_uAPICallInvalid)
{
bool bFailedCall = false;
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystemSteam/Source/Private/OnlineLeaderboardInterfaceSteam.cpp:728
Scope (from outer to inner):
file
class class FOnlineAsyncTaskSteamRetrieveLeaderboard : public FOnlineAsyncTaskSteam
function virtual void Finalize
Source code excerpt:
Leaderboard->TotalLeaderboardRows = SteamUserPtr->GetLeaderboardEntryCount(CallbackResults.m_hSteamLeaderboard);
Leaderboard->DisplayFormat = FromSteamLeaderboardDisplayType(SteamUserPtr->GetLeaderboardDisplayType(CallbackResults.m_hSteamLeaderboard));
Leaderboard->SortMethod = FromSteamLeaderboardSortMethod(SteamUserPtr->GetLeaderboardSortMethod(CallbackResults.m_hSteamLeaderboard));
Leaderboard->AsyncState = EOnlineAsyncTaskState::Done;
}
else
{
Leaderboard->LeaderboardHandle = -1;
Leaderboard->TotalLeaderboardRows = 0;
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystemSteam/Source/Private/OnlineLeaderboardInterfaceSteam.cpp:1495
Scope (from outer to inner):
file
function bool FOnlineLeaderboardsSteam::WriteLeaderboards
Source code excerpt:
{
// Will create or retrieve the leaderboards, triggering async calls as appropriate
CreateLeaderboard(WriteObject.LeaderboardNames[LeaderboardIdx], WriteObject.SortMethod, WriteObject.DisplayFormat);
}
// Update stats columns associated with the leaderboards (before actual leaderboard update so we can retrieve the updated stat)
FStatPropertyArray LeaderboardStats;
for (int32 LeaderboardIdx = 0; LeaderboardIdx < NumLeaderboards; LeaderboardIdx++)
{
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystemSteam/Source/Private/OnlineLeaderboardInterfaceSteam.cpp:1561
Scope (from outer to inner):
file
function void FOnlineLeaderboardsSteam::CreateLeaderboard
Source code excerpt:
}
void FOnlineLeaderboardsSteam::CreateLeaderboard(const FName& LeaderboardName, ELeaderboardSort::Type SortMethod, ELeaderboardFormat::Type DisplayFormat)
{
FScopeLock ScopeLock(&LeaderboardMetadataLock);
FLeaderboardMetadataSteam* LeaderboardMetadata = GetLeaderboardMetadata(LeaderboardName);
// Don't allow multiple attempts to create a leaderboard unless it's actually failed before
bool bPrevAttemptFailed = (LeaderboardMetadata != NULL && LeaderboardMetadata->LeaderboardHandle == -1 &&
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystemSteam/Source/Private/OnlineLeaderboardInterfaceSteam.cpp:1573
Scope (from outer to inner):
file
function void FOnlineLeaderboardsSteam::CreateLeaderboard
Source code excerpt:
if (LeaderboardMetadata == NULL || bPrevAttemptFailed)
{
FLeaderboardMetadataSteam* NewLeaderboard = new (Leaderboards) FLeaderboardMetadataSteam(LeaderboardName, SortMethod, DisplayFormat);
NewLeaderboard->AsyncState = EOnlineAsyncTaskState::InProgress;
SteamSubsystem->QueueAsyncTask(new FOnlineAsyncTaskSteamRetrieveLeaderboard(SteamSubsystem, LeaderboardName, SortMethod, DisplayFormat));
}
// else request already in flight or already found
}
void FOnlineLeaderboardsSteam::FindLeaderboard(const FName& LeaderboardName)
{
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystemSteam/Source/Private/OnlineLeaderboardInterfaceSteam.h:78
Scope (from outer to inner):
file
class class FOnlineLeaderboardsSteam : public IOnlineLeaderboards
Source code excerpt:
* If the leaderboard already exists, the leaderboard data will still be retrieved
* @param LeaderboardName name of leaderboard to create
* @param SortMethod method the leaderboard scores will be sorted, ignored if leaderboard exists
* @param DisplayFormat type of data the leaderboard represents, ignored if leaderboard exists
*/
void CreateLeaderboard(const FName& LeaderboardName, ELeaderboardSort::Type SortMethod, ELeaderboardFormat::Type DisplayFormat);
/**
* Start an async task to find a leaderboard with the Steam backend
* If the leaderboard doesn't exist, a warning will be generated
* @param LeaderboardName name of leaderboard to create
*/
void FindLeaderboard(const FName& LeaderboardName);
/**
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystemSteam/Source/Private/OnlineSubsystemSteamTypes.h:670
Scope (from outer to inner):
file
class class FLeaderboardMetadataSteam
Source code excerpt:
FName LeaderboardName;
/** Sort Method */
ELeaderboardSort::Type SortMethod;
/** Display Type */
ELeaderboardFormat::Type DisplayFormat;
/** Number of entries on leaderboard */
int32 TotalLeaderboardRows;
/** Handle to leaderboard */
SteamLeaderboard_t LeaderboardHandle;
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystemSteam/Source/Private/OnlineSubsystemSteamTypes.h:682
Scope (from outer to inner):
file
class class FLeaderboardMetadataSteam
function FLeaderboardMetadataSteam
Source code excerpt:
FLeaderboardMetadataSteam(const FName& InLeaderboardName, ELeaderboardSort::Type InSortMethod, ELeaderboardFormat::Type InDisplayFormat) :
LeaderboardName(InLeaderboardName),
SortMethod(InSortMethod),
DisplayFormat(InDisplayFormat),
TotalLeaderboardRows(0),
LeaderboardHandle(-1),
AsyncState(EOnlineAsyncTaskState::NotStarted)
{
}
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystemSteam/Source/Private/OnlineSubsystemSteamTypes.h:692
Scope (from outer to inner):
file
class class FLeaderboardMetadataSteam
function FLeaderboardMetadataSteam
Source code excerpt:
FLeaderboardMetadataSteam(const FName& InLeaderboardName) :
LeaderboardName(InLeaderboardName),
SortMethod(ELeaderboardSort::None),
DisplayFormat(ELeaderboardFormat::Number),
TotalLeaderboardRows(0),
LeaderboardHandle(-1),
AsyncState(EOnlineAsyncTaskState::NotStarted)
{
}
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystemUtils/Source/OnlineSubsystemUtils/Private/LeaderboardBlueprintLibrary.cpp:65
Scope (from outer to inner):
file
function bool ULeaderboardBlueprintLibrary::WriteLeaderboardInteger
Source code excerpt:
WriteObject.RatedStat = StatName;
WriteObject.DisplayFormat = ELeaderboardFormat::Number;
WriteObject.SortMethod = ELeaderboardSort::Descending;
WriteObject.UpdateMethod = ELeaderboardUpdateMethod::KeepBest;
WriteObject.SetIntStat(StatName, StatValue);
return WriteLeaderboardObject(PlayerController, WriteObject);
}
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystemUtils/Source/OnlineSubsystemUtils/Private/Tests/TestLeaderboardInterface.cpp:18
Scope (from outer to inner):
file
class class TestLeaderboardWrite : public FOnlineLeaderboardWrite
function TestLeaderboardWrite
Source code excerpt:
RatedStat = "TestIntStat1";
DisplayFormat = ELeaderboardFormat::Number;
SortMethod = ELeaderboardSort::Descending;
UpdateMethod = ELeaderboardUpdateMethod::KeepBest;
}
};
/**
* Example of a leaderboard read object
#Loc: <Workspace>/Engine/Plugins/PCG/Source/PCG/Private/Elements/PCGSortAttributes.cpp:86
Scope (from outer to inner):
file
function bool FPCGSortAttributesElement::ExecuteInternal
Source code excerpt:
{
UPCGPointData* OutputPointData = static_cast<UPCGPointData*>(InputData->DuplicateData());
PCGAttributeAccessorHelpers::SortByAttribute(*Accessor, *Keys, OutputPointData->GetMutablePoints(), Settings->SortMethod == EPCGSortMethod::Ascending);
OutputData = OutputPointData;
}
else if (const UPCGMetadata* InMetadata = InputData->ConstMetadata())
{
// Duplicate data without metadata
OutputData = InputData->DuplicateData(/*bInitializeMetdata=*/false);
#Loc: <Workspace>/Engine/Plugins/PCG/Source/PCG/Private/Elements/PCGSortAttributes.cpp:111
Scope (from outer to inner):
file
function bool FPCGSortAttributesElement::ExecuteInternal
Source code excerpt:
}
PCGAttributeAccessorHelpers::SortByAttribute(*Accessor, *Keys, Entries, Settings->SortMethod == EPCGSortMethod::Ascending);
OutMetadata->InitializeAsCopy(InputData->ConstMetadata(), &Entries);
}
FPCGTaggedData& Output = Outputs.Add_GetRef(Input);
Output.Data = OutputData;
#Loc: <Workspace>/Engine/Plugins/PCG/Source/PCG/Private/Tests/Elements/PCGSortAttributesTest.cpp:36
Scope (from outer to inner):
file
namespace SortCommonTestData
function TUniquePtr<FPCGContext> RunSortElementOnData
Source code excerpt:
check(Settings);
Settings->InputSource = InputSource;
Settings->SortMethod = Method;
FPCGElementPtr TestElement = TestData.Settings->GetElement();
FPCGTaggedData& SourcePin = TestData.InputData.TaggedData.Emplace_GetRef();
SourcePin.Pin = PCGPinConstants::DefaultInputLabel;
SourcePin.Data = InData;
#Loc: <Workspace>/Engine/Plugins/PCG/Source/PCG/Public/Elements/PCGSortAttributes.h:44
Scope (from outer to inner):
file
class class UPCGSortAttributesSettings : public UPCGSettings
Source code excerpt:
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Settings, meta = (PCG_Overridable))
EPCGSortMethod SortMethod = EPCGSortMethod::Ascending;
};
class FPCGSortAttributesElement : public IPCGElement
{
protected:
virtual bool ExecuteInternal(FPCGContext* Context) const override;
#Loc: <Workspace>/Engine/Source/Editor/ContentBrowser/Private/AssetViewSortManager.cpp:378
Scope (from outer to inner):
file
function void FAssetViewSortManager::SortList
Source code excerpt:
//double SortListStartTime = FPlatformTime::Seconds();
TArray<TUniquePtr<FCompareFAssetItemBase>> SortMethod;
for (int32 PriorityIdx = 0; PriorityIdx < EColumnSortPriority::Max; PriorityIdx++)
{
const bool bAscending(SortMode[PriorityIdx] == EColumnSortMode::Ascending);
const FName& Tag(SortColumnId[PriorityIdx]);
if (Tag == NAME_None)
#Loc: <Workspace>/Engine/Source/Editor/ContentBrowser/Private/AssetViewSortManager.cpp:391
Scope (from outer to inner):
file
function void FAssetViewSortManager::SortList
Source code excerpt:
if (Tag == NameColumnId)
{
SortMethod.Add(MakeUnique<FCompareFAssetItemByName>(bAscending, Tag));
}
else if (Tag == ClassColumnId)
{
SortMethod.Add(MakeUnique<FCompareFAssetItemByClass>(bAscending, Tag));
}
else if (Tag == PathColumnId)
{
SortMethod.Add(MakeUnique<FCompareFAssetItemByPath>(bAscending, Tag));
}
else
{
UObject::FAssetRegistryTag::ETagType TagType = UObject::FAssetRegistryTag::TT_Hidden;
const bool bFoundCustomColumn = FindAndRefreshCustomColumn(AssetItems, Tag, CustomColumns, TagType);
#Loc: <Workspace>/Engine/Source/Editor/ContentBrowser/Private/AssetViewSortManager.cpp:430
Scope (from outer to inner):
file
function void FAssetViewSortManager::SortList
Source code excerpt:
{
// The property is a Number, compare using atof
SortMethod.Add(MakeUnique<FCompareFAssetItemByTagNumerical>(bAscending, Tag));
}
else if (TagType == UObject::FAssetRegistryTag::TT_Dimensional)
{
// The property is a series of Numbers representing dimensions, compare by using atof for each Number, delimited by an "x"
SortMethod.Add(MakeUnique<FCompareFAssetItemByTagDimensional>(bAscending, Tag));
}
else if (TagType != UObject::FAssetRegistryTag::ETagType::TT_Hidden)
{
// Unknown or alphabetical, sort alphabetically either way
SortMethod.Add(MakeUnique<FCompareFAssetItemByTag>(bAscending, Tag));
}
}
}
// Sort the list...
if (SortMethod.Num() > 0)
{
TUniquePtr<FCompareFAssetItemBase> PrimarySortMethod = MoveTemp(SortMethod[EColumnSortPriority::Primary]);
check(PrimarySortMethod);
SortMethod.RemoveAt(0);
// Move all the comparisons to the primary sort method
PrimarySortMethod->SetNextComparisons(SortMethod);
AssetItems.Sort(*(PrimarySortMethod.Get()));
// Move the comparisons back for ease of cleanup
SortMethod = MoveTemp(PrimarySortMethod->GetNextComparisons());
SortMethod.Insert(MoveTemp(PrimarySortMethod), 0);
}
// Cleanup the methods we no longer need.
for (int32 PriorityIdx = 0; PriorityIdx < SortMethod.Num(); PriorityIdx++)
{
SortMethod[PriorityIdx].Reset();
}
SortMethod.Empty();
//UE_LOG(LogContentBrowser, Warning/*VeryVerbose*/, TEXT("FAssetViewSortManager Sort Time: %0.4f seconds."), FPlatformTime::Seconds() - SortListStartTime);
}
void FAssetViewSortManager::ExportColumnsToCSV(TArray<TSharedPtr<FAssetViewItem>>& AssetItems, TArray<FName>& ColumnList, const TArray<FAssetViewCustomColumn>& CustomColumns, FString& OutString) const
{
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/GeometryCollectionEngine/Private/ChaosBlueprint.cpp:138
Scope (from outer to inner):
file
function void UChaosDestructionListener::UpdateTransformSettings
Source code excerpt:
if (IsEventListening())
{
bWantsOnUpdateTransform = CollisionEventRequestSettings.SortMethod == EChaosCollisionSortMethod::SortByNearestFirst ||
BreakingEventRequestSettings.SortMethod == EChaosBreakingSortMethod::SortByNearestFirst ||
TrailingEventRequestSettings.SortMethod == EChaosTrailingSortMethod::SortByNearestFirst ||
RemovalEventRequestSettings.SortMethod == EChaosRemovalSortMethod::SortByNearestFirst;
}
else
{
bWantsOnUpdateTransform = false;
}
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/GeometryCollectionEngine/Private/ChaosBlueprint.cpp:382
Scope (from outer to inner):
file
function void UChaosDestructionListener::SortCollisionEvents
Source code excerpt:
}
void UChaosDestructionListener::SortCollisionEvents(TArray<FChaosCollisionEventData>& CollisionEvents, EChaosCollisionSortMethod SortMethod)
{
if (ChaosCollisionFilter.IsValid())
{
ChaosCollisionFilter->SortEvents(CollisionEvents, SortMethod, GetComponentTransform());
}
}
void UChaosDestructionListener::SortBreakingEvents(TArray<FChaosBreakingEventData>& BreakingEvents, EChaosBreakingSortMethod SortMethod)
{
if (ChaosBreakingFilter.IsValid())
{
ChaosBreakingFilter->SortEvents(BreakingEvents, SortMethod, GetComponentTransform());
}
}
void UChaosDestructionListener::SortTrailingEvents(TArray<FChaosTrailingEventData>& TrailingEvents, EChaosTrailingSortMethod SortMethod)
{
if (ChaosTrailingFilter.IsValid())
{
ChaosTrailingFilter->SortEvents(TrailingEvents, SortMethod, GetComponentTransform());
}
}
void UChaosDestructionListener::SortRemovalEvents(TArray<FChaosRemovalEventData>& RemovalEvents, EChaosRemovalSortMethod SortMethod)
{
if (ChaosRemovalFilter.IsValid())
{
ChaosRemovalFilter->SortEvents(RemovalEvents, SortMethod, GetComponentTransform());
}
}
void UChaosDestructionListener::RegisterChaosEvents(FPhysScene* Scene)
{
Chaos::FPhysicsSolver* Solver = Scene->GetSolver();
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/GeometryCollectionEngine/Private/ChaosBreakingEventFilter.cpp:49
Scope (from outer to inner):
file
function void FChaosBreakingEventFilter::FilterEvents
Source code excerpt:
}
SortEvents(FilteredDataArray, BreakingEventRequestSettings->SortMethod, ChaosComponentTransform);
}
}
void FChaosBreakingEventFilter::SortEvents(TArray<FChaosBreakingEventData>& InOutBreakingEvents, EChaosBreakingSortMethod SortMethod, const FTransform& InTransform)
{
struct FSortBreakingByMassMaxToMin
{
FORCEINLINE bool operator()(const FChaosBreakingEventData& Lhs, const FChaosBreakingEventData& Rhs) const
{
return Lhs.Mass > Rhs.Mass;
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/GeometryCollectionEngine/Private/ChaosBreakingEventFilter.cpp:90
Scope (from outer to inner):
file
function void FChaosBreakingEventFilter::SortEvents
Source code excerpt:
// Apply the sort
switch (SortMethod)
{
case EChaosBreakingSortMethod::SortNone:
break;
case EChaosBreakingSortMethod::SortByHighestMass:
InOutBreakingEvents.Sort(FSortBreakingByMassMaxToMin());
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/GeometryCollectionEngine/Private/ChaosCollisionEventFilter.cpp:71
Scope (from outer to inner):
file
function void FChaosCollisionEventFilter::FilterEvents
Source code excerpt:
}
SortEvents(FilteredDataArray, CollisionEventRequestSettings->SortMethod, ChaosComponentTransform);
}
}
void FChaosCollisionEventFilter::SortEvents(TArray<FChaosCollisionEventData>& InOutCollisionEvents, EChaosCollisionSortMethod SortMethod, const FTransform& InTransform)
{
struct FSortCollisionByMassMaxToMin
{
FORCEINLINE bool operator()(const FChaosCollisionEventData& Lhs, const FChaosCollisionEventData& Rhs) const
{
return FMath::Max(Lhs.Mass1, Lhs.Mass2) > FMath::Max(Rhs.Mass1, Rhs.Mass2);
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/GeometryCollectionEngine/Private/ChaosCollisionEventFilter.cpp:118
Scope (from outer to inner):
file
function void FChaosCollisionEventFilter::SortEvents
Source code excerpt:
};
switch (SortMethod)
{
case EChaosCollisionSortMethod::SortNone:
break;
case EChaosCollisionSortMethod::SortByHighestMass:
InOutCollisionEvents.Sort(FSortCollisionByMassMaxToMin());
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/GeometryCollectionEngine/Private/ChaosRemovalEventFilter.cpp:46
Scope (from outer to inner):
file
function void FChaosRemovalEventFilter::FilterEvents
Source code excerpt:
}
SortEvents(FilteredDataArray, RemovalEventRequestSettings->SortMethod, ChaosComponentTransform);
}
}
void FChaosRemovalEventFilter::SortEvents(TArray<FChaosRemovalEventData>& InOutRemovalEvents, EChaosRemovalSortMethod SortMethod, const FTransform& InTransform)
{
struct FSortRemovalByMassMaxToMin
{
FORCEINLINE bool operator()(const FChaosRemovalEventData& Lhs, const FChaosRemovalEventData& Rhs) const
{
return Lhs.Mass > Rhs.Mass;
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/GeometryCollectionEngine/Private/ChaosRemovalEventFilter.cpp:78
Scope (from outer to inner):
file
function void FChaosRemovalEventFilter::SortEvents
Source code excerpt:
// Apply the sort
switch (SortMethod)
{
case EChaosRemovalSortMethod::SortNone:
break;
case EChaosRemovalSortMethod::SortByHighestMass:
InOutRemovalEvents.Sort(FSortRemovalByMassMaxToMin());
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/GeometryCollectionEngine/Private/ChaosTrailingEventFilter.cpp:58
Scope (from outer to inner):
file
function void FChaosTrailingEventFilter::FilterEvents
Source code excerpt:
}
SortEvents(FilteredDataArray, TrailingEventRequestSettings->SortMethod, ChaosComponentTransform);
}
}
void FChaosTrailingEventFilter::SortEvents(TArray<FChaosTrailingEventData>& InOutTrailingEvents, EChaosTrailingSortMethod SortMethod, const FTransform& InTransform)
{
struct FSortTrailingByMassMaxToMin
{
FORCEINLINE bool operator()(const FChaosTrailingEventData& Lhs, const FChaosTrailingEventData& Rhs) const
{
return Lhs.Mass > Rhs.Mass;
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/GeometryCollectionEngine/Private/ChaosTrailingEventFilter.cpp:98
Scope (from outer to inner):
file
function void FChaosTrailingEventFilter::SortEvents
Source code excerpt:
// Apply the sort
switch (SortMethod)
{
case EChaosTrailingSortMethod::SortNone:
break;
case EChaosTrailingSortMethod::SortByHighestMass:
InOutTrailingEvents.Sort(FSortTrailingByMassMaxToMin());
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/GeometryCollectionEngine/Public/ChaosBlueprint.h:167
Scope (from outer to inner):
file
class class UChaosDestructionListener : public USceneComponent
Source code excerpt:
// Sorts collision events according to the given sort method
UFUNCTION(BlueprintCallable, Category = "Destruction Listener", meta = (WorldContext = "WorldContextObject"))
GEOMETRYCOLLECTIONENGINE_API void SortCollisionEvents(UPARAM(ref) TArray<FChaosCollisionEventData>& CollisionEvents, EChaosCollisionSortMethod SortMethod);
// Sorts breaking events according to the given sort method
UFUNCTION(BlueprintCallable, Category = "Destruction Listener", meta = (WorldContext = "WorldContextObject"))
GEOMETRYCOLLECTIONENGINE_API void SortBreakingEvents(UPARAM(ref) TArray<FChaosBreakingEventData>& BreakingEvents, EChaosBreakingSortMethod SortMethod);
// Sorts trailing events according to the given sort method
UFUNCTION(BlueprintCallable, Category = "Destruction Listener", meta = (WorldContext = "WorldContextObject"))
GEOMETRYCOLLECTIONENGINE_API void SortTrailingEvents(UPARAM(ref) TArray<FChaosTrailingEventData>& TrailingEvents, EChaosTrailingSortMethod SortMethod);
// Sorts removal events according to the given sort method
UFUNCTION(BlueprintCallable, Category = "Destruction Listener", meta = (WorldContext = "WorldContextObject"))
GEOMETRYCOLLECTIONENGINE_API void SortRemovalEvents(UPARAM(ref) TArray<FChaosRemovalEventData>& RemovalEvents, EChaosRemovalSortMethod SortMethod);
private:
// Updates the scene component transform settings
GEOMETRYCOLLECTIONENGINE_API void UpdateTransformSettings();
// Retrieves data from solvers
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/GeometryCollectionEngine/Public/ChaosBreakingEventFilter.h:73
Scope: file
Source code excerpt:
/** The method used to sort the breaking events. */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Sort")
EChaosBreakingSortMethod SortMethod;
FChaosBreakingEventRequestSettings()
: MaxNumberOfResults(0)
, MinRadius(0.0f)
, MinSpeed(0.0f)
, MinMass(0.0f)
, MaxDistance(0.0f)
, SortMethod(EChaosBreakingSortMethod::SortByHighestMass)
{}
};
class FChaosBreakingEventFilter : public IChaosEventFilter<Chaos::FBreakingDataArray, TArray<FChaosBreakingEventData>, EChaosBreakingSortMethod>
{
public:
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/GeometryCollectionEngine/Public/ChaosBreakingEventFilter.h:92
Scope (from outer to inner):
file
class class FChaosBreakingEventFilter : public IChaosEventFilter<Chaos::FBreakingDataArray, TArray<FChaosBreakingEventData>, EChaosBreakingSortMethod>
Source code excerpt:
GEOMETRYCOLLECTIONENGINE_API virtual void FilterEvents(const FTransform& ChaosComponentTransform, const Chaos::FBreakingDataArray& RawBreakingDataArray) override;
GEOMETRYCOLLECTIONENGINE_API virtual void SortEvents(TArray<FChaosBreakingEventData>& InOutBreakingEvents, EChaosBreakingSortMethod SortMethod, const FTransform& InTransform) override;
private:
FChaosBreakingEventFilter() : BreakingEventRequestSettings(nullptr) {}
const FChaosBreakingEventRequestSettings* BreakingEventRequestSettings;
};
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/GeometryCollectionEngine/Public/ChaosCollisionEventFilter.h:94
Scope: file
Source code excerpt:
/** The method used to sort the collision events. */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Sort")
EChaosCollisionSortMethod SortMethod;
FChaosCollisionEventRequestSettings()
: MaxNumberResults(0)
, MinMass(0.0f)
, MinSpeed(0.0f)
, MinImpulse(0.0f)
, MaxDistance(0.0f)
, SortMethod(EChaosCollisionSortMethod::SortByHighestMass)
{}
};
class FChaosCollisionEventFilter : public IChaosEventFilter<Chaos::FCollisionDataArray, TArray<FChaosCollisionEventData>, EChaosCollisionSortMethod>
{
public:
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/GeometryCollectionEngine/Public/ChaosCollisionEventFilter.h:113
Scope (from outer to inner):
file
class class FChaosCollisionEventFilter : public IChaosEventFilter<Chaos::FCollisionDataArray, TArray<FChaosCollisionEventData>, EChaosCollisionSortMethod>
Source code excerpt:
GEOMETRYCOLLECTIONENGINE_API virtual void FilterEvents(const FTransform& ChaosComponentTransform, const Chaos::FCollisionDataArray& RawCollisionDataArray) override;
GEOMETRYCOLLECTIONENGINE_API virtual void SortEvents(TArray<FChaosCollisionEventData>& InOutCollisionEvents, EChaosCollisionSortMethod SortMethod, const FTransform& InTransform) override;
private:
FChaosCollisionEventFilter() : CollisionEventRequestSettings(nullptr) { check(false); }
const FChaosCollisionEventRequestSettings* CollisionEventRequestSettings;
};
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/GeometryCollectionEngine/Public/ChaosFilter.h:26
Scope (from outer to inner):
file
class class IChaosEventFilter
Source code excerpt:
* Optionally Sort events based on increasing or decreasing values of FilteredDataArray fields
*/
virtual void SortEvents(DestinationType& InOutFilteredEvents, SortMethodType SortMethod, const FTransform& InTransform) = 0;
/**
* Gain access to the filtered results
*/
const DestinationType& GetFilteredResults() const { return FilteredDataArray; };
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/GeometryCollectionEngine/Public/ChaosRemovalEventFilter.h:63
Scope: file
Source code excerpt:
/** The method used to sort the removal events. */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Sort")
EChaosRemovalSortMethod SortMethod;
FChaosRemovalEventRequestSettings()
: MaxNumberOfResults(0)
, MinMass(0.0f)
, MaxDistance(0.0f)
, SortMethod(EChaosRemovalSortMethod::SortByHighestMass)
{
}
};
class FChaosRemovalEventFilter
: public IChaosEventFilter<Chaos::FRemovalDataArray, TArray<FChaosRemovalEventData>, EChaosRemovalSortMethod>
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/GeometryCollectionEngine/Public/ChaosRemovalEventFilter.h:82
Scope (from outer to inner):
file
class class FChaosRemovalEventFilter : public IChaosEventFilter<Chaos::FRemovalDataArray, TArray<FChaosRemovalEventData>, EChaosRemovalSortMethod>
Source code excerpt:
GEOMETRYCOLLECTIONENGINE_API virtual void FilterEvents(const FTransform& ChaosComponentTransform, const Chaos::FRemovalDataArray& RawRemovalDataArray) override;
GEOMETRYCOLLECTIONENGINE_API virtual void SortEvents(TArray<FChaosRemovalEventData>& InOutRemovalEvents, EChaosRemovalSortMethod SortMethod, const FTransform& InTransform) override;
private:
FChaosRemovalEventFilter() : RemovalEventRequestSettings(nullptr) {}
const FChaosRemovalEventRequestSettings* RemovalEventRequestSettings;
};
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/GeometryCollectionEngine/Public/ChaosTrailingEventFilter.h:82
Scope: file
Source code excerpt:
/** The method used to sort the breaking events. */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Sort")
EChaosTrailingSortMethod SortMethod;
FChaosTrailingEventRequestSettings()
: MaxNumberOfResults(0)
, MinMass(0.0f)
, MinSpeed(0.0f)
, MinAngularSpeed(0.0f)
, MaxDistance(0.0f)
, SortMethod(EChaosTrailingSortMethod::SortByHighestMass)
{
}
};
class FChaosTrailingEventFilter
: public IChaosEventFilter<Chaos::FTrailingDataArray, TArray<FChaosTrailingEventData>, EChaosTrailingSortMethod>
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/GeometryCollectionEngine/Public/ChaosTrailingEventFilter.h:103
Scope (from outer to inner):
file
class class FChaosTrailingEventFilter : public IChaosEventFilter<Chaos::FTrailingDataArray, TArray<FChaosTrailingEventData>, EChaosTrailingSortMethod>
Source code excerpt:
GEOMETRYCOLLECTIONENGINE_API virtual void FilterEvents(const FTransform& ChaosComponentTransform, const Chaos::FTrailingDataArray& RawTrailingDataArray) override;
GEOMETRYCOLLECTIONENGINE_API virtual void SortEvents(TArray<FChaosTrailingEventData>& InOutTrailingEvents, EChaosTrailingSortMethod SortMethod, const FTransform& InTransform) override;
private:
FChaosTrailingEventFilter() : TrailingEventRequestSettings(nullptr) {}
const FChaosTrailingEventRequestSettings* TrailingEventRequestSettings;
};