Skip to content

Commit c308b74

Browse files
committed
Removed legacy code from NetworkedTransform and added Max Extrapolation Steps
1 parent bf0e71b commit c308b74

File tree

1 file changed

+12
-23
lines changed

1 file changed

+12
-23
lines changed

MLAPI/MonoBehaviours/Prototyping/NetworkedTransform.cs

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ internal class ClientSendInfo
5757
/// Enables extrapolation
5858
/// </summary>
5959
public bool ExtrapolatePosition = false;
60+
/// <summary>
61+
/// The maximum amount of expected send rates to extrapolate over when awaiting new packets.
62+
/// A higher value will result in continued extrapolation after an object has stopped moving
63+
/// </summary>
64+
public float MaxSendsToExtrapolate = 5;
6065

6166
private float lerpT;
6267
private Vector3 lerpStartPos;
@@ -67,6 +72,8 @@ internal class ClientSendInfo
6772
private float lastSendTime;
6873
private Vector3 lastSentPos;
6974
private Quaternion lastSentRot;
75+
76+
private float lastRecieveTime;
7077

7178
/// <summary>
7279
/// Enables range based send rate
@@ -169,20 +176,15 @@ private void Update()
169176
lerpT = 1f;
170177
}
171178

172-
if (isServer || !EnableRange || !AssumeSyncedSends)
173-
lerpT += Time.unscaledDeltaTime / (1f / FixedSendsPerSecond);
174-
else
175-
{
176-
Vector3 myPos = NetworkingManager.singleton.ConnectedClients[NetworkingManager.singleton.LocalClientId].PlayerObject.transform.position;
177-
lerpT += Time.unscaledDeltaTime / GetTimeForLerp(transform.position, myPos);
178-
}
179+
float sendDelay = (isServer || !EnableRange || !AssumeSyncedSends) ? (1f / FixedSendsPerSecond) : GetTimeForLerp(transform.position, NetworkingManager.singleton.ConnectedClients[NetworkingManager.singleton.LocalClientId].PlayerObject.transform.position);
180+
lerpT += Time.time / sendDelay;
179181

180-
if (ExtrapolatePosition)
182+
if (ExtrapolatePosition && Time.time - lastRecieveTime < sendDelay * MaxSendsToExtrapolate)
181183
transform.position = Vector3.LerpUnclamped(lerpStartPos, lerpEndPos, lerpT);
182184
else
183185
transform.position = Vector3.Lerp(lerpStartPos, lerpEndPos, lerpT);
184186

185-
if (ExtrapolatePosition)
187+
if (ExtrapolatePosition && Time.time - lastRecieveTime < sendDelay * MaxSendsToExtrapolate)
186188
transform.rotation = Quaternion.SlerpUnclamped(lerpStartRot, lerpEndRot, lerpT);
187189
else
188190
transform.rotation = Quaternion.Slerp(lerpStartRot, lerpEndRot, lerpT);
@@ -209,6 +211,7 @@ private void ApplyTransform(uint clientId, Stream stream)
209211

210212
if (InterpolatePosition)
211213
{
214+
lastRecieveTime = Time.time;
212215
lerpStartPos = transform.position;
213216
lerpStartRot = transform.rotation;
214217
lerpEndPos = new Vector3(xPos, yPos, zPos);
@@ -245,20 +248,6 @@ private void SubmitTransform(uint clientId, Stream stream)
245248
return;
246249
}
247250

248-
if (InterpolateServer)
249-
{
250-
lerpStartPos = transform.position;
251-
lerpStartRot = transform.rotation;
252-
lerpEndPos = new Vector3(xPos, yPos, zPos);
253-
lerpEndRot = Quaternion.Euler(xRot, yRot, zRot);
254-
lerpT = 0;
255-
}
256-
else
257-
{
258-
transform.position = new Vector3(xPos, yPos, zPos);
259-
transform.rotation = Quaternion.Euler(new Vector3(xRot, yRot, zRot));
260-
}
261-
262251
using (PooledBitStream writeStream = PooledBitStream.Get())
263252
{
264253
using (PooledBitWriter writer = PooledBitWriter.Get(writeStream))

0 commit comments

Comments
 (0)