7#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >0
8#include "AssetRegistry/AssetRegistryModule.h"
10#include "AssetRegistryModule.h"
12#include "UObject/Package.h"
13#include "UObject/ConstructorHelpers.h"
14#include "Interfaces/ArticyObjectWithPosition.h"
15#include "Interfaces/ArticyNode.h"
37 const FString PackageName = ArticyHelpers::GetArticyGeneratedFolder() / Name;
40#if ENGINE_MAJOR_VERSION >= 5 || (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 26)
41 UPackage* AssetPackage = CreatePackage(*PackageName);
43 UPackage* AssetPackage = CreatePackage(
nullptr, *PackageName);
46 AssetPackage->FullyLoad();
62 inline UClass*
RetrieveClass(
const FString& ClassName,
const FString& ModuleName =
"", UClass* BaseClass = UArticyObject::StaticClass())
64 if (!ModuleName.IsEmpty())
66 auto FullClassName = FString::Printf(TEXT(
"/Script/%s.%s"), *ModuleName, *ClassName);
67 return ConstructorHelpersInternal::FindOrLoadClass(FullClassName, BaseClass);
70 FString FullClassName = FString::Printf(TEXT(
"/Script/%s.%s"), TEXT(
"ArticyRuntime"), *ClassName);
71 UClass* Result = ConstructorHelpersInternal::FindOrLoadClass(FullClassName, BaseClass);
73 if (Result !=
nullptr)
78 FullClassName = FString::Printf(TEXT(
"/Script/%s.%s"), FApp::GetProjectName(), *ClassName);
79 Result = ConstructorHelpersInternal::FindOrLoadClass(FullClassName, BaseClass);
99 template <
typename AssetType>
100 AssetType*
GenerateAsset(
const TCHAR* ClassName,
const TCHAR* ModuleName,
const FString AssetName =
"",
const FString SubFolder =
"",
const EObjectFlags AdditionalFlags = RF_NoFlags,
bool MustCreate =
false)
102 const auto ActualAssetName = AssetName.IsEmpty() ? ClassName : AssetName;
103 const auto FileName = (SubFolder.IsEmpty() ? ActualAssetName : SubFolder / ActualAssetName).Replace(TEXT(
" "), TEXT(
"_"));
107 if (
auto UClass =
RetrieveClass(ClassName, ModuleName, AssetType::StaticClass()))
110 EObjectFlags Flags = RF_Public | RF_Standalone;
117 AssetType* Existing = FindObject<AssetType>(AssetPackage, *ActualAssetName);
118 if (!ensureAlwaysMsgf(Existing ==
nullptr, TEXT(
119 "Warning!! Somehow you have managed to load an old Articy Asset asset (%s) when it\n"
120 "_should_ have been deleted already by DeleteGeneratedAssets() in CodeGenerator.cpp.\n"
121 "This is likely caused by your Source Control plugin in Unreal restoring deleted files\n"
122 "unexpectedly. If you're not sure what's going on, please contact support@articy.com for\n"
123 "assistance with details on how you triggered this issue.\n"
124 "Loading will be cancelled to avoid crashing Unreal."
125 ), *ActualAssetName))
133 if (AdditionalFlags != RF_NoFlags)
135 Flags = Flags | AdditionalFlags;
137 AssetType* CreatedAsset = NewObject<AssetType>(AssetPackage, UClass, *ActualAssetName, Flags);;
143 FAssetRegistryModule::AssetCreated(Cast<UObject>(CreatedAsset));
146 AssetPackage->MarkPackageDirty();
170 template <
typename AssetType>
171 AssetType*
GenerateSubAsset(
const TCHAR* ClassName,
const TCHAR* ModuleName,
const FString AssetName =
"", UObject* Outer =
nullptr)
179 const auto ActualAssetName = AssetName.IsEmpty() ? ClassName : AssetName;
180 const auto FileName = ActualAssetName.Replace(TEXT(
" "), TEXT(
"_"));
182 auto FullClassName = FString::Printf(TEXT(
"Class'/Script/%s.%s'"), ModuleName, ClassName);
183 if (
auto UClass = ConstructorHelpersInternal::FindOrLoadClass(FullClassName, AssetType::StaticClass()))
186 EObjectFlags Flags = RF_Public;
187 AssetType* CreatedAsset = NewObject<AssetType>(Outer, UClass, FName(*ActualAssetName), Flags);
193 FAssetRegistryModule::AssetCreated(Cast<UObject>(CreatedAsset));
212 static bool IsPlayInEditor()
214 for (
const FWorldContext& Context : GEngine->GetWorldContexts())
216 if (Context.World()->IsPlayInEditor())
245 if (!AObjectWithPosition || !BObjectWithPosition)
return true;
247 const FVector2D& APos = AObjectWithPosition->GetPosition();
248 const FVector2D& BPos = BObjectWithPosition->GetPosition();
250 if (APos.X == BPos.X)
252 return APos.Y < BPos.Y;
255 return APos.X < BPos.X;
Definition ArticyObjectWithPosition.h:17
Provides utility functions for importing and managing Articy assets in Unreal Engine.
AssetType * GenerateSubAsset(const TCHAR *ClassName, const TCHAR *ModuleName, const FString AssetName="", UObject *Outer=nullptr)
Generates a sub-asset of the specified type.
Definition ArticyImporterHelpers.h:171
UPackage * FindOrCreatePackage(const FString &Name)
Finds or creates a package with the specified name.
Definition ArticyImporterHelpers.h:35
AssetType * GenerateAsset(const TCHAR *ClassName, const TCHAR *ModuleName, const FString AssetName="", const FString SubFolder="", const EObjectFlags AdditionalFlags=RF_NoFlags, bool MustCreate=false)
Generates an asset of the specified type.
Definition ArticyImporterHelpers.h:100
UClass * RetrieveClass(const FString &ClassName, const FString &ModuleName="", UClass *BaseClass=UArticyObject::StaticClass())
Retrieves a class by name, optionally within a specified module.
Definition ArticyImporterHelpers.h:62
Comparator for sorting Articy nodes based on their X position.
Definition ArticyImporterHelpers.h:232
FORCEINLINE bool operator()(const FArticyId &A, const FArticyId &B) const
Comparison operator for sorting nodes based on position.
Definition ArticyImporterHelpers.h:240
Definition ArticyBaseTypes.h:18