Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template<typename T>
- T * GetBlueprintCDO(UBlueprint * Blueprint)
- {
- if (Blueprint == nullptr) return nullptr;
- const UClass * BlueprintClass = Blueprint->Generated${1}< ${3} >
- return Cast<T>(BlueprintClass->ClassDefaultObject);
- }
- UENUM(BlueprintType) //"BlueprintType" is essential to include
- enum class ESpineFilePairType : uint8
- {
- FP_Atlas UMETA(DisplayName = "Atlas"),
- FP_Skeleton UMETA(DisplayName = "Skeleton")
- };
- USTRUCT(BlueprintType)
- struct FSpineFilePair
- {
- GENERATED_USTRUCT_BODY()
- UPROPERTY()
- USpineAtlasAsset * Atlas = nullptr;
- UPROPERTY()
- USpineSkeletonDataAsset * Skeleton = nullptr;
- UPROPERTY()
- FString AssetName;
- UPROPERTY()
- FString AssetPath;
- UPROPERTY()
- FString PackagePath;
- };
- void UPAndBEditorUtilityWidget::CreateSpineBlueprint()
- {
- // Assign stuff that was selected
- IContentBrowserSingleton& ContentBrowser = FModuleManager::LoadModuleChecked<FContentBrowserModule>("ContentBrowser").Get();
- static TArray <FAssetData> SelectedAssets;
- ContentBrowser.GetSelectedAssets(SelectedAssets);
- if (SelectedAssets.Num < 2) return;
- FString AssetName = FString("NameNotFound");
- FString AssetPath = FString("../../../Poppy and Buddy/Content/");
- FString PackagePath = FString("/Game/Poppy and Buddy/SpineActors");
- USpineSkeletonDataAsset * SpineSkeleton = nullptr;
- USpineAtlasAsset * SpineAtlas = nullptr;
- TMap <FString, FSpineFilePair> FilePair;
- TArray <FString> Pairs;
- for (FAssetData Data : SelectedAssets) {
- ESpineFilePairType Type;
- if (Data.GetClass() == USpineSkeletonDataAsset::StaticClass()) {
- SpineSkeleton = (USpineSkeletonDataAsset *)Data.GetAsset();
- Type = ESpineFilePairType::FP_Skeleton;
- }
- else if (Data.GetClass() == USpineAtlasAsset::StaticClass()) {
- SpineAtlas = (USpineAtlasAsset *)Data.GetAsset();
- Type = ESpineFilePairType::FP_Atlas;
- }
- else continue;
- FString Left, Right;
- Data.AssetName.ToString().Split(TEXT("-"), &Left, &Right, ESearchCase::IgnoreCase, ESearchDir::FromEnd);
- //AssetName = Left + FString(".") + Left + FString("-spine");
- AssetName = Left + FString("-spine");
- Data.PackageName.ToString().Split(TEXT("/"), &Left, &Right, ESearchCase::IgnoreCase, ESearchDir::FromEnd);
- AssetPath = Left + FString("/");
- PackagePath = Data.PackageName.ToString() + FString(TEXT("-spine"));
- if (!FilePair.Find(AssetName)) {
- FilePair.Add(AssetName, FSpineFilePair());
- Pairs.Add(AssetName);
- }
- if (Type == ESpineFilePairType::FP_Atlas)
- FilePair.Find(AssetName)->Atlas = SpineAtlas;
- if (Type == ESpineFilePairType::FP_Skeleton)
- FilePair.Find(AssetName)->Skeleton = SpineSkeleton;
- FilePair.Find(AssetName)->AssetName = AssetName;
- FilePair.Find(AssetName)->AssetPath = AssetPath;
- FilePair.Find(AssetName)->PackagePath = PackagePath;
- //UE_LOG(LogTemp, Warning, TEXT("[Package] "));
- //UE_LOG(LogTemp, Warning, TEXT("[Package] AssetName: %s"), *Data.AssetName.ToString());
- //UE_LOG(LogTemp, Warning, TEXT("[Package] GetExportTextName: %s"), *Data.GetExportTextName());
- //UE_LOG(LogTemp, Warning, TEXT("[Package] GetFullName: %s"), *Data.GetFullName());
- //UE_LOG(LogTemp, Warning, TEXT("[Package] PackageName: %s"), *Data.PackageName.ToString());
- //UE_LOG(LogTemp, Warning, TEXT("[Package] ObjectPath: %s"), *Data.ObjectPath.ToString());
- //UE_LOG(LogTemp, Warning, TEXT("[Package] PackagePath: %s"), *Data.PackagePath.ToString());
- //UE_LOG(LogTemp, Warning, TEXT("[Package] "));
- }
- //UE_LOG(LogTemp, Warning, TEXT("[Package] AssetName: %s"), *AssetName);
- //UE_LOG(LogTemp, Warning, TEXT("[Package] AssetPath: %s"), *AssetPath);
- //UE_LOG(LogTemp, Warning, TEXT("[Package] PackagePath: %s"), *PackagePath);
- for (FString AssetName : Pairs) {
- FString AssetPath = FilePair.Find(AssetName)->AssetPath;
- FString PackagePath = FilePair.Find(AssetName)->PackagePath;
- UPackage * Package = CreatePackage(nullptr, *PackagePath);
- UBlueprint * Blueprint = FKismetEditorUtilities::CreateBlueprint(ASpineActor::StaticClass(), Package, *AssetName, BPTYPE_Normal, UBlueprint::StaticClass(), UBlueprintGeneratedClass::StaticClass(), TEXT("AssetTypeActions"));
- ASpineActor * CDO = GetBlueprintCDO<ASpineActor>(Blueprint);
- if (IsValid(CDO)) {
- CDO->SpineSkeletonAnimation->SkeletonData = FilePair.Find(AssetName)->Skeleton;
- CDO->SpineSkeletonAnimation->Atlas = FilePair.Find(AssetName)->Atlas;
- FBlueprintEditorUtils::MarkBlueprintAsStructurallyModified(Blueprint);
- }
- FAssetRegistryModule::AssetCreated(Blueprint);
- Blueprint->MarkPackageDirty();
- FString FilePath = FString::Printf(TEXT("%s%s%s"), *AssetPath, *AssetName, *FPackageName::GetAssetPackageExtension());
- // bool bSuccess = UPackage::SavePackage(Package, Blueprint, EObjectFlags::RF_Public | EObjectFlags::RF_Standalone, *FilePath);
- UE_LOG(LogTemp, Warning, TEXT("[Package] Created SpineActor asset: %s"), *AssetName);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement