Files
UnrealEngine/Engine/Plugins/Mutable/Source/CustomizableObjectEditor/Private/MuCOE/CustomizableObjectCookPackageSplitter.h
2025-05-18 13:04:45 +08:00

55 lines
2.1 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CookPackageSplitter.h"
#include "UObject/StrongObjectPtr.h"
#include "MuCO/CustomizableObject.h"
/** Handles splitting the streamable Data constants into their own packages */
class FCustomizableObjectCookPackageSplitter : public ICookPackageSplitter
{
public:
/** ICookPackageSplitter interface */
static bool ShouldSplit(UObject* SplitData);
static FString GetSplitterDebugName() { return TEXT("FCustomizableObjectCookPackageSplitter"); }
static bool RequiresCachedCookedPlatformDataBeforeSplit() { return true; }
virtual TArray<ICookPackageSplitter::FGeneratedPackage> GetGenerateList(
const UPackage* OwnerPackage,
const UObject* OwnerObject) override;
virtual bool PreSaveGeneratorPackage(FPopulateContext& PopulateContext) override;
virtual void PostSaveGeneratorPackage(FPopulateContext& PopulateContext) override;
virtual bool PopulateGeneratedPackage(FPopulateContext& PopulateContext) override;
virtual void PostSaveGeneratedPackage(FPopulateContext& PopulateContext) override;
/** Do teardown actions after all packages have saved, or when the cook is cancelled. Always called before destruction. */
virtual void Teardown(ETeardown Status) override;
/**
* If true, this splitter forces the Generator package objects it needs to remain referenced, and the cooker
* should expect them to still be in memory after a garbage collect so long as the splitter is alive.
*/
virtual bool UseInternalReferenceToAvoidGarbageCollect() override { return true; }
/**
* Return capability setting which indicates which splitter functions acting on the parent generator package must
* be called on the splitter before splitter functions acting on the generated packages can be called.
*/
virtual EGeneratedRequiresGenerator DoesGeneratedRequireGenerator() override
{
return EGeneratedRequiresGenerator::Save;
}
private:
TArray<FString> SavedContainerNames;
TArray<FString> SavedExtensionContainerNames;
// Keep a strong reference to the CO to protect it from garbage collector.
TStrongObjectPtr<const UObject> StrongObject;
};