private IEnumerator SendTransformCoroutine() { while (true) { yield return(new WaitForSeconds(SendTransformFrequency)); // si no se esta arrastrando, no hacemos nada if (!_isDragging) { continue; } _currentTransformModel.PositionX = transform.localPosition.x; _currentTransformModel.PositionY = transform.localPosition.y; _currentTransformModel.PositionZ = transform.localPosition.z; // si la diferencia entre la posicion actual y anterior esta dentro de la tolerancia, consideramos que // no es un cambio sustancial, por tanto no continuamos if (_currentTransformModel.IsSameTransform(_lastTransformModel, TransformTolerance)) { continue; } #if UNITY_UWP // enviamos a SignalR la nueva posicion actual HubManager.Instance.SendTransform(_currentTransformModel); #endif _currentTransformModel.Index++; _lastTransformModel = _currentTransformModel.Clone() as TransformModel; } }
private void HubManagerOnSendTransform(object sender, TransformModel transformModel) { if (transformModel.Name != _currentTransformModel.Name || transformModel.Index <= _currentTransformModel.Index) { return; } _cubeTransformModelQueue.Enqueue(transformModel); }
private void Awake() { _cubeTransformModelQueue = new Queue <TransformModel>(); _currentTransformModel = new TransformModel() { Name = name, Index = 0, PositionX = transform.localPosition.x, PositionY = transform.localPosition.y, PositionZ = transform.localPosition.z, }; }
private IEnumerator UpdateTransformCoroutine() { while (true) { yield return(new WaitForSeconds(UpdateTransformFrequency)); // si no hay elementos en la cola, no hacemos nada if (!_cubeTransformModelQueue.Any()) { continue; } var cubeTransformModel = _cubeTransformModelQueue.Dequeue(); transform.localPosition = new Vector3(cubeTransformModel.PositionX, cubeTransformModel.PositionY, cubeTransformModel.PositionZ); _lastTransformModel = _currentTransformModel; _currentTransformModel = cubeTransformModel; } }
public bool IsSameTransform(TransformModel otherTransformModel, float tolerance) { if (otherTransformModel == null) { return(false); } if (Math.Abs(PositionX - otherTransformModel.PositionX) > tolerance) { return(false); } if (Math.Abs(PositionY - otherTransformModel.PositionY) > tolerance) { return(false); } if (Math.Abs(PositionZ - otherTransformModel.PositionZ) > tolerance) { return(false); } return(true); }
public async Task SendTransform(TransformModel transformModel) { await _hubProxy.Invoke(SendTransformMethodName, transformModel); }