Files
UnrealEngine/Engine/Source/Runtime/Datasmith/DirectLink/Public/DirectLinkDeltaConsumer.h
2025-05-18 13:04:45 +08:00

83 lines
1.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "DirectLinkCommon.h"
namespace DirectLink
{
class FElementSnapshot;
class IDeltaProducer
{
public:
virtual ~IDeltaProducer() = default;
virtual void OnOpenHaveList(const FSceneIdentifier& HaveSceneId, bool bKeepPreviousContent, int32 SyncCycle) = 0;
virtual void OnHaveElement(FSceneGraphId NodeId, FElementHash HaveHash) = 0;
virtual void OnCloseHaveList() = 0;
};
class IDeltaConsumer
{
public:
virtual ~IDeltaConsumer() = default;
virtual void SetDeltaProducer(IDeltaProducer* Producer) = 0;
// On SetupScene message, the receiver is expected to send it's HaveList
struct FSetupSceneArg
{
FSceneIdentifier SceneId;
bool bExpectHaveList;
int32 SyncCycle;
};
virtual void SetupScene(FSetupSceneArg& SetupSceneArg) = 0;
// signal beginning of a delta
struct FOpenDeltaArg
{
bool bBasedOnNewScene; // start from a fresh scene. (expect only new content)
uint32 ElementCountHint = 0;
};
virtual void OpenDelta(FOpenDeltaArg& OpenDeltaArg) = 0;
struct FSetElementArg
{
TSharedPtr<FElementSnapshot> Snapshot;
int32 ElementIndexHint = -1;
};
virtual void OnSetElement(FSetElementArg& SetElementArg) = 0;
struct FRemoveElementsArg
{
TArray<FSceneGraphId> Elements;
};
virtual void RemoveElements(FRemoveElementsArg& RemoveElementsArg) = 0;
struct FCloseDeltaArg
{
bool bCancelled = false; // if an error occured and the delta is unusable
};
virtual void OnCloseDelta(FCloseDeltaArg& CloseDeltaArg) = 0;
};
class ISceneReceiver
{
public:
virtual ~ISceneReceiver() = default;
virtual void FinalSnapshot(const class FSceneSnapshot& SceneSnapshot) {};
};
} // namespace DirectLink