@@ -704,21 +704,7 @@ private void ApplyAuthoritativeState()
704
704
// We always apply the interpolated state for any axis we are synchronizing even when the state has no deltas
705
705
// to assure we fully interpolate to our target even after we stop extrapolating 1 tick later.
706
706
var useInterpolatedValue = ! networkState . IsTeleportingNextFrame && Interpolate ;
707
- if ( ! useInterpolatedValue )
708
- {
709
- if ( networkState . HasPositionX ) { adjustedPosition . x = networkState . PositionX ; }
710
- if ( networkState . HasPositionY ) { adjustedPosition . y = networkState . PositionY ; }
711
- if ( networkState . HasPositionZ ) { adjustedPosition . z = networkState . PositionZ ; }
712
-
713
- if ( networkState . HasScaleX ) { adjustedScale . x = networkState . ScaleX ; }
714
- if ( networkState . HasScaleY ) { adjustedScale . y = networkState . ScaleY ; }
715
- if ( networkState . HasScaleZ ) { adjustedScale . z = networkState . ScaleZ ; }
716
-
717
- if ( networkState . HasRotAngleX ) { adjustedRotAngles . x = networkState . RotAngleX ; }
718
- if ( networkState . HasRotAngleY ) { adjustedRotAngles . y = networkState . RotAngleY ; }
719
- if ( networkState . HasRotAngleZ ) { adjustedRotAngles . z = networkState . RotAngleZ ; }
720
- }
721
- else if ( useInterpolatedValue )
707
+ if ( useInterpolatedValue )
722
708
{
723
709
if ( SyncPositionX ) { adjustedPosition . x = m_PositionXInterpolator . GetInterpolatedValue ( ) ; }
724
710
if ( SyncPositionY ) { adjustedPosition . y = m_PositionYInterpolator . GetInterpolatedValue ( ) ; }
@@ -736,6 +722,30 @@ private void ApplyAuthoritativeState()
736
722
if ( SyncRotAngleZ ) { adjustedRotAngles . z = interpolatedEulerAngles . z ; }
737
723
}
738
724
}
725
+ else
726
+ {
727
+ if ( networkState . HasPositionX ) { adjustedPosition . x = networkState . PositionX ; }
728
+ if ( networkState . HasPositionY ) { adjustedPosition . y = networkState . PositionY ; }
729
+ if ( networkState . HasPositionZ ) { adjustedPosition . z = networkState . PositionZ ; }
730
+
731
+ if ( networkState . HasScaleX ) { adjustedScale . x = networkState . ScaleX ; }
732
+ if ( networkState . HasScaleY ) { adjustedScale . y = networkState . ScaleY ; }
733
+ if ( networkState . HasScaleZ ) { adjustedScale . z = networkState . ScaleZ ; }
734
+
735
+ if ( networkState . HasRotAngleX ) { adjustedRotAngles . x = networkState . RotAngleX ; }
736
+ if ( networkState . HasRotAngleY ) { adjustedRotAngles . y = networkState . RotAngleY ; }
737
+ if ( networkState . HasRotAngleZ ) { adjustedRotAngles . z = networkState . RotAngleZ ; }
738
+ }
739
+
740
+ // NOTE: The below conditional checks for applying axial values are required in order to
741
+ // prevent the non-authoritative side from making adjustments when interpolation is off.
742
+
743
+ // TODO: Determine if we want to enforce, frame by frame, the non-authoritative transform values.
744
+ // We would want save the position, rotation, and scale (each individually) after applying each
745
+ // authoritative transform state received. Otherwise, the non-authoritative side could make
746
+ // changes to an axial value (if interpolation is turned off) until authority sends an update for
747
+ // that same axial value. When interpolation is on, the state's values being synchronized are
748
+ // always applied each frame.
739
749
740
750
// Apply the new position if it has changed or we are interpolating and synchronizing position
741
751
if ( networkState . HasPositionChange || ( useInterpolatedValue && SynchronizePosition ) )
0 commit comments