UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ReplicationConditionals.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
6#include "Containers/Array.h"
7#include "Containers/Map.h"
10
12namespace UE::Net
13{
14 enum class EReplicationCondition : uint32;
15 struct FReplicationProtocol;
16 namespace Private
17 {
18 class FDeltaCompressionBaselineInvalidationTracker;
20 class FNetRefHandleManager;
21 class FReplicationConnections;
22 class FNetObjectGroups;
23 class FReplicationFiltering;
24 class FNetObjectGroups;
25 }
26}
27
28namespace UE::Net::Private
29{
30
41
51{
52public:
54
56
59
62
63 void AddConnection(uint32 ConnectionId);
64 void RemoveConnection(uint32 ConnectionId);
65
66 bool SetConditionConnectionFilter(FInternalNetRefIndex ObjectIndex, EReplicationCondition Condition, uint32 ConnectionId, bool bEnable);
67 bool SetCondition(FInternalNetRefIndex ObjectIndex, EReplicationCondition Condition, bool bEnable);
68 void SetOwningConnection(FInternalNetRefIndex ObjectIndex, uint32 ConnectionId);
69
70 // For property custom conditions only
72 bool SetPropertyCustomCondition(FInternalNetRefIndex ObjectIndex, const void* Owner, uint16 RepIndex, bool bIsActive);
73 bool SetPropertyDynamicCondition(FInternalNetRefIndex ObjectIndex, const void* Owner, uint16 RepIndex, ELifetimeCondition Condition);
74
76
78 void MarkPropertyDirty(FInternalNetRefIndex ObjectIndex, uint16 RepIndex);
79
80 void Update();
81
83 {
84 bool IsUninitialized() const { return ConditionalsMask == 0; }
85 bool IsConditionEnabled(int Condition) const { checkSlow(Condition < 16); return ConditionalsMask & (uint16(1) << unsigned(Condition)); }
86 bool SetConditionEnabled(int Condition, bool bEnabled) { checkSlow(Condition < 16); return ConditionalsMask |= (uint16(bEnabled ? 1 : 0) << unsigned(Condition)); }
87
88 // Each LifetimeCondition is represented in this member via (1U << ELifetimeCondition)
90 };
91
93
96
97private:
98 struct FPerObjectInfo
99 {
100 // Assume there can only be one connection which has the role autonomous connection and all else are simulated
101 uint16 AutonomousConnectionId : 15;
102 uint16 bRepPhysics : 1;
103 };
104
105 struct FPerConnectionInfo
106 {
107 TArray<FConditionalsMask> ObjectConditionals;
108 };
109
110 struct FSubObjectConditionInfo
111 {
112 // This is a more compact storage form of ELifetimeCondition
113 int8 Condition;
114 };
115
116 struct FObjectDynamicConditions
117 {
118 // RepIndex and ELifetimeCondition expressed as int16
119 TMap<uint16, int16> DynamicConditions;
120 };
121
122private:
123 void UpdateAndResetObjectsWithDirtyConditionals();
124
125 FConditionalsMask GetLifetimeConditionals(uint32 ReplicatingConnectionId, FInternalNetRefIndex ParentObjectIndex, bool bInitialState) const;
126
127 FPerObjectInfo* GetPerObjectInfo(FInternalNetRefIndex ObjectIndex);
128 const FPerObjectInfo* GetPerObjectInfo(FInternalNetRefIndex ObjectIndex) const;
129 void ClearPerObjectInfo(FInternalNetRefIndex ObjectIndex);
130 void ClearConnectionInfosForObject(const FNetBitArray& ValidConnections, FInternalNetRefIndex ObjectIndex);
131
133
134 ELifetimeCondition GetDynamicCondition(FInternalNetRefIndex ObjectIndex, uint16 RepIndex) const;
135 void SetDynamicCondition(FInternalNetRefIndex ObjectIndex, uint16 RepIndex, ELifetimeCondition Condition);
136 bool DynamicConditionChangeRequiresBaselineInvalidation(ELifetimeCondition OldCondition, ELifetimeCondition NewCondition) const;
137
138 void MarkRemoteRoleDirty(FInternalNetRefIndex ObjectIndex);
139 uint16 GetRemoteRoleRepIndex(const FReplicationProtocol* Protocol);
140
141 // Invalidates baselines for root object and subobjects with lifetime conditionals.
142 void InvalidateBaselinesForObjectHierarchy(uint32 ObjectIndex, const TConstArrayView<uint32>& ConnectionsToInvalidate);
143
144private:
145 static constexpr uint16 InvalidRepIndex = 65535U;
146
147 const FNetRefHandleManager* NetRefHandleManager = nullptr;
148 const FReplicationFiltering* ReplicationFiltering = nullptr;
149 FReplicationConnections* ReplicationConnections = nullptr;
150 FDeltaCompressionBaselineInvalidationTracker* BaselineInvalidationTracker = nullptr;
151 const FNetObjectGroups* NetObjectGroups = nullptr;
152
153 TArray<FPerObjectInfo> PerObjectInfos;
154 TArray<FPerConnectionInfo> ConnectionInfos;
156 FNetBitArray ObjectsWithDirtyLifetimeConditionals;
157
158 FInternalNetRefIndex MaxInternalNetRefIndex = 0;
159 uint32 MaxConnectionCount = 0;
160 uint16 CachedRemoteRoleRepIndex = InvalidRepIndex;
161};
162
163inline FReplicationConditionals::FPerObjectInfo* FReplicationConditionals::GetPerObjectInfo(FInternalNetRefIndex ObjectIndex)
164{
165 return PerObjectInfos.GetData() + ObjectIndex;
166}
167
168inline const FReplicationConditionals::FPerObjectInfo* FReplicationConditionals::GetPerObjectInfo(FInternalNetRefIndex ObjectIndex) const
169{
170 return PerObjectInfos.GetData() + ObjectIndex;
171}
172
173}
#define checkSlow(expr)
Definition AssertionMacros.h:332
ELifetimeCondition
Definition CoreNetTypes.h:20
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
void Init()
Definition LockFreeList.h:4
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Array.h:670
UE_NODEBUG UE_FORCEINLINE_HINT ElementType * GetData() UE_LIFETIMEBOUND
Definition Array.h:1027
Definition UnrealString.h.inl:34
Definition NetObjectGroupHandle.h:22
Definition DeltaCompressionBaselineInvalidationTracker.h:28
Definition NetObjectGroups.h:52
Definition NetRefHandleManager.h:72
Definition ReplicationConditionals.h:51
TArray< FInternalNetRefIndex, TInlineAllocator< 32 > > FSubObjectsToReplicateArray
Definition ReplicationConditionals.h:94
bool SetConditionConnectionFilter(FInternalNetRefIndex ObjectIndex, EReplicationCondition Condition, uint32 ConnectionId, bool bEnable)
Definition ReplicationConditionals.cpp:119
void OnMaxInternalNetRefIndexIncreased(FInternalNetRefIndex NewMaxInternalIndex)
Definition ReplicationConditionals.cpp:63
void GetSubObjectsToReplicate(uint32 ReplicationConnectionId, FInternalNetRefIndex ParentObjectIndex, FSubObjectsToReplicateArray &OutSubObjectsToReplicate)
Definition ReplicationConditionals.cpp:637
void MarkPropertyDirty(FInternalNetRefIndex ObjectIndex, uint16 RepIndex)
Definition ReplicationConditionals.cpp:972
void Update()
Definition ReplicationConditionals.cpp:557
void OnInternalNetRefIndicesFreed(const TConstArrayView< FInternalNetRefIndex > &FreedIndices)
Definition ReplicationConditionals.cpp:81
void AddConnection(uint32 ConnectionId)
Definition ReplicationConditionals.cpp:178
bool SetCondition(FInternalNetRefIndex ObjectIndex, EReplicationCondition Condition, bool bEnable)
Definition ReplicationConditionals.cpp:192
bool ApplyConditionalsToChangeMask(uint32 ReplicatingConnectionId, bool bIsInitialState, FInternalNetRefIndex ParentObjectIndex, FInternalNetRefIndex ObjectIndex, uint32 *ChangeMaskData, const uint32 *ConditionalChangeMaskData, const FReplicationProtocol *Protocol)
Definition ReplicationConditionals.cpp:649
void RemoveConnection(uint32 ConnectionId)
Definition ReplicationConditionals.cpp:185
bool SetPropertyCustomCondition(FInternalNetRefIndex ObjectIndex, const void *Owner, uint16 RepIndex, bool bIsActive)
Definition ReplicationConditionals.cpp:297
void SetOwningConnection(FInternalNetRefIndex ObjectIndex, uint32 ConnectionId)
Definition ReplicationConditionals.cpp:151
FReplicationConditionals()
Definition ReplicationConditionals.cpp:36
void MarkLifeTimeConditionalsDirtyForObjectsInGroup(FNetObjectGroupHandle GroupHandle)
Definition ReplicationConditionals.cpp:99
bool SetPropertyDynamicCondition(FInternalNetRefIndex ObjectIndex, const void *Owner, uint16 RepIndex, ELifetimeCondition Condition)
Definition ReplicationConditionals.cpp:427
void InitPropertyCustomConditions(FInternalNetRefIndex ObjectIndex)
Definition ReplicationConditionals.cpp:222
Definition ReplicationConnections.h:32
Definition ReplicationFiltering.h:56
Definition OverriddenPropertySet.cpp:45
int
Definition TestServer.py:515
Definition NetworkVersion.cpp:28
uint32 FInternalNetRefIndex
Definition ReplicationStateStorage.h:20
Definition NetworkVersion.cpp:28
EReplicationCondition
Definition ReplicationCondition.h:12
Definition ReplicationProtocol.h:83
Definition ReplicationConditionals.h:32
uint32 MaxConnectionCount
Definition ReplicationConditionals.h:39
FDeltaCompressionBaselineInvalidationTracker * BaselineInvalidationTracker
Definition ReplicationConditionals.h:37
FReplicationConnections * ReplicationConnections
Definition ReplicationConditionals.h:35
FInternalNetRefIndex MaxInternalNetRefIndex
Definition ReplicationConditionals.h:38
const FReplicationFiltering * ReplicationFiltering
Definition ReplicationConditionals.h:34
const FNetObjectGroups * NetObjectGroups
Definition ReplicationConditionals.h:36
const FNetRefHandleManager * NetRefHandleManager
Definition ReplicationConditionals.h:33
bool IsUninitialized() const
Definition ReplicationConditionals.h:84
bool SetConditionEnabled(int Condition, bool bEnabled)
Definition ReplicationConditionals.h:86
bool IsConditionEnabled(int Condition) const
Definition ReplicationConditionals.h:85
uint16 ConditionalsMask
Definition ReplicationConditionals.h:89