MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / OnUpdate

Method OnUpdate

Source/Engine/Networking/Components/NetworkTransform.cpp:72–147  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

70}
71
72void NetworkTransform::OnUpdate()
73{
74 // TODO: cache role in Deserialize to improve cpu perf
75 const NetworkObjectRole role = NetworkReplicator::GetObjectRole(this);
76 if (role == NetworkObjectRole::OwnedAuthoritative)
77 return; // Ignore itself
78 if (Mode == ReplicationModes::Default)
79 {
80 // Transform replicated in Deserialize
81 }
82 else if (role == NetworkObjectRole::ReplicatedSimulated && Mode == ReplicationModes::Prediction)
83 {
84 // Compute delta of the actor transformation simulated locally
85 const Transform thisFrameTransform = GetActor() ? GetActor()->GetTransform() : Transform::Identity;
86 Transform delta = thisFrameTransform - _lastFrameTransform;
87
88 if (!delta.IsIdentity())
89 {
90 // Move to the next input sequence number
91 _currentSequenceIndex++;
92
93 // Add delta to buffer to re-apply after receiving authoritative transform value
94 if (!_bufferHasDeltas)
95 {
96 _buffer.Clear();
97 _bufferHasDeltas = true;
98 }
99 delta.Orientation = thisFrameTransform.Orientation; // Store absolute orientation value to prevent jittering when blending rotation deltas
100 _buffer.Add({ 0.0f, _currentSequenceIndex, delta, });
101
102 // Inform server about sequence number change (add offset to lead before server data)
103 SetSequenceIndex(_currentSequenceIndex - 1);
104 }
105 _lastFrameTransform = thisFrameTransform;
106 }
107 else
108 {
109 float lag = 0.0f;
110 // TODO: use lag from last used NetworkStream context
111 if (NetworkManager::Peer && NetworkManager::Peer->NetworkDriver)
112 {
113 // Use lag from the RTT between server and the client
114 const auto stats = NetworkManager::Peer->NetworkDriver->GetStats();
115 lag = stats.RTT / 2000.0f;
116 }
117 else
118 {
119 // Default lag is based on the network manager update rate
120 const float fps = NetworkManager::NetworkFPS;
121 lag = 1.0f / fps;
122 }
123
124 // Find the two authoritative positions surrounding the rendering timestamp
125 const float now = Time::Update.UnscaledTime.GetTotalSeconds();
126 const float gameTime = now - lag;
127
128 // Drop older positions
129 while (_buffer.Count() >= 2 && _buffer[1].Timestamp <= gameTime)

Callers

nothing calls this directly

Calls 9

GetTransformMethod · 0.80
IsIdentityMethod · 0.80
RemoveAtKeepOrderMethod · 0.80
LerpFunction · 0.50
SetFunction · 0.50
ClearMethod · 0.45
AddMethod · 0.45
GetStatsMethod · 0.45
CountMethod · 0.45

Tested by

no test coverage detected