UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
OverridableManager.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "UObject/Object.h"
10
11// TODO: Internal headers should not be included
13
14
15#include "OverridableManager.generated.h"
16
17/*
18 *************************************************************************************
19 * Overridable serialization is experimental, not supported and use at your own risk *
20 *************************************************************************************
21 */
22
23#if WITH_EDITORONLY_DATA
24
29{
30 bool IsDefault() const
31 {
32 return !OverriddenProperties.IsValid();
33 }
34
35 TSharedPtr<FOverriddenPropertySet> OverriddenProperties;
36};
37
38#endif // WITH_EDITORONLY_DATA
39
40UENUM()
42{
43 NoOverrides, // no on this object and any of its instanced subobjects
44 HasOverrides, // has overrides in the object properties
45 AllOverridden, // all properties are overridden for this object and its subobjects
46 SubObjectsHasOverrides, // at least one of its subobjects has overrides
47 Added, // This object was added
48};
49
51
52/*
53 *************************************************************************************
54 * Overridable serialization is experimental, not supported and use at your own risk *
55 *************************************************************************************
56 */
59 : protected FUObjectAnnotationSparse<FOverriddenPropertyAnnotation, true/*bAutoRemove*/>
60#endif // WITH_EDITORONLY_DATA
61{
62public:
66 {
67 checkf(OverridableManager, TEXT("Expected the overridable manager to be created."))
68 return *OverridableManager;
69 }
70
75 {
76 return OverridableManager;
77 }
78
81 COREUOBJECT_API static void Create();
82
88
93
99
106
112
117
122 template<
123 typename InputType
124 UE_REQUIRES(std::is_convertible_v<InputType, TNotNull<const UObject*>> || std::is_convertible_v<InputType, TNotNull<UObject*>>)
125 >
127 {
128 // Use a template because the compiler cannot discern which method to use if UObject* is passed (both TNotNulls accept UObject*).
129 if constexpr (std::is_convertible_v<InputType, TNotNull<UObject*>>)
130 {
132 }
133 else
134 {
136 }
137 }
138
147 COREUOBJECT_API FOverriddenPropertySet* RestoreOverrideOperation(TNotNull<UObject*> Object, EOverriddenPropertyOperation Operation, const bool bNeedsSubobjectTemplateInstantiation, const bool bDontClearOverrides = false);
148
155
165 const FPropertyVisitorPath& Path = FPropertyVisitorPath(), bool* bOutInheritedState = nullptr);
166
171
176
182
187
194
204
212
220
231
237
248
259
269
279
289
301
302
305
306protected:
308
310
311#if WITH_EDITORONLY_DATA
315#else
317#endif // WITH_EDITORONLY_DATA
318
325};
326
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define WITH_EDITORONLY_DATA
Definition CoreMiscDefines.h:24
#define TEXT(x)
Definition Platform.h:1272
#define UE_FORCEINLINE_HINT
Definition Platform.h:723
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
T TNotNull
Definition NotNull.h:307
#define UENUM(...)
Definition ObjectMacros.h:749
EOverriddenState
Definition OverridableManager.h:42
EPropertyNotificationType
Definition OverriddenPropertySet.h:408
EOverriddenPropertyOperation
Definition OverriddenPropertySet.h:179
#define UE_REQUIRES(...)
Definition Requires.h:86
if(Failed) console_printf("Failed.\n")
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition UnrealType.h:6738
Definition OverridableManager.h:61
COREUOBJECT_API void PreOverrideProperty(TNotNull< UObject * > Object, const FPropertyVisitorPath &PropertyPath, const EPropertyChangeType::Type ChangeType=EPropertyChangeType::Unspecified)
Definition OverridableManager.cpp:332
FUObjectAnnotationSparseBool NeedsSubobjectTemplateInstantiation
Definition OverridableManager.h:316
EOverriddenPropertyOperation GetOverriddenPropertyOperation(TNotNull< UObject * > Object, const FPropertyVisitorPath &PropertyPath, bool *bOutInheritedOperation=nullptr)
Definition OverridableManager.h:227
static COREUOBJECT_API FOverridableManager * OverridableManager
Definition OverridableManager.h:309
COREUOBJECT_API void SerializeOverriddenProperties(TNotNull< UObject * > Object, FStructuredArchive::FRecord ObjectRecord)
Definition OverridableManager.cpp:407
void HandleObjectsReInstantiated(const TMap< UObject *, UObject * > &OldToNewInstanceMap)
Definition OverridableManager.cpp:446
bool ClearOverriddenProperty(TNotNull< UObject * > Object, const FPropertyVisitorPath &PropertyPath)
Definition OverridableManager.h:200
COREUOBJECT_API void ClearOverrides(TNotNull< UObject * > Object)
Definition OverridableManager.cpp:367
void PreOverridePropertyChain(UObject *Object, const FEditPropertyChain &PropertyChain)
Definition OverridableManager.h:265
COREUOBJECT_API bool IsEnabled(TNotNull< const UObject * > Object)
Definition OverridableManager.cpp:25
COREUOBJECT_API FOverriddenPropertySet * RestoreOverrideOperation(TNotNull< UObject * > Object, EOverriddenPropertyOperation Operation, const bool bNeedsSubobjectTemplateInstantiation, const bool bDontClearOverrides=false)
Definition OverridableManager.cpp:117
COREUOBJECT_API void DisableInstancedSubObject(TNotNull< const UObject * > Object, TNotNull< UObject * > InstancedSubObject)
Definition OverridableManager.cpp:60
COREUOBJECT_API void PropagateClearOverridesToInstancedSubObjects(TNotNull< UObject * > Object)
Definition OverridableManager.cpp:388
COREUOBJECT_API FOverriddenPropertySet * GetOverriddenPropertiesInternal(TNotNull< UObject * > Object)
Definition OverridableManager.cpp:98
void PreOverrideProperty(UObject *Object, const FPropertyChangedChainEvent &PropertyChainEvent)
Definition OverridableManager.h:275
COREUOBJECT_API void OverrideAllObjectProperties(TNotNull< UObject * > Object)
Definition OverridableManager.cpp:300
COREUOBJECT_API EOverriddenState GetOverriddenState(TNotNull< UObject * > Object, TFunction< bool(TNotNull< const FProperty * >)> ConsiderPropertyForOverriddenState=TFunction< bool(TNotNull< const FProperty * >)>(), const FPropertyVisitorPath &Path=FPropertyVisitorPath(), bool *bOutInheritedState=nullptr)
Definition OverridableManager.cpp:168
UE_FORCEINLINE_HINT EOverriddenPropertyOperation GetOverriddenPropertyOperation(TNotNull< UObject * > Object, const FPropertyChangedEvent &PropertyEvent, const FEditPropertyChain &PropertyChain, bool *bOutInheritedOperation=nullptr)
Definition OverridableManager.h:297
auto GetOverriddenProperties(InputType &&Object)
Definition OverridableManager.h:126
FOverridableManager()
Definition OverridableManager.cpp:436
COREUOBJECT_API void ClearInstancedSubObjectOverrides(TNotNull< const UObject * > Object, TNotNull< UObject * > InstancedSubObject)
Definition OverridableManager.cpp:378
void HandleDeadObjectReferences(const TSet< UClass * > &DeadClasses, const TSet< UObject * > &ActiveInstances, const TSet< UObject * > &TemplateInstances)
Definition OverridableManager.cpp:460
COREUOBJECT_API bool NeedSubObjectTemplateInstantiation(TNotNull< const UObject * > Object)
Definition OverridableManager.cpp:85
void OverrideProperty(TNotNull< UObject * > Object, const FPropertyChangedChainEvent &PropertyEvent)
Definition OverridableManager.h:244
COREUOBJECT_API void NotifyPropertyChange(const EPropertyNotificationType Notification, TNotNull< UObject * > Object, FPropertyVisitorPath::Iterator PropertyIterator, const EPropertyChangeType::Type ChangeType)
Definition OverridableManager.cpp:346
COREUOBJECT_API void InheritEnabledFrom(TNotNull< UObject * > Object, const UObject *DefaultData)
Definition OverridableManager.cpp:71
friend FOverriddenPropertySet
Definition OverridableManager.h:319
static COREUOBJECT_API void Create()
Definition OverridableManager.cpp:17
static FOverridableManager & Get()
Definition OverridableManager.h:65
COREUOBJECT_API void OverrideProperty(TNotNull< UObject * > Object, const FPropertyVisitorPath &PropertyPath)
Definition OverridableManager.cpp:311
bool ClearOverriddenProperty(TNotNull< UObject * > Object, const FPropertyChangedEvent &PropertyEvent, const FEditPropertyChain &PropertyChain)
Definition OverridableManager.h:255
static FOverridableManager * TryGet()
Definition OverridableManager.h:74
void PostOverrideProperty(UObject *Object, const FPropertyChangedChainEvent &PropertyChainEvent)
Definition OverridableManager.h:285
COREUOBJECT_API void RestoreOverrideState(TNotNull< const UObject * > OldObject, TNotNull< UObject * > NewObject)
Definition OverridableManager.cpp:157
COREUOBJECT_API void PostOverrideProperty(TNotNull< UObject * > Object, const FPropertyVisitorPath &PropertyPath, const EPropertyChangeType::Type ChangeType)
Definition OverridableManager.cpp:339
Definition StructuredArchiveSlots.h:144
Definition UObjectAnnotation.h:619
Definition UObjectAnnotation.h:33
Definition PropertyPath.Build.cs:6
Definition AndroidPlatformMisc.h:14
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition Object.h:95
const Type Unspecified
Definition UnrealType.h:6838
uint32 Type
Definition UnrealType.h:6835
Definition OverriddenPropertySet.h:421
Definition UnrealType.h:7001
Definition UnrealType.h:6865
Definition PropertyVisitor.h:97
TArray< FPropertyVisitorInfo >::TConstIterator Iterator
Definition PropertyVisitor.h:198