TArray<FComponentClassComboEntryPtr> SortedClassList; AddBasicShapeComponents(SortedClassList); TArray<FName> InMemoryClasses; for (TObjectIterator<UClass> It; It; ++It) { UClass* Class = *It; // If this is a subclass of Actor Component, not abstract, and tagged as spawnable from Kismet if (Class->IsChildOf(UActorComponent::StaticClass())) { InMemoryClasses.Push(Class->GetFName()); if (!Class->HasAnyClassFlags(CLASS_Abstract) && Class->HasMetaData(FBlueprintMetadata::MD_BlueprintSpawnableComponent) && !FKismetEditorUtilities::IsClassABlueprintSkeleton(Class)) //@TODO: Fold this logic together with the one in UEdGraphSchema_K2::GetAddComponentClasses { TArray<FString> ClassGroupNames; Class->GetClassGroupNames(ClassGroupNames); if (ClassGroupNames.Contains(CommonClassGroup)) { FString ClassGroup = CommonClassGroup; FComponentClassComboEntryPtr NewEntry(new FComponentClassComboEntry(ClassGroup, Class, ClassGroupNames.Num() <= 1, EComponentCreateAction::SpawnExistingClass)); SortedClassList.Add(NewEntry); } if (ClassGroupNames.Num() && !ClassGroupNames[0].Equals(CommonClassGroup)) { const bool bIncludeInFilter = true; FString ClassGroup = ClassGroupNames[0]; FComponentClassComboEntryPtr NewEntry(new FComponentClassComboEntry(ClassGroup, Class, bIncludeInFilter, EComponentCreateAction::SpawnExistingClass)); SortedClassList.Add(NewEntry); }