// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Containers/UnrealString.h" #include "CoreMinimal.h" #include "CoreTypes.h" #include "Misc/AssertionMacros.h" #include "Misc/InlineValue.h" #include "Templates/Decay.h" #include "Templates/EnableIf.h" #include "Templates/PointerIsConvertibleFromTo.h" #include "Templates/UnrealTemplate.h" #include "Templates/UnrealTypeTraits.h" #include "UObject/Class.h" #include "UObject/ObjectMacros.h" #include "MovieSceneSequenceInstanceData.generated.h" class FArchive; /** * Abstract base class that defines instance data for sub sequences */ USTRUCT() struct FMovieSceneSequenceInstanceData { GENERATED_BODY() /** * Virtual destruction */ virtual ~FMovieSceneSequenceInstanceData(){} /** * Access the UStruct type of this data for serialization purposes */ UScriptStruct& GetScriptStruct() const { return GetScriptStructImpl(); } private: /** * Implemented in derived types to retrieve the type of this struct */ virtual UScriptStruct& GetScriptStructImpl() const { check(false); return *StaticStruct(); } }; /** */ USTRUCT() struct FMovieSceneSequenceInstanceDataPtr #if CPP : TInlineValue #endif { GENERATED_BODY() /** * Default construction to an empty container */ FMovieSceneSequenceInstanceDataPtr() {} /** * Construction from any FMovieSceneSequenceInstanceData derivative */ template< typename T, typename = typename TEnableIf::Type, FMovieSceneSequenceInstanceData>::Value>::Type > FMovieSceneSequenceInstanceDataPtr(T&& In) : TInlineValue(Forward(In)) { typedef typename TDecay::Type ClientType; static_assert(!std::is_same_v, "Direct usage of FMovieSceneSequenceInstanceData is prohibited."); #if WITH_EDITOR && DO_CHECK const UStruct* ClientStruct = ClientType::StaticStruct(); checkf(ClientStruct == &In.GetScriptStruct() && ClientStruct != FMovieSceneSequenceInstanceData::StaticStruct(), TEXT("%s type does not correctly override GetScriptStructImpl. Track will not serialize correctly."), *ClientStruct->GetName()); #endif } /** Copy construction/assignment */ MOVIESCENE_API FMovieSceneSequenceInstanceDataPtr(const FMovieSceneSequenceInstanceDataPtr& RHS); MOVIESCENE_API FMovieSceneSequenceInstanceDataPtr& operator=(const FMovieSceneSequenceInstanceDataPtr& RHS); /** Templates are moveable */ FMovieSceneSequenceInstanceDataPtr(FMovieSceneSequenceInstanceDataPtr&&) = default; FMovieSceneSequenceInstanceDataPtr& operator=(FMovieSceneSequenceInstanceDataPtr&&) = default; /** Serialize the template */ MOVIESCENE_API bool Serialize(FArchive& Ar); }; template<> struct TStructOpsTypeTraits : public TStructOpsTypeTraitsBase2 { enum { WithSerializer = true, WithCopy = true }; };