UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ActorDescContainerSubsystem.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
8#include "ActorDescContainerSubsystem.generated.h"
9
10#define UE_API ENGINE_API
11
12UCLASS(MinimalAPI)
14{
16
18
19public:
21#if WITH_EDITOR
22 : ContainerManager(this)
23#endif
24 {}
25
26 // Only create in editor
27 bool ShouldCreateSubsystem(UObject* Outer) const override
28 {
29#if WITH_EDITOR
30 return true;
31#else
32 return false;
33#endif
34 }
35
36#if WITH_EDITOR
38 ENGINE_API static UActorDescContainerSubsystem& GetChecked();
39
40 virtual void Initialize(FSubsystemCollectionBase& Collection) override;
41 virtual void Deinitialize() override;
42
44
47
50
51 template <class ContainerType = UActorDescContainer>
52 ContainerType* RegisterContainer(const typename UActorDescContainer::FInitializeParams& InitParams) { return ContainerManager.RegisterContainer<ContainerType>(InitParams); }
53 UActorDescContainer* GetActorDescContainer(const FString& InContainerName) { return ContainerManager.GetActorDescContainer(InContainerName); }
54 const UActorDescContainer* GetActorDescContainer(const FString& InContainerName) const { return ContainerManager.GetActorDescContainer(InContainerName); }
57 FBox GetContainerBounds(const FString& ContainerName, bool bIsEditorBounds = false) const { return ContainerManager.GetContainerBounds(ContainerName, bIsEditorBounds); }
58 void UpdateContainerBounds(const FString& ContainerName) { ContainerManager.UpdateContainerBounds(ContainerName); }
60 void NotifyContainerUpdated(FName ContainerPackage)
61 {
62 ContainerManager.UpdateContainerBoundsFromPackage(ContainerPackage);
63 OnContainerUpdated.Broadcast(ContainerPackage);
64 }
66 {
68 }
69#endif
70
71 //~ Begin UObject Interface
72#if WITH_EDITOR
73 ENGINE_API static void AddReferencedObjects(UObject* InThis, FReferenceCollector& Collector);
74#endif
75 //~ End UObject Interface
76
77private:
78#if WITH_EDITOR
81
83 {
85 : Owner(InOwner)
86 {}
87
89 : Owner(nullptr)
90 {}
91
93
95 {
97 : Container(nullptr)
98 , RefCount(0)
99 , Bounds(ForceInit)
101 {}
102
103 UE_API void AddReferencedObjects(FReferenceCollector& Collector);
104 UE_API void UpdateBounds();
105
107 uint32 RefCount;
108 FBox Bounds;
110 };
111
112 UE_API void AddReferencedObjects(FReferenceCollector& Collector);
113
114 public:
115 template <class ContainerType>
116 ContainerType* RegisterContainer(const typename UActorDescContainer::FInitializeParams& InitParams)
117 {
118 check(Owner);
119 FRegisteredContainer* RegisteredContainer = &RegisteredContainers.FindOrAdd(InitParams.ContainerName);
121 check(RegisteredContainer->RefCount == 0 || ContainerType::StaticClass() == ActorDescContainer->GetClass());
122
123 if (RegisteredContainer->RefCount++ == 0)
124 {
127
128 // This will potentially invalidate RegisteredContainer due to RegisteredContainers reallocation
129 ActorDescContainer->Initialize(InitParams);
130
131 check(InitParams.ContainerName == ActorDescContainer->GetContainerName());
132 RegisteredContainer = &RegisteredContainers.FindChecked(ActorDescContainer->GetContainerName());
133 RegisteredContainer->UpdateBounds();
134 }
135
137 }
138
140 {
142 RegisteredContainer.RefCount++;
143 }
144
145 UActorDescContainer* GetActorDescContainer(const FString& InContainerName)
146 {
148 return RegisteredContainer ? RegisteredContainer->Container : nullptr;
149 }
150
151 const UActorDescContainer* GetActorDescContainer(const FString& InContainerName) const
152 {
153 return const_cast<FContainerManager*>(this)->GetActorDescContainer(InContainerName);
154 }
155
157
158 UE_API FBox GetContainerBounds(const FString& ContainerName, bool bIsEditorBounds = false) const;
159 UE_API void UpdateContainerBounds(const FString& ContainerName);
160 UE_API void UpdateContainerBoundsFromPackage(FName ContainerPackage);
161
163
164 private:
167 };
168
170
172#endif
173};
174
175#undef UE_API
#define check(expr)
Definition AssertionMacros.h:314
@ ForceInit
Definition CoreMiscDefines.h:155
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_EVENT_OneParam(OwningType, EventName, Param1Type)
Definition DelegateCombinations.h:51
#define DECLARE_EVENT_TwoParams(OwningType, EventName, Param1Type, Param2Type)
Definition DelegateCombinations.h:60
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
@ RF_Transient
Don't save object.
Definition ObjectMacros.h:565
#define UCLASS(...)
Definition ObjectMacros.h:776
#define UE_API
Definition SColorGradingComponentViewer.h:12
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition NameTypes.h:617
Definition UObjectGlobals.h:2492
Definition SubsystemCollection.h:15
Definition UnrealString.h.inl:34
Definition ActorDescContainerSubsystem.h:14
bool ShouldCreateSubsystem(UObject *Outer) const override
Definition ActorDescContainerSubsystem.h:27
Definition ActorDescContainer.h:40
Definition EngineSubsystem.h:22
Definition Object.h:95
Definition AssetData.h:162
Definition ObjectPtr.h:488