UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
StateTargets.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
8#include "Containers/Array.h"
9#include "CoreMinimal.h"
14#include "Math/Transform.h"
15#include "Templates/Casts.h"
16#include "Templates/Function.h"
17#include "Templates/UniquePtr.h"
19#include "UObject/Object.h"
21#include "UObject/Package.h"
26
27#include "StateTargets.generated.h"
28
29
33UCLASS(MinimalAPI)
35{
37public:
38 virtual void BeginUpdate() final
39 {
40 }
41
42 virtual void EndUpdate() final
43 {
44 }
45
46};
47
48
49
54UCLASS(MinimalAPI)
56{
58public:
59 virtual void BeginUpdate()
60 {
61 if (BeginUpdateFunction)
62 {
63 BeginUpdateFunction();
64 }
65 }
66
67 virtual void EndUpdate()
68 {
69 if (EndUpdateFunction)
70 {
71 EndUpdateFunction();
72 }
73 }
74
75 TUniqueFunction<void(void)> BeginUpdateFunction = TUniqueFunction<void(void)>();
76 TUniqueFunction<void(void)> EndUpdateFunction = TUniqueFunction<void(void)>();
77};
78
79
80
85UCLASS(MinimalAPI)
87{
89public:
90 virtual void BeginUpdate()
91 {
92 if (TransactionManager)
93 {
94 TransactionManager->BeginUndoTransaction(TransactionDescription);
95 }
96 if (ModifyObject.IsValid())
97 {
98 ModifyObject->Modify();
99 }
100 }
101
102 virtual void EndUpdate()
103 {
104 if (TransactionManager)
105 {
106 TransactionManager->EndUndoTransaction();
107 }
108 }
109
110
115
120
124 UPROPERTY()
126
127public:
136 const FText& DescriptionIn,
139 {
141 NewTarget->ModifyObject = ModifyObjectIn;
142 NewTarget->TransactionDescription = DescriptionIn;
143
144 // have to explicitly configure this because we only have IToolContextTransactionProvider pointer
145 NewTarget->TransactionManager.SetInterface(TransactionManagerIn);
146 NewTarget->TransactionManager.SetObject(CastChecked<UObject>(TransactionManagerIn));
147
148 return NewTarget;
149 }
150};
151
152
153
154
155
156
157
166UCLASS(MinimalAPI)
168{
170public:
171 virtual void BeginUpdate()
172 {
173 if (TargetComponent.IsValid())
174 {
175 if (TransactionManager)
176 {
177 TransactionManager->BeginUndoTransaction(ChangeDescription);
178 }
179
180 InitialTransform = TargetComponent->GetComponentTransform();
181
182 for (TUniquePtr<IToolCommandChangeSource>& Source : DependentChangeSources)
183 {
184 Source->BeginChange();
185 }
186
187 for (IToolCommandChangeSource* Source : ExternalDependentChangeSources)
188 {
189 Source->BeginChange();
190 }
191 }
192 }
193
194 virtual void EndUpdate()
195 {
196 if (TargetComponent.IsValid())
197 {
198 FinalTransform = TargetComponent->GetComponentTransform();
199
200 if (TransactionManager)
201 {
203 = MakeUnique<FComponentWorldTransformChange>(InitialTransform, FinalTransform);
204 TransactionManager->EmitObjectChange(TargetComponent.Get(), MoveTemp(TransformChange), ChangeDescription);
205
206 for (TUniquePtr<IToolCommandChangeSource>& Source : DependentChangeSources)
207 {
208 TUniquePtr<FToolCommandChange> Change = Source->EndChange();
209 if (Change)
210 {
211 UObject* Target = Source->GetChangeTarget();
212 TransactionManager->EmitObjectChange(Target, MoveTemp(Change), Source->GetChangeDescription());
213 }
214 }
215
216 for (IToolCommandChangeSource* Source : ExternalDependentChangeSources)
217 {
218 TUniquePtr<FToolCommandChange> Change = Source->EndChange();
219 if (Change)
220 {
221 UObject* Target = Source->GetChangeTarget();
222 TransactionManager->EmitObjectChange(Target, MoveTemp(Change), Source->GetChangeDescription());
223 }
224 }
225
226 TransactionManager->EndUndoTransaction();
227 }
228 }
229 }
230
231
236
241
245 UPROPERTY()
247
249 FTransform InitialTransform;
251 FTransform FinalTransform;
252
253
259
263 TArray<IToolCommandChangeSource*> ExternalDependentChangeSources;
264
265public:
266
274 USceneComponent* TargetComponentIn,
275 const FText& DescriptionIn,
278 {
280 NewTarget->TargetComponent = TargetComponentIn;
281 NewTarget->ChangeDescription = DescriptionIn;
282
283 // have to explicitly configure this because we only have IToolContextTransactionProvider pointer
284 NewTarget->TransactionManager.SetInterface(TransactionManagerIn);
285 NewTarget->TransactionManager.SetObject(CastChecked<UObject>(TransactionManagerIn));
286
287 return NewTarget;
288 }
289
290
291};
292
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UPackage * GetTransientPackage()
Definition Obj.cpp:5819
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UCLASS(...)
Definition ObjectMacros.h:776
void Construct(const FArguments &InArgs)
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition Text.h:385
Definition GizmoInterfaces.h:272
Definition InteractiveToolChange.h:68
Definition InteractiveToolChange.h:39
Definition Array.h:670
Definition ScriptInterface.h:139
Definition FunctionFwd.h:19
Definition UniquePtr.h:107
Definition StateTargets.h:56
virtual void BeginUpdate()
Definition StateTargets.h:59
virtual void EndUpdate()
Definition StateTargets.h:67
Definition StateTargets.h:35
virtual void EndUpdate() final
Definition StateTargets.h:42
virtual void BeginUpdate() final
Definition StateTargets.h:38
Definition StateTargets.h:87
TWeakObjectPtr< UObject > ModifyObject
Definition StateTargets.h:114
virtual void BeginUpdate()
Definition StateTargets.h:90
FText TransactionDescription
Definition StateTargets.h:119
virtual void EndUpdate()
Definition StateTargets.h:102
Definition StateTargets.h:168
FText ChangeDescription
Definition StateTargets.h:240
virtual void EndUpdate()
Definition StateTargets.h:194
virtual void BeginUpdate()
Definition StateTargets.h:171
TWeakObjectPtr< USceneComponent > TargetComponent
Definition StateTargets.h:235
Definition Object.h:95
Definition WeakObjectPtrTemplates.h:25