@@ -17,7 +17,6 @@ public class NetworkedTransform : NetworkedBehaviour
1717 {
1818 internal class ClientSendInfo
1919 {
20- public ulong clientId ;
2120 public float lastSent ;
2221 public Vector3 ? lastMissedPosition ;
2322 public Quaternion ? lastMissedRotation ;
@@ -154,13 +153,17 @@ private void Awake()
154153
155154 private void Update ( )
156155 {
157- if ( IsOwner ) {
158- if ( NetworkingManager . Singleton . NetworkTime - lastSendTime >= ( 1f / FixedSendsPerSecond ) && ( Vector3 . Distance ( transform . position , lastSentPos ) > MinMeters || Quaternion . Angle ( transform . rotation , lastSentRot ) > MinDegrees ) ) {
156+ if ( IsOwner )
157+ {
158+ if ( NetworkingManager . Singleton . NetworkTime - lastSendTime >= ( 1f / FixedSendsPerSecond ) && ( Vector3 . Distance ( transform . position , lastSentPos ) > MinMeters || Quaternion . Angle ( transform . rotation , lastSentRot ) > MinDegrees ) )
159+ {
159160 lastSendTime = NetworkingManager . Singleton . NetworkTime ;
160161 lastSentPos = transform . position ;
161162 lastSentRot = transform . rotation ;
162- using ( PooledBitStream stream = PooledBitStream . Get ( ) ) {
163- using ( PooledBitWriter writer = PooledBitWriter . Get ( stream ) ) {
163+ using ( PooledBitStream stream = PooledBitStream . Get ( ) )
164+ {
165+ using ( PooledBitWriter writer = PooledBitWriter . Get ( stream ) )
166+ {
164167 writer . WriteSinglePacked ( transform . position . x ) ;
165168 writer . WriteSinglePacked ( transform . position . y ) ;
166169 writer . WriteSinglePacked ( transform . position . z ) ;
@@ -180,8 +183,10 @@ private void Update()
180183 }
181184 else {
182185 //If we are server and interpolation is turned on for server OR we are not server and interpolation is turned on
183- if ( ( IsServer && InterpolateServer && InterpolatePosition ) || ( ! IsServer && InterpolatePosition ) ) {
184- if ( Vector3 . Distance ( transform . position , lerpEndPos ) > SnapDistance ) {
186+ if ( ( IsServer && InterpolateServer && InterpolatePosition ) || ( ! IsServer && InterpolatePosition ) )
187+ {
188+ if ( Vector3 . Distance ( transform . position , lerpEndPos ) > SnapDistance )
189+ {
185190 //Snap, set T to 1 (100% of the lerp)
186191 lerpT = 1f ;
187192 }
@@ -210,8 +215,9 @@ private void ApplyTransform(ulong clientId, Stream stream)
210215 {
211216 if ( ! enabled )
212217 return ;
213- using ( PooledBitReader reader = PooledBitReader . Get ( stream ) ) {
214218
219+ using ( PooledBitReader reader = PooledBitReader . Get ( stream ) )
220+ {
215221 float xPos = reader . ReadSinglePacked ( ) ;
216222 float yPos = reader . ReadSinglePacked ( ) ;
217223 float zPos = reader . ReadSinglePacked ( ) ;
@@ -229,15 +235,17 @@ private void ApplyTransformInternal(Vector3 position, Quaternion rotation)
229235 if ( ! enabled )
230236 return ;
231237
232- if ( InterpolatePosition && ( ! IsServer || InterpolateServer ) ) {
238+ if ( InterpolatePosition && ( ! IsServer || InterpolateServer ) )
239+ {
233240 lastReceiveTime = Time . unscaledTime ;
234241 lerpStartPos = transform . position ;
235242 lerpStartRot = transform . rotation ;
236243 lerpEndPos = position ;
237244 lerpEndRot = rotation ;
238245 lerpT = 0 ;
239246 }
240- else {
247+ else
248+ {
241249 transform . position = position ;
242250 transform . rotation = rotation ;
243251 }
@@ -248,7 +256,9 @@ private void SubmitTransform(ulong clientId, Stream stream)
248256 {
249257 if ( ! enabled )
250258 return ;
251- using ( PooledBitReader reader = PooledBitReader . Get ( stream ) ) {
259+
260+ using ( PooledBitReader reader = PooledBitReader . Get ( stream ) )
261+ {
252262 float xPos = reader . ReadSinglePacked ( ) ;
253263 float yPos = reader . ReadSinglePacked ( ) ;
254264 float zPos = reader . ReadSinglePacked ( ) ;
@@ -257,19 +267,23 @@ private void SubmitTransform(ulong clientId, Stream stream)
257267 float yRot = reader . ReadSinglePacked ( ) ;
258268 float zRot = reader . ReadSinglePacked ( ) ;
259269
260- if ( IsMoveValidDelegate != null && ! IsMoveValidDelegate ( clientId , lerpEndPos , new Vector3 ( xPos , yPos , zPos ) ) ) {
270+ if ( IsMoveValidDelegate != null && ! IsMoveValidDelegate ( clientId , lerpEndPos , new Vector3 ( xPos , yPos , zPos ) ) )
271+ {
261272 //Invalid move!
262273 //TODO: Add rubber band (just a message telling them to go back)
263274 return ;
264275 }
265276
266- if ( ! IsClient ) {
277+ if ( ! IsClient )
278+ {
267279 // Dedicated server
268280 ApplyTransformInternal ( new Vector3 ( xPos , yPos , zPos ) , Quaternion . Euler ( xRot , yRot , zRot ) ) ;
269281 }
270282
271- using ( PooledBitStream writeStream = PooledBitStream . Get ( ) ) {
272- using ( PooledBitWriter writer = PooledBitWriter . Get ( writeStream ) ) {
283+ using ( PooledBitStream writeStream = PooledBitStream . Get ( ) )
284+ {
285+ using ( PooledBitWriter writer = PooledBitWriter . Get ( writeStream ) )
286+ {
273287 writer . WriteSinglePacked ( xPos ) ;
274288 writer . WriteSinglePacked ( yPos ) ;
275289 writer . WriteSinglePacked ( zPos ) ;
@@ -278,11 +292,14 @@ private void SubmitTransform(ulong clientId, Stream stream)
278292 writer . WriteSinglePacked ( yRot ) ;
279293 writer . WriteSinglePacked ( zRot ) ;
280294
281- if ( EnableRange ) {
282- for ( int i = 0 ; i < NetworkingManager . Singleton . ConnectedClientsList . Count ; i ++ ) {
283- if ( ! clientSendInfo . ContainsKey ( NetworkingManager . Singleton . ConnectedClientsList [ i ] . ClientId ) ) {
284- clientSendInfo . Add ( NetworkingManager . Singleton . ConnectedClientsList [ i ] . ClientId , new ClientSendInfo ( ) {
285- clientId = NetworkingManager . Singleton . ConnectedClientsList [ i ] . ClientId ,
295+ if ( EnableRange )
296+ {
297+ for ( int i = 0 ; i < NetworkingManager . Singleton . ConnectedClientsList . Count ; i ++ )
298+ {
299+ if ( ! clientSendInfo . ContainsKey ( NetworkingManager . Singleton . ConnectedClientsList [ i ] . ClientId ) )
300+ {
301+ clientSendInfo . Add ( NetworkingManager . Singleton . ConnectedClientsList [ i ] . ClientId , new ClientSendInfo ( )
302+ {
286303 lastMissedPosition = null ,
287304 lastMissedRotation = null ,
288305 lastSent = 0
@@ -293,20 +310,23 @@ private void SubmitTransform(ulong clientId, Stream stream)
293310 Vector3 ? receiverPosition = NetworkingManager . Singleton . ConnectedClientsList [ i ] . PlayerObject == null ? null : new Vector3 ? ( NetworkingManager . Singleton . ConnectedClientsList [ i ] . PlayerObject . transform . position ) ;
294311 Vector3 ? senderPosition = NetworkingManager . Singleton . ConnectedClients [ OwnerClientId ] . PlayerObject == null ? null : new Vector3 ? ( NetworkingManager . Singleton . ConnectedClients [ OwnerClientId ] . PlayerObject . transform . position ) ;
295312
296- if ( ( receiverPosition == null || senderPosition == null && NetworkingManager . Singleton . NetworkTime - info . lastSent >= ( 1f / FixedSendsPerSecond ) ) || NetworkingManager . Singleton . NetworkTime - info . lastSent >= GetTimeForLerp ( receiverPosition . Value , senderPosition . Value ) ) {
313+ if ( ( receiverPosition == null || senderPosition == null && NetworkingManager . Singleton . NetworkTime - info . lastSent >= ( 1f / FixedSendsPerSecond ) ) || NetworkingManager . Singleton . NetworkTime - info . lastSent >= GetTimeForLerp ( receiverPosition . Value , senderPosition . Value ) )
314+ {
297315 info . lastSent = NetworkingManager . Singleton . NetworkTime ;
298316 info . lastMissedPosition = null ;
299317 info . lastMissedRotation = null ;
300318
301319 InvokeClientRpcOnClientPerformance ( applyTransformDelegate , NetworkingManager . Singleton . ConnectedClientsList [ i ] . ClientId , writeStream , string . IsNullOrEmpty ( Channel ) ? "MLAPI_DEFAULT_MESSAGE" : Channel ) ;
302320 }
303- else {
321+ else
322+ {
304323 info . lastMissedPosition = new Vector3 ( xPos , yPos , zPos ) ;
305324 info . lastMissedRotation = Quaternion . Euler ( xRot , yRot , zRot ) ;
306325 }
307326 }
308327 }
309- else {
328+ else
329+ {
310330 InvokeClientRpcOnEveryoneExceptPerformance ( applyTransformDelegate , OwnerClientId , writeStream , string . IsNullOrEmpty ( Channel ) ? "MLAPI_DEFAULT_MESSAGE" : Channel ) ;
311331 }
312332
@@ -317,10 +337,12 @@ private void SubmitTransform(ulong clientId, Stream stream)
317337
318338 private void CheckForMissedSends ( )
319339 {
320- for ( int i = 0 ; i < NetworkingManager . Singleton . ConnectedClientsList . Count ; i ++ ) {
321- if ( ! clientSendInfo . ContainsKey ( NetworkingManager . Singleton . ConnectedClientsList [ i ] . ClientId ) ) {
322- clientSendInfo . Add ( NetworkingManager . Singleton . ConnectedClientsList [ i ] . ClientId , new ClientSendInfo ( ) {
323- clientId = NetworkingManager . Singleton . ConnectedClientsList [ i ] . ClientId ,
340+ for ( int i = 0 ; i < NetworkingManager . Singleton . ConnectedClientsList . Count ; i ++ )
341+ {
342+ if ( ! clientSendInfo . ContainsKey ( NetworkingManager . Singleton . ConnectedClientsList [ i ] . ClientId ) )
343+ {
344+ clientSendInfo . Add ( NetworkingManager . Singleton . ConnectedClientsList [ i ] . ClientId , new ClientSendInfo ( )
345+ {
324346 lastMissedPosition = null ,
325347 lastMissedRotation = null ,
326348 lastSent = 0
@@ -330,28 +352,33 @@ private void CheckForMissedSends()
330352 Vector3 ? receiverPosition = NetworkingManager . Singleton . ConnectedClientsList [ i ] . PlayerObject == null ? null : new Vector3 ? ( NetworkingManager . Singleton . ConnectedClientsList [ i ] . PlayerObject . transform . position ) ;
331353 Vector3 ? senderPosition = NetworkingManager . Singleton . ConnectedClients [ OwnerClientId ] . PlayerObject == null ? null : new Vector3 ? ( NetworkingManager . Singleton . ConnectedClients [ OwnerClientId ] . PlayerObject . transform . position ) ;
332354
333- if ( ( receiverPosition == null || senderPosition == null && NetworkingManager . Singleton . NetworkTime - info . lastSent >= ( 1f / FixedSendsPerSecond ) ) || NetworkingManager . Singleton . NetworkTime - info . lastSent >= GetTimeForLerp ( receiverPosition . Value , senderPosition . Value ) ) {
355+ if ( ( receiverPosition == null || senderPosition == null && NetworkingManager . Singleton . NetworkTime - info . lastSent >= ( 1f / FixedSendsPerSecond ) ) || NetworkingManager . Singleton . NetworkTime - info . lastSent >= GetTimeForLerp ( receiverPosition . Value , senderPosition . Value ) )
356+ {
334357 Vector3 ? pos = NetworkingManager . Singleton . ConnectedClients [ OwnerClientId ] . PlayerObject == null ? null : new Vector3 ? ( NetworkingManager . Singleton . ConnectedClients [ OwnerClientId ] . PlayerObject . transform . position ) ;
335358 Vector3 ? rot = NetworkingManager . Singleton . ConnectedClients [ OwnerClientId ] . PlayerObject == null ? null : new Vector3 ? ( NetworkingManager . Singleton . ConnectedClients [ OwnerClientId ] . PlayerObject . transform . rotation . eulerAngles ) ;
336359
337- if ( pos != null && rot != null ) {
360+ if ( info . lastMissedPosition != null && info . lastMissedRotation != null )
361+ {
338362 info . lastSent = NetworkingManager . Singleton . NetworkTime ;
339- info . lastMissedPosition = null ;
340- info . lastMissedRotation = null ;
341363
342- using ( PooledBitStream stream = PooledBitStream . Get ( ) ) {
343- using ( PooledBitWriter writer = PooledBitWriter . Get ( stream ) ) {
344- writer . WriteSinglePacked ( pos . Value . x ) ;
345- writer . WriteSinglePacked ( pos . Value . y ) ;
346- writer . WriteSinglePacked ( pos . Value . z ) ;
364+ using ( PooledBitStream stream = PooledBitStream . Get ( ) )
365+ {
366+ using ( PooledBitWriter writer = PooledBitWriter . Get ( stream ) )
367+ {
368+ writer . WriteSinglePacked ( info . lastMissedPosition . Value . x ) ;
369+ writer . WriteSinglePacked ( info . lastMissedPosition . Value . y ) ;
370+ writer . WriteSinglePacked ( info . lastMissedPosition . Value . z ) ;
347371
348- writer . WriteSinglePacked ( rot . Value . x ) ;
349- writer . WriteSinglePacked ( rot . Value . y ) ;
350- writer . WriteSinglePacked ( rot . Value . z ) ;
372+ writer . WriteSinglePacked ( info . lastMissedRotation . Value . x ) ;
373+ writer . WriteSinglePacked ( info . lastMissedRotation . Value . y ) ;
374+ writer . WriteSinglePacked ( info . lastMissedRotation . Value . z ) ;
351375
352376 InvokeClientRpcOnClientPerformance ( applyTransformDelegate , NetworkingManager . Singleton . ConnectedClientsList [ i ] . ClientId , stream , string . IsNullOrEmpty ( Channel ) ? "MLAPI_DEFAULT_MESSAGE" : Channel ) ;
353377 }
354378 }
379+
380+ info . lastMissedPosition = null ;
381+ info . lastMissedRotation = null ;
355382 }
356383 }
357384 }
@@ -364,7 +391,8 @@ private void CheckForMissedSends()
364391 /// <param name="rotation">The rotation to teleport to</param>
365392 public void Teleport ( Vector3 position , Quaternion rotation )
366393 {
367- if ( InterpolateServer && IsServer || IsClient ) {
394+ if ( InterpolateServer && IsServer || IsClient )
395+ {
368396 lerpStartPos = position ;
369397 lerpStartRot = rotation ;
370398 lerpEndPos = position ;
0 commit comments