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

FinishFrame() приватный Метод

private FinishFrame ( BeardedManStudios.Network.NetWorker owningNetworker, AuthoritativeFrameType type, Vector3 currentValue, byte serverFrame, Vector3 serverValue ) : Vector3
owningNetworker BeardedManStudios.Network.NetWorker
type AuthoritativeFrameType
currentValue Vector3
serverFrame byte
serverValue Vector3
Результат Vector3
			private Vector3 FinishFrame(NetWorker owningNetworker, AuthoritativeFrameType type, Vector3 currentValue, byte serverFrame, Vector3 serverValue)
			{
				bool frameFound = false;
				int iter = 0;
				Vector3 pos = currentValue;
				switch (type)
				{
					case AuthoritativeFrameType.Position:
						if (_posLastFrame != serverFrame)
						{
							_posLastFrame = serverFrame;
							_posTimeStamp = Time.time;
							
							if (_positionFrameHistory.Count > 0)
							{
								for (int i = _positionFrameHistory.Count - 1; i >= 0; --i)
								{
									if (_positionFrameHistory[i].Frame == serverFrame)
									{
										frameFound = true;
										iter = i;
										break;
									}
								}

								if (frameFound)
								{
									_positionFrameHistory.RemoveRange(0, iter);

									_positionFrameHistory[0].FrameActualValue = serverValue;
									_positionFrameHistory[0].FrameValue = Vector3.zero;

									if (_positionFrameHistory.Count > 1)
									{
										_positionFrameHistory[1].FramePrevious = _positionFrameHistory[0].FrameActualValue;
										_positionFrameHistory[1].UpdateDelta();
									}

									pos = serverValue;
									for (int i = 0; i < _positionFrameHistory.Count; ++i)
										pos += _positionFrameHistory[i].FrameValue; //Get the delta distance
								}
							}

							currentValue = pos;
						}
						else
						{
							if ((Time.time - _posTimeStamp) * 1000 > owningNetworker.PreviousServerPing + 100)
							{
								_posTimeStamp = Time.time;
								if (Vector3.Distance(currentValue, serverValue) > 0.1f)
								{
									currentValue = serverValue;
									_positionFrameHistory.Clear();
								}
							}
						}
						break;
					case AuthoritativeFrameType.Rotation:
						if (_rotLastFrame != serverFrame)
						{
							_rotLastFrame = serverFrame;
							_rotTimeStamp = Time.time;

							if (_rotationFrameHistory.Count > 0)
							{
								for (int i = _rotationFrameHistory.Count - 1; i >= 0; --i)
								{
									if (_rotationFrameHistory[i].Frame == serverFrame)
									{
										frameFound = true;
										iter = i;
										break;
									}
								}

								if (frameFound)
								{
									_rotationFrameHistory.RemoveRange(0, iter);

									_rotationFrameHistory[0].FrameActualValue = serverValue;
									_rotationFrameHistory[0].FrameValue = Vector3.zero;

									if (_rotationFrameHistory.Count > 1)
									{
										_rotationFrameHistory[1].FramePrevious = _rotationFrameHistory[0].FrameActualValue;
										_rotationFrameHistory[1].UpdateDelta();
									}

									pos = serverValue;
									for (int i = 0; i < _rotationFrameHistory.Count; ++i)
										pos += _rotationFrameHistory[i].FrameValue; //Get the delta distance
								}
							}

							currentValue = pos;
						}
						else
						{
							if ((Time.time - _rotTimeStamp) * 1000 > owningNetworker.PreviousServerPing + 100)
							{
								_rotTimeStamp = Time.time;
								if (Vector3.Distance(currentValue, serverValue) > 0.1f)
								{
									currentValue = serverValue;
									_rotationFrameHistory.Clear();
								}
							}
						}
						break;
					case AuthoritativeFrameType.Scale:
						if (_scaLastFrame != serverFrame)
						{
							_scaLastFrame = serverFrame;
							_scaTimeStamp = Time.time;

							if (_scaleFrameHistory.Count > 0)
							{
								for (int i = _scaleFrameHistory.Count - 1; i >= 0; --i)
								{
									if (_scaleFrameHistory[i].Frame == serverFrame)
									{
										frameFound = true;
										iter = i;
										break;
									}
								}

								if (frameFound)
								{
									_scaleFrameHistory.RemoveRange(0, iter);

									_scaleFrameHistory[0].FrameActualValue = serverValue;
									_scaleFrameHistory[0].FrameValue = Vector3.zero;

									if (_scaleFrameHistory.Count > 1)
									{
										_scaleFrameHistory[1].FramePrevious = _scaleFrameHistory[0].FrameActualValue;
										_scaleFrameHistory[1].UpdateDelta();
									}

									pos = serverValue;
									for (int i = 0; i < _scaleFrameHistory.Count; ++i)
										pos += _scaleFrameHistory[i].FrameValue; //Get the delta distance
								}
							}

							currentValue = pos;
						}
						else
						{
							if ((Time.time - _scaTimeStamp) * 1000 > owningNetworker.PreviousServerPing + 100)
							{
								_scaTimeStamp = Time.time;
								if (Vector3.Distance(currentValue, serverValue) > 0.1f)
								{
									currentValue = serverValue;
									_scaleFrameHistory.Clear();
								}
							}
						}
						break;
				}

				return currentValue;
			}
NetworkedMonoBehavior.AuthoritativeFrameHistory