UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MovieSceneEntityIDs.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
7#include "CoreTypes.h"
9#include "Misc/Guid.h"
10#include "Templates/TypeHash.h"
11
12#include <initializer_list>
13
14namespace UE
15{
16namespace MovieScene
17{
18
19class FEntityManager;
20struct FComponentTypeID;
21template<typename T> struct TComponentTypeID;
22
30static constexpr int32 MaximumNumComponentsSupported = 384;
31
33static constexpr int32 ComponentMaskDWORDSize = (MaximumNumComponentsSupported + 31) / 32;
34
37
38// Done as a concrete type so that we can make a debug visualizer for the type.
40{
42
44 : Bits(bValue, InNum)
45 {}
46
47 FComponentMask(std::initializer_list<FComponentTypeID> InComponentTypes)
48 {
50 }
51
53
55
57 {
58 return FComponentMaskIterator(Bits);
59 }
60
62 {
63 return GetTypeHash(Mask.Bits);
64 }
65
66 friend bool operator==(const FComponentMask& A, const FComponentMask& B)
67 {
68 return A.Bits == B.Bits;
69 }
70
72 {
73 return Bits.CompareSetBits(Other.Bits, false);
74 }
75
77 {
78 Bits.CombineWithBitwiseOR(Other.Bits, InFlags);
79 return *this;
80 }
81
83 {
84 Bits.CombineWithBitwiseXOR(Other.Bits, InFlags);
85 return *this;
86 }
87
89 {
90 Bits.CombineWithBitwiseAND(Other.Bits, InFlags);
91 return *this;
92 }
93
95 {
96 FComponentMask Result;
98 return Result;
99 }
100
102 {
103 FComponentMask Result;
104 Result.Bits = TBitArray<FComponentMaskAllocator>::BitwiseOR(A.Bits, B.Bits, InFlags);
105 return Result;
106 }
107
109 {
110 FComponentMask Result;
112 return Result;
113 }
114
116 {
117 FComponentMask Result = A;
118 Result.Bits.BitwiseNOT();
119 return Result;
120 }
121
122 inline void BitwiseNOT()
123 {
124 Bits.BitwiseNOT();
125 }
126
128 bool ContainsAll(const FComponentMask& InComponentMask) const;
129 bool ContainsAny(const FComponentMask& InComponentMask) const;
130
132 void SetAll(std::initializer_list<FComponentTypeID> InComponentTypes);
133 void SetAllLenient(std::initializer_list<FComponentTypeID> InComponentTypes);
134
136
140 FComponentTypeID First() const;
141
142 inline void Reset()
143 {
144 Bits.Reset();
145 }
146
147 inline int32 Num() const
148 {
149 return Bits.Num();
150 }
151
152 inline int32 Find(bool bValue) const
153 {
154 return Bits.Find(bValue);
155 }
156
157 inline int32 NumComponents() const
158 {
159 return Bits.CountSetBits();
160 }
161
162 inline void PadToNum(int32 Num, bool bPadValue)
163 {
164 Bits.PadToNum(Num, bPadValue);
165 }
166
167private:
168
170
171};
172
174{
178
180 {
182 }
183
185 {
186 check( (BitIndex & 0xFFFF0000) == 0 );
188 }
189
190 template<typename T>
192
193 explicit operator bool() const
194 {
195 return Value != INVALID;
196 }
197
199 {
200 return A.Value < B.Value;
201 }
202
204 {
205 return A.Value == B.Value;
206 }
207
209 {
210 return A.Value != B.Value;
211 }
212
214 {
215 return ::GetTypeHash(In.Value);
216 }
217
219 {
220 return Value;
221 }
222
224 {
225 check(A.Value != INVALID && B.Value != INVALID);
226
228 Mask.Set(A);
229 Mask.Set(B);
230 return Mask;
231 }
232
234 {
235 check(B.Value != INVALID);
236 A.Set(B);
237 return A;
238 }
239
240protected:
241
243 : Value(InValue)
244 {}
245
246 static const uint16 INVALID = uint16(-1);
248};
249
251{
253 : Value(INVALID)
254 , PassFlag(false)
255 {}
256
258 : Value(InComponentType ? uint16(InComponentType.BitIndex()) : INVALID)
259 , PassFlag(bInPassFlag)
260 {
261 }
262
263 MOVIESCENE_API bool Passes(const FComponentMask& Type) const;
264
266 {
267 if (Value == INVALID)
268 {
269 return FComponentTypeID();
270 }
271 return FComponentTypeID::FromBitIndex(Value);
272 }
273
274private:
275 static const uint16 INVALID = uint16(-1) >> 1u;
276
277 uint16 Value:15;
278 uint16 PassFlag:1;
279};
280
281template<typename T>
283{
284 typedef T Type;
285
288
290 {
291 check( (BitIndex & 0xFFFF0000) == 0 );
292 return TComponentTypeID(static_cast<uint16>(BitIndex));
293 }
294private:
295
298 {}
299};
300
302{
304 : Value(INVALID)
305 {}
306
307 explicit operator bool() const
308 {
309 return IsValid();
310 }
311
313 {
314 return A.Value == B.Value;
315 }
316
318 {
319 return A.Value != B.Value;
320 }
321
323 {
324 return A.Value < B.Value;
325 }
326
328 {
329 return ::GetTypeHash(In.Value);
330 }
331
333 {
334 return FMovieSceneEntityID((uint16)-2);
335 }
336
338 {
339 check( (Index & 0xFFFF0000) == 0 );
341 }
342
344 {
345 return FMovieSceneEntityID();
346 }
347
349 {
350 return Value;
351 }
352
353 bool IsValid() const
354 {
355 return Value != INVALID;
356 }
357
358private:
359
360 explicit FMovieSceneEntityID(uint16 SpecifiedValue)
361 : Value(SpecifiedValue)
362 {}
363
364 static const uint16 INVALID = uint16(-1);
365
366 uint16 Value;
367};
368
369
371{
373 : HandleGeneration(0)
374 {}
375
376 bool IsEmpty() const
377 {
378 return ID.IsValid() == false;
379 }
380
381 MOVIESCENE_API bool IsValid(const FEntityManager&) const;
382
384 {
385 if (A.ID == B.ID)
386 {
387 return A.HandleGeneration < B.HandleGeneration;
388 }
389 return A.ID < B.ID;
390 }
391
393 {
394 return A.ID == B.ID && A.HandleGeneration == B.HandleGeneration;
395 }
396
398 {
399 return GetTypeHash(In.ID);
400 }
401
403 {
404 return ID;
405 }
406
407private:
408
410 : HandleGeneration(InHandleGeneration), ID(InEntityID)
411 {}
412
413 friend FEntityManager;
414 uint32 HandleGeneration;
415 FMovieSceneEntityID ID;
416};
417
418
420{
421 return Bits[ComponentType.BitIndex()];
422}
423
425{
426 return Bits[ComponentType.BitIndex()];
427}
428
430{
431 return InComponentType && Bits.IsValidIndex(InComponentType.BitIndex()) && Bits[InComponentType.BitIndex()] == true;
432}
433
438
443
445{
447
448 const int32 BitIndex = InComponentType.BitIndex();
449
450 Bits.PadToNum(BitIndex + 1, false);
451 Bits[BitIndex] = true;
452}
453
454inline void FComponentMask::SetAll(std::initializer_list<FComponentTypeID> InComponentTypes)
455{
456 for (FComponentTypeID ComponentType : InComponentTypes)
457 {
458 checkSlow(ComponentType);
459
460 const int32 BitIndex = ComponentType.BitIndex();
461
462 Bits.PadToNum(BitIndex + 1, false);
463 Bits[BitIndex] = true;
464 }
465}
466
467inline void FComponentMask::SetAllLenient(std::initializer_list<FComponentTypeID> InComponentTypes)
468{
469 for (FComponentTypeID ComponentType : InComponentTypes)
470 {
471 if (ComponentType)
472 {
473 const int32 BitIndex = ComponentType.BitIndex();
474
475 Bits.PadToNum(BitIndex + 1, false);
476 Bits[BitIndex] = true;
477 }
478 }
479}
480
482{
484 if (Bits.Num() > InComponentType.BitIndex())
485 {
486 Bits[InComponentType.BitIndex()] = false;
487 }
488}
489
491{
492 const int32 FirstBit = Bits.Find(true);
493 if (FirstBit != INDEX_NONE)
494 {
496 }
498}
499
500template<typename T>
505
506} // namespace MovieScene
507} // namespace UE
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
EBitwiseOperatorFlags
Definition BitArray.h:58
@ INDEX_NONE
Definition CoreMiscDefines.h:150
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
const bool
Definition NetworkReplayStreaming.h:178
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition BitArray.h:189
Definition BitArray.h:260
Definition MovieScene.Build.cs:6
Definition BitArray.h:350
static TBitArray BitwiseOR(const TBitArray< AllocatorA > &A, const TBitArray< AllocatorB > &B, EBitwiseOperatorFlags InFlags)
Definition BitArray.h:1321
static TBitArray BitwiseXOR(const TBitArray< AllocatorA > &A, const TBitArray< AllocatorB > &B, EBitwiseOperatorFlags InFlags)
Definition BitArray.h:1347
static TBitArray BitwiseAND(const TBitArray< AllocatorA > &A, const TBitArray< AllocatorB > &B, EBitwiseOperatorFlags InFlags)
Definition BitArray.h:1290
Definition BitArray.h:1944
Definition ContainerAllocationPolicies.h:1276
Definition MovieSceneEntityManager.h:81
TConstSetBitIterator< FComponentMaskAllocator > FComponentMaskIterator
Definition MovieSceneEntityIDs.h:36
Definition AdvancedWidgetsModule.cpp:13
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition MovieSceneEntityIDs.h:40
FComponentMask & CombineWithBitwiseXOR(const FComponentMask &Other, EBitwiseOperatorFlags InFlags)
Definition MovieSceneEntityIDs.h:82
FBitReference operator[](FComponentTypeID ComponentType)
Definition MovieSceneEntityIDs.h:419
FComponentMask & CombineWithBitwiseAND(const FComponentMask &Other, EBitwiseOperatorFlags InFlags)
Definition MovieSceneEntityIDs.h:88
bool CompareSetBits(const FComponentMask &Other) const
Definition MovieSceneEntityIDs.h:71
static FComponentMask BitwiseOR(const FComponentMask &A, const FComponentMask &B, EBitwiseOperatorFlags InFlags)
Definition MovieSceneEntityIDs.h:101
bool ContainsAll(const FComponentMask &InComponentMask) const
Definition MovieSceneEntityIDs.h:434
void SetAll(std::initializer_list< FComponentTypeID > InComponentTypes)
Definition MovieSceneEntityIDs.h:454
friend uint32 GetTypeHash(const FComponentMask &Mask)
Definition MovieSceneEntityIDs.h:61
void Remove(FComponentTypeID InComponentType)
Definition MovieSceneEntityIDs.h:481
FComponentMask(std::initializer_list< FComponentTypeID > InComponentTypes)
Definition MovieSceneEntityIDs.h:47
FComponentMask(bool bValue, int32 InNum)
Definition MovieSceneEntityIDs.h:43
FComponentMask & CombineWithBitwiseOR(const FComponentMask &Other, EBitwiseOperatorFlags InFlags)
Definition MovieSceneEntityIDs.h:76
friend bool operator==(const FComponentMask &A, const FComponentMask &B)
Definition MovieSceneEntityIDs.h:66
bool ContainsAny(const FComponentMask &InComponentMask) const
Definition MovieSceneEntityIDs.h:439
FComponentTypeID First() const
Definition MovieSceneEntityIDs.h:490
static FComponentMask BitwiseAND(const FComponentMask &A, const FComponentMask &B, EBitwiseOperatorFlags InFlags)
Definition MovieSceneEntityIDs.h:94
bool Contains(FComponentTypeID InComponentType) const
Definition MovieSceneEntityIDs.h:429
static FComponentMask BitwiseXOR(const FComponentMask &A, const FComponentMask &B, EBitwiseOperatorFlags InFlags)
Definition MovieSceneEntityIDs.h:108
int32 Num() const
Definition MovieSceneEntityIDs.h:147
void SetAllLenient(std::initializer_list< FComponentTypeID > InComponentTypes)
Definition MovieSceneEntityIDs.h:467
FComponentMaskIterator Iterate() const
Definition MovieSceneEntityIDs.h:56
int32 NumComponents() const
Definition MovieSceneEntityIDs.h:157
void Set(FComponentTypeID InComponentType)
Definition MovieSceneEntityIDs.h:444
FComponentMask()
Definition MovieSceneEntityIDs.h:41
int32 Find(bool bValue) const
Definition MovieSceneEntityIDs.h:152
void BitwiseNOT()
Definition MovieSceneEntityIDs.h:122
static FComponentMask BitwiseNOT(const FComponentMask &A)
Definition MovieSceneEntityIDs.h:115
void PadToNum(int32 Num, bool bPadValue)
Definition MovieSceneEntityIDs.h:162
void Reset()
Definition MovieSceneEntityIDs.h:142
Definition MovieSceneEntityIDs.h:251
FComponentTypeIDFilter()
Definition MovieSceneEntityIDs.h:252
FComponentTypeID GetComponentType() const
Definition MovieSceneEntityIDs.h:265
FComponentTypeIDFilter(FComponentTypeID InComponentType, bool bInPassFlag)
Definition MovieSceneEntityIDs.h:257
MOVIESCENE_API bool Passes(const FComponentMask &Type) const
Definition MovieSceneEntityIDs.cpp:16
Definition MovieSceneEntityIDs.h:174
static const uint16 INVALID
Definition MovieSceneEntityIDs.h:246
friend FComponentMask & operator|(FComponentMask &A, FComponentTypeID B)
Definition MovieSceneEntityIDs.h:233
FComponentTypeID(uint16 InValue)
Definition MovieSceneEntityIDs.h:242
friend uint32 GetTypeHash(FComponentTypeID In)
Definition MovieSceneEntityIDs.h:213
TComponentTypeID< T > ReinterpretCast() const
Definition MovieSceneEntityIDs.h:501
int32 BitIndex() const
Definition MovieSceneEntityIDs.h:218
friend bool operator==(FComponentTypeID A, FComponentTypeID B)
Definition MovieSceneEntityIDs.h:203
uint16 Value
Definition MovieSceneEntityIDs.h:247
friend bool operator<(FComponentTypeID A, FComponentTypeID B)
Definition MovieSceneEntityIDs.h:198
static FComponentTypeID FromBitIndex(int32 BitIndex)
Definition MovieSceneEntityIDs.h:184
FComponentTypeID()
Definition MovieSceneEntityIDs.h:175
friend bool operator!=(FComponentTypeID A, FComponentTypeID B)
Definition MovieSceneEntityIDs.h:208
friend FComponentMask operator|(FComponentTypeID A, FComponentTypeID B)
Definition MovieSceneEntityIDs.h:223
static FComponentTypeID Invalid()
Definition MovieSceneEntityIDs.h:179
Definition MovieSceneEntityIDs.h:371
bool IsEmpty() const
Definition MovieSceneEntityIDs.h:376
friend uint32 GetTypeHash(FEntityHandle In)
Definition MovieSceneEntityIDs.h:397
FMovieSceneEntityID GetEntityID() const
Definition MovieSceneEntityIDs.h:402
FEntityHandle()
Definition MovieSceneEntityIDs.h:372
friend bool operator==(FEntityHandle A, FEntityHandle B)
Definition MovieSceneEntityIDs.h:392
friend bool operator<(FEntityHandle A, FEntityHandle B)
Definition MovieSceneEntityIDs.h:383
Definition MovieSceneEntityIDs.h:302
FMovieSceneEntityID()
Definition MovieSceneEntityIDs.h:303
bool IsValid() const
Definition MovieSceneEntityIDs.h:353
friend uint32 GetTypeHash(FMovieSceneEntityID In)
Definition MovieSceneEntityIDs.h:327
static FMovieSceneEntityID Invalid()
Definition MovieSceneEntityIDs.h:343
static FMovieSceneEntityID FromIndex(int32 Index)
Definition MovieSceneEntityIDs.h:337
static FMovieSceneEntityID Max()
Definition MovieSceneEntityIDs.h:332
friend bool operator<(FMovieSceneEntityID A, FMovieSceneEntityID B)
Definition MovieSceneEntityIDs.h:322
friend bool operator==(FMovieSceneEntityID A, FMovieSceneEntityID B)
Definition MovieSceneEntityIDs.h:312
int32 AsIndex() const
Definition MovieSceneEntityIDs.h:348
friend bool operator!=(FMovieSceneEntityID A, FMovieSceneEntityID B)
Definition MovieSceneEntityIDs.h:317
Definition MovieSceneEntityIDs.h:283
static TComponentTypeID FromBitIndex(int32 BitIndex)
Definition MovieSceneEntityIDs.h:289
TComponentTypeID()
Definition MovieSceneEntityIDs.h:286
T Type
Definition MovieSceneEntityIDs.h:284