BeardedManStudios.Network.NetworkedMonoBehavior.UnityUpdate C# (CSharp) Метод

UnityUpdate() защищенный Метод

protected UnityUpdate ( ) : void
Результат void
		protected override void UnityUpdate()
		{
			// TODO:  Look into this
			if (this == null)
				return;

			HasSerialized = false;

			base.UnityUpdate();

			if (!NetworkingManager.IsOnline)
				return;

			if (serverIsAuthority && (OwningNetWorker.IsServer || (IsOwner && clientSidePrediction)))
			{
				if (inputRequest != null)
				{
					foreach (KeyCode key in currentKeys)
						inputRequest(key);
				}

				if (mouseRequest != null)
				{
					foreach (int button in mouseIndices)
						mouseRequest(button);
				}
			}

			if ((Properties == null || Properties.Count == 0) &&
				serializePosition == SerializeVector3Properties.None &&
				serializeRotation == SerializeVector3Properties.None &&
				serializeScale == SerializeVector3Properties.None)
			{
				OwnedUpdate();
				return;
			}

			// TODO:  Examine other parts of removal for this
			//if (isPlayer && OwningNetWorker.IsServer && serverTargetPlayer != null)
			//	serverTargetPlayer.UpdatePosition(transform.position);

			if (OwningNetWorker.IsServer && serverTargetPlayer != null)
				serverTargetPlayer.Position = transform.position;

			if ((OwningNetWorker.IsServer && serverIsAuthority) || (!serverIsAuthority && IsOwner))
			{
				if (networkTimeDelay > 0)
				{
					timeDelayCounter += Time.deltaTime;

					if (timeDelayCounter < networkTimeDelay)
					{
						OwnedUpdate();
						return;
					}

					timeDelayCounter = 0.0f;
				}

				if (Properties != null)
				{
					foreach (NetRef<object> obj in Properties)
					{
						if (obj.IsDirty)
						{
							DoSerialize();
							break;
						}
					}
				}

				if (!HasSerialized)
				{
					if ((serializePosition != SerializeVector3Properties.None && transform.position != previousPosition) ||
						(serializeRotation != SerializeVector3Properties.None && transform.rotation != previousRotation) ||
						(serializeScale != SerializeVector3Properties.None && transform.localScale != previousScale))
					{
						DoSerialize();
					}
				}
			}
			else
			{
				//if (newData.Ready)
				//	Deserialize(newData);

				if (clientSidePrediction && IsOwner)
				{
					lock (_authoritativeFrameMutex)
					{
						if (serverIsAuthority)
							TrackFrameHistory();
					}

					if (currentKeys.Count != 0 || mouseIndices.Count != 0)
					{
						// TODO:  If the player is too far from targetPosition then fix it
						OwnedUpdate();
						return;
					}
				}
				else
				{
					if (serializePosition != SerializeVector3Properties.None && transform.position != targetPosition)
					{
						if (!serverIsAuthority || !IsOwner || !clientSidePrediction)
						{
							if (!lerpPosition || skipInterpolation ||
								Vector3.Distance(transform.position, targetPosition) > authoritativeTeleportSyncDistance)
								transform.position = targetPosition;
							else
							{
								transform.position = Vector3.Lerp(transform.position, targetPosition, lerpT);

								if (Vector3.Distance(transform.position, targetPosition) <= lerpStopOffset)
									transform.position = targetPosition;
							}
						}
					}
				}

				if (serializeRotation != SerializeVector3Properties.None && transform.eulerAngles != targetRotation)
				{
					convertedTargetRotation = Quaternion.Euler(targetRotation);

					if (!serverIsAuthority || !IsOwner || !clientSidePrediction || (Quaternion.Angle(transform.rotation, convertedTargetRotation) > authoritativeSyncRotation))
					{
						if (!lerpRotation || skipInterpolation)
							transform.rotation = convertedTargetRotation;
						else
						{
							transform.rotation = Quaternion.Slerp(transform.rotation, convertedTargetRotation, lerpT);

							if (Quaternion.Angle(transform.rotation, convertedTargetRotation) <= lerpAngleStopOffset)
								transform.rotation = convertedTargetRotation;
						}
					}
				}

				if (serializeScale != SerializeVector3Properties.None && transform.localScale != targetScale)
				{
					if (!lerpScale || skipInterpolation)
						transform.localScale = targetScale;
					else
					{
						transform.localScale = Vector3.Lerp(transform.localScale, targetScale, lerpT);

						if (Vector3.Distance(transform.localScale, targetScale) <= lerpStopOffset)
							transform.localScale = targetScale;
					}
				}

				foreach (NetRef<object> obj in Properties)
				{
					if (!obj.Lerping)
						continue;

					UpdateRemoteNetRef(obj);
				}

				foreach (NetRef<object> obj in ManualProperties)
				{
					if (!obj.Lerping)
						continue;

					UpdateRemoteNetRef(obj);
				}
			}

			OwnedUpdate();
		}