91 lines
2.9 KiB
C
91 lines
2.9 KiB
C
|
|
#pragma once
|
||
|
|
|
||
|
|
#include "CoreMinimal.h"
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @struct FMPCookEdlArc
|
||
|
|
* @brief Represents a single EDL dependency arc (e.g., "Create X before Serialize Y") reported by a worker.
|
||
|
|
* Object paths are stored as FNames for efficiency.
|
||
|
|
*/
|
||
|
|
struct FCookEdlArc
|
||
|
|
{
|
||
|
|
FName DepObjectPath;
|
||
|
|
bool bDepIsSerialize = false;
|
||
|
|
FName ExportObjectPath;
|
||
|
|
bool bExportIsSerialize = false;
|
||
|
|
friend FArchive& operator<<(FArchive& Ar, FCookEdlArc& Arc)
|
||
|
|
{
|
||
|
|
Ar << Arc.DepObjectPath;
|
||
|
|
Ar << Arc.bDepIsSerialize;
|
||
|
|
Ar << Arc.ExportObjectPath;
|
||
|
|
Ar << Arc.bExportIsSerialize;
|
||
|
|
return Ar;
|
||
|
|
}
|
||
|
|
};
|
||
|
|
struct FCookEDImport
|
||
|
|
{
|
||
|
|
FName Path;
|
||
|
|
FName Package;
|
||
|
|
friend FArchive& operator<<(FArchive& Ar, FCookEDImport& Arc)
|
||
|
|
{
|
||
|
|
Ar << Arc.Path;
|
||
|
|
Ar << Arc.Package;
|
||
|
|
return Ar;
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @struct FMPCookPackageSideEffects
|
||
|
|
* @brief Encapsulates all the "side-effect" data generated when a worker cooks a single package.
|
||
|
|
* This data is sent back to the Director along with the standard cook result.
|
||
|
|
*/
|
||
|
|
struct FCookSideEffects
|
||
|
|
{
|
||
|
|
// --- EDL (Event-Driven Loader) Data ---
|
||
|
|
// Objects that were AddImport()ed by this package.
|
||
|
|
TArray<FCookEDImport> EdlImports;
|
||
|
|
|
||
|
|
// Objects that were AddExport()ed from this package.
|
||
|
|
TArray<FName> EdlExports;
|
||
|
|
|
||
|
|
// Dependency arcs that were AddArc()ed for objects in this package.
|
||
|
|
TArray<FCookEdlArc> EdlArcs;
|
||
|
|
void Reset()
|
||
|
|
{
|
||
|
|
EdlImports.Reset();
|
||
|
|
EdlExports.Reset();
|
||
|
|
EdlArcs.Reset();
|
||
|
|
}
|
||
|
|
friend FArchive& operator<<(FArchive& Ar, FCookSideEffects& Data)
|
||
|
|
{
|
||
|
|
Ar << Data.EdlImports;
|
||
|
|
Ar << Data.EdlExports;
|
||
|
|
Ar << Data.EdlArcs;
|
||
|
|
return Ar;
|
||
|
|
}
|
||
|
|
};
|
||
|
|
/**
|
||
|
|
* Interface for collecting side effects during SavePackage (Worker side)
|
||
|
|
* and applying them to the global state (Director side).
|
||
|
|
*/
|
||
|
|
class ICookSideEffectCollector
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
typedef ICookSideEffectCollector* (*FFactoryFunction)();
|
||
|
|
|
||
|
|
virtual ~ICookSideEffectCollector() {}
|
||
|
|
// --- Worker Side Implementation ---
|
||
|
|
virtual void AddExport(UObject* Export) = 0;
|
||
|
|
virtual void AddImport(UObject* Import, UPackage* ImportingPackage) = 0;
|
||
|
|
virtual void AddArc(UObject* DepObject, bool bDepIsSerialize, UObject* Export, bool bExportIsSerialize) = 0;
|
||
|
|
|
||
|
|
// --- Static Global Access (For Hooks in SavePackage) ---
|
||
|
|
static COREUOBJECT_API void SetFactory(FFactoryFunction InFactory);
|
||
|
|
static COREUOBJECT_API void SetInstance(ICookSideEffectCollector* InInstance);
|
||
|
|
static COREUOBJECT_API ICookSideEffectCollector* GetInstance();
|
||
|
|
|
||
|
|
// --- Director Side Routing (Applying remote data) ---
|
||
|
|
// These static methods act as a bridge to FEDLCookChecker and AssetRegistry
|
||
|
|
static COREUOBJECT_API void HandleCookSideEffects(FCookSideEffects& CookPackageSideEffects);
|
||
|
|
};
|