예제 #1
0
        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;
            }
        }
예제 #2
0
 private void HubManagerOnSendTransform(object sender, TransformModel transformModel)
 {
     if (transformModel.Name != _currentTransformModel.Name || transformModel.Index <= _currentTransformModel.Index)
     {
         return;
     }
     _cubeTransformModelQueue.Enqueue(transformModel);
 }
예제 #3
0
 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,
     };
 }
예제 #4
0
        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;
            }
        }
예제 #5
0
        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);
 }