protected override void UpdateInternal(GameTime time) { var turretRotation = BasicHelpers.NormalizeAngle(TankHelper.ConstrainTurretRotation( null, null, Components["turret"].Rotation + Rotation, InputState.LookDirection, 1.5f * (float)time.ElapsedGameTime.TotalSeconds ) - Rotation); //Network optimization - check if turret rotation changed without accounting for object rotation var uncorrected = BasicHelpers.NormalizeAngle(TankHelper.ConstrainTurretRotation( null, null, _uncorrectedRot, InputState.LookDirection, 1.5f * (float)time.ElapsedGameTime.TotalSeconds )); _uncorrectedRot = uncorrected; ComponentGroups["turret"].Rotation = turretRotation; if (Authoritative && MathHelper.Distance(_lastStateChangeRotation, uncorrected) > 0.05) { RaiseStateChangeEvent(a => a.Write(turretRotation)); _lastStateChangeRotation = uncorrected; } Animations["death_explosion"].Mask = ColorMask; base.UpdateInternal(time); }