Esempio n. 1
0
    /*
     * private void OneHandPinching(int mode)
     * {
     *  GesturePinching gesture;
     *  Vector3 pinchingPos;
     *  Vector3 posMovement;
     *  switch (mode)
     *  {
     *      case 0:
     *          gesture = (GesturePinching)gesturePinchingLH;
     *          pinchingPos = gesture.LastTipPos;
     *          posMovement = gesture.TipMovement;
     *          if (goPinchedLH != null && gesture.CountTime >= pinchingTimeMin)
     *          {
     *              if (goPinchedLH.IsSelected)
     *              {
     *                  goPinchedLH.reColorWorldObj(Color.white);
     *                  goPinchedLH.cancelHighLightDup();
     *                  goPinchedLH.removeSelections();
     *                  goPinchedLH.endSelectState();
     *                  goSelected = null;
     *              }
     *              //goPinchedLH.moveObjectBy(posMovement);
     *              goPinchedLH.moveObjectTo(pinchingPos);
     *              LayerMetaphor lm = (LayerMetaphor)goPinchedLH;
     *              bool inRange = handle.updateLayerExisted(lm);
     *              if (layerMetaphorsActived.Contains(lm))
     *              {
     *                  if (!inRange)
     *                  {
     *                      layerMetaphorsActived.Remove(lm);
     *                      lm.getLayer().hide();
     *                      layerMetaphorsDisActived.Add(lm);
     *                  }
     *                  else
     *                  {
     *                      handle.updateIndex(pinchingPos);
     *                  }
     *              }
     *              else
     *              {
     *                  if (inRange)
     *                  {
     *                      layerMetaphorsActived.Add(lm);
     *                      lm.getLayer().show();
     *                      layerMetaphorsDisActived.Remove(lm);
     *                  }
     *              }
     *              handle.updateObjectsOrder();
     *              handle.updateObjectsPositions(gesture.LastPalmPos);
     *          }
     *          return;
     *      case 1:
     *          gesture = (GesturePinching)gesturePinchingRH;
     *          pinchingPos = gesture.LastTipPos;
     *          posMovement = gesture.TipMovement;
     *          Debug.Log(posMovement);
     *          if (goPinchedRH != null && gesture.CountTime >= pinchingTimeMin)
     *          {
     *              if (goPinchedRH.IsSelected)
     *              {
     *                  goPinchedRH.reColorWorldObj(Color.white);
     *                  goPinchedRH.cancelHighLightDup();
     *                  goPinchedRH.removeSelections();
     *                  goPinchedRH.endSelectState();
     *                  goSelected = null;
     *              }
     *              //goPinchedRH.moveObjectBy(posMovement);
     *              goPinchedRH.moveObjectTo(pinchingPos);
     *              LayerMetaphor lm = (LayerMetaphor)goPinchedRH;
     *              bool inRange = handle.updateLayerExisted(lm);
     *              if (layerMetaphorsActived.Contains(lm))
     *              {
     *                  if (!inRange)
     *                  {
     *                      layerMetaphorsActived.Remove(lm);
     *                      lm.getLayer().hide();
     *                      layerMetaphorsDisActived.Add(lm);
     *                  }
     *                  else
     *                  {
     *                      handle.updateIndex(pinchingPos);
     *                  }
     *              }
     *              else
     *              {
     *                  if (inRange)
     *                  {
     *                      layerMetaphorsActived.Add(lm);
     *                      lm.getLayer().show();
     *                      layerMetaphorsDisActived.Remove(lm);
     *                  }
     *              }
     *              handle.updateObjectsOrder();
     *              handle.updateObjectsPositions(gesture.LastPalmPos);
     *          }
     *          return;
     *  }
     * }*/
    /*
     * private void OneHandTapping(int mode)
     * {
     *  GestureTapping gesture;
     *  Vector3 tappingPos;
     *  Vector3 posMovement;
     *  List<LayerMetaphor> potentialLayers;
     *  List<SelectionMetaphor> potentialSelections;
     *  switch (controlMode)
     *  {
     *      case ControlMode.tapMenu:
     *          switch (mode)
     *          {
     *              case 0:
     *                  gesture = (GestureTapping)gestureTappingLH;
     *                  tappingPos = gesture.LastTipPos;
     *                  posMovement = gesture.TipMovement;
     *                  if (goTappedLH == null)
     *                  {
     *                      potentialLayers = new List<LayerMetaphor>();
     *                      foreach (LayerMetaphor lm in layerMetaphorsActived)
     *                      {
     *                          if (!lm.IsTapped)
     *                          {
     *                              if (lm.checkTapping(tappingPos))
     *                              {
     *                                  potentialLayers.Add(lm);
     *                              }
     *                          }
     *                      }
     *                      if (potentialLayers.Count > 0)
     *                      {
     *                          goTappedLH = potentialLayers[0];
     *                          foreach (LayerMetaphor lm in potentialLayers)
     *                          {
     *                              if (lm.checkDistance(tappingPos) < goTappedLH.checkDistance(tappingPos))
     *                              {
     *                                  goTappedLH = lm;
     *                              }
     *                          }
     *                          goTappedLH.startTap();
     *                          goTappedLH.reScaleWorldObj(1.25f, 1.25f, 1.25f);
     *                      }
     *                  }
     *                  else
     *                  {
     *                      if (goTappedLH.checkTapping(tappingPos))
     *                      {
     *                          //ratate the go
     *                      }
     *                      else
     *                      {
     *                          goTappedLH.endTap();
     *                          goTappedLH.reScaleWorldObj(0.8f, 0.8f, 0.8f);
     *                          goTappedLH = null;
     *                      }
     *                  }
     *                  return;
     *              case 1:
     *                  gesture = (GestureTapping)gestureTappingRH;
     *                  tappingPos = gesture.LastTipPos;
     *                  posMovement = gesture.TipMovement;
     *                  if (goTappedRH != null)
     *                  {
     *                      foreach (SelectionMetaphor sm in goTappedRH.getSelectionObjects())
     *                      {
     *                          if (sm.checkTapping(tappingPos))
     *                          {
     *                              goTappedRH.createSelections(sm.getMetaphorObject().name);
     *                              return;
     *                          }
     *                      }
     *                  }
     *                  if (goTappingRH == null)
     *                  {
     *                      potentialLayers = new List<LayerMetaphor>();
     *                      foreach (LayerMetaphor lm in layerMetaphorsActived)
     *                      {
     *                          if (lm.checkTapping(tappingPos))
     *                          {
     *                              potentialLayers.Add(lm);
     *                          }
     *                      }
     *                      if (potentialLayers.Count > 0)
     *                      {
     *                          goTappingRH = potentialLayers[0];
     *                          foreach (LayerMetaphor lm in potentialLayers)
     *                          {
     *                              if (lm.checkDistance(tappingPos) < goTappingRH.checkDistance(tappingPos))
     *                              {
     *                                  goTappingRH = lm;
     *                              }
     *                          }
     *                          goTappingRH.changeTap();
     *                          if (goTappingRH.IsTapped)
     *                          {
     *                              if(goTappedRH != null)
     *                              {
     *                                  goTappedRH.endTap();
     *                                  goTappedRH.reColorWorldObj(Color.white);
     *                                  goTappedRH.removeSelections();
     *                              }
     *                              goTappedRH = goTappingRH;
     *                              goTappedRH.reColorWorldObj(Color.red);
     *                              goTappedRH.createSelections();
     *                          }
     *                          else
     *                          {
     *                              goTappedRH.reColorWorldObj(Color.white);
     *                              goTappedRH.removeSelections();
     *                              goTappedRH = null;
     *                          }
     *                      }
     *                  }
     *                  else
     *                  {
     *                      if (goTappingRH.checkTapping(tappingPos))
     *                      {
     *                          //do nothing
     *                      }
     *                      else
     *                      {
     *                          //goTappedRH.endTap();
     *                          //goTappedRH.reScaleWorldObj(1.25f, 1.25f, 1.25f);
     *                          goTappingRH = null;
     *                      }
     *                  }
     *                  return;
     *          }
     *          return;
     *      case ControlMode.tappingRotation:
     *          switch (mode)
     *          {
     *              case 0:
     *                  gesture = (GestureTapping)gestureTappingLH;
     *                  tappingPos = gesture.LastTipPos;
     *                  posMovement = gesture.TipMovement;
     *                  if (goTappedLH == null)
     *                  {
     *                      potentialLayers = new List<LayerMetaphor>();
     *                      foreach (LayerMetaphor lm in layerMetaphorsActived)
     *                      {
     *                          if (!lm.IsTapped)
     *                          {
     *                              if (lm.checkTapping(tappingPos))
     *                              {
     *                                  potentialLayers.Add(lm);
     *                              }
     *                          }
     *                      }
     *                      if (potentialLayers.Count > 0)
     *                      {
     *                          goTappedLH = potentialLayers[0];
     *                          foreach (LayerMetaphor lm in potentialLayers)
     *                          {
     *                              if (lm.checkDistance(tappingPos) < goTappedLH.checkDistance(tappingPos))
     *                              {
     *                                  goTappedLH = lm;
     *                              }
     *                          }
     *                          goTappedLH.startTap();
     *                          goTappedLH.reScaleWorldObj(1.25f, 1.25f, 1.25f);
     *                      }
     *                  }
     *                  else
     *                  {
     *                      if (goTappedLH.checkTapping(tappingPos))
     *                      {
     *                          //ratate the go
     *                      }
     *                      else
     *                      {
     *                          goTappedLH.endTap();
     *                          goTappedLH.reScaleWorldObj(0.8f, 0.8f, 0.8f);
     *                          goTappedLH = null;
     *                      }
     *                  }
     *                  return;
     *              case 1:
     *                  gesture = (GestureTapping)gestureTappingRH;
     *                  tappingPos = gesture.LastTipPos;
     *                  posMovement = gesture.TipMovement;
     *                  if (goTappedRH == null)
     *                  {
     *                      potentialLayers = new List<LayerMetaphor>();
     *                      foreach (LayerMetaphor lm in layerMetaphorsActived)
     *                      {
     *                          if (!lm.IsTapped)
     *                          {
     *                              if (lm.checkTapping(tappingPos))
     *                              {
     *                                  potentialLayers.Add(lm);
     *                              }
     *                          }
     *                      }
     *                      if (potentialLayers.Count > 0)
     *                      {
     *                          goTappedRH = potentialLayers[0];
     *                          foreach (LayerMetaphor lm in potentialLayers)
     *                          {
     *                              if (lm.checkDistance(tappingPos) < goTappedRH.checkDistance(tappingPos))
     *                              {
     *                                  goTappedRH = lm;
     *                              }
     *                          }
     *                          goTappedRH.startTap();
     *                          goTappedRH.reScaleWorldObj(1.25f, 1.25f, 1.25f);
     *                      }
     *                  }
     *                  else
     *                  {
     *                      if (goTappedRH.checkTapping(tappingPos))
     *                      {
     *                          //ratate the go
     *                      }
     *                      else
     *                      {
     *                          goTappedRH.endTap();
     *                          goTappedRH.reScaleWorldObj(0.8f, 0.8f, 0.8f);
     *                          goTappedRH = null;
     *                      }
     *                  }
     *                  return;
     *          }
     *          return;
     *
     *  }
     * }
     */


    private void OneHandHovering(int mode)
    {
        if (goSelected != null)
        {
            return;
        }
        GestureHovering gesture;
        Vector3         hoveringPos;

        switch (mode)
        {
        case 0:
            gesture     = (GestureHovering)gestureHoveringLH;
            hoveringPos = (gesture.LastTipPos + gesture.LastPalmPos) / 2;
            handle.updateIndex(hoveringPos);
            handle.updateObjectsPositions(hoveringPos);
            if (!oldVersion)
            {
                bin.updateIndex(hoveringPos);
                bin.updateObjectsPositions(hoveringPos);
            }
            return;

        case 1:
            gesture     = (GestureHovering)gestureHoveringRH;
            hoveringPos = (gesture.LastTipPos + gesture.LastPalmPos) / 2;
            handle.updateIndex(hoveringPos);
            handle.updateObjectsPositions(hoveringPos);
            if (!oldVersion)
            {
                bin.updateIndex(hoveringPos);
                bin.updateObjectsPositions(hoveringPos);
            }
            return;

        case 2:
            foreach (LayerMetaphor lm in layerMetaphorsActived)
            {
                if (lm.isGrasped)
                {
                    lm.cancelAllGraspState();
                    lm.cancelAllHighLight();
                }
            }
            hoveringPos = handle.safeUpdatePos;
            handle.updateIndex(hoveringPos);
            handle.updateObjectsPositions(hoveringPos);
            if (oldVersion)
            {
                return;
            }
            foreach (LayerMetaphor lm in layerMetaphorsDisActived)
            {
                if (lm.isGrasped)
                {
                    goSelected = null;
                    lm.cancelAllGraspState();
                    lm.cancelAllHighLight();
                    lm.moveObjectTo(bin.safeUpdatePos);
                }
            }
            hoveringPos = bin.safeUpdatePos;
            bin.updateIndex(hoveringPos);
            bin.updateObjectsPositions(hoveringPos);
            return;
        }
    }
    protected void onGraspStayActived()
    {
        _isLocked    = true;
        graspedTime += Time.deltaTime;
        if (interactionBehaviour.closestHoveringHand == null)
        {
            return;
        }
        if (graspedTime < quickGraspTimeMax)
        {
            _isLocked = false;
            return;
        }
        else
        {
            if (!_isLongGrasped)
            {
                _isLongGrasped = true;
                unselectActions();
                enableGraspMovement();
                //InteractionController c = interactionBehaviour.graspedPoseHandler.co
                interactionBehaviour.graspedPoseHandler.AddController(interactionBehaviour.graspingController);
                //enableGraspActions();
                LayerManager.goSelected = null;
            }
        }
        bool inRange = LayerManager.handle.updateLayerExisted(this);

        if (LayerManager.layerMetaphorsActived.Contains(this))
        {
            if (!inRange)
            {
                LayerManager.layerMetaphorsActived.Remove(this);
                LayerManager.layerMetaphorsDisActived.Add(this);
                this.getLayer().hide();
                if (!_oldVersion)
                {
                    this.getLayer().getDuplication().hideSelf();
                    this.worldObject.GetComponent <MeshRenderer>().enabled = true;
                    LayerManager.handle.removeLayer(this);
                    LayerManager.bin.addLayer(this);
                }
            }
            else
            {
                if (handle != null && !IsSelected)
                {
                    Hand h = interactionBehaviour.closestHoveringHand;
                    if (_oldVersion)
                    {
                        handle.updateIndex(worldObject.transform.position);
                    }
                    else
                    {
                        handle.updateIndex(UnityVectorExtension.ToVector3(h.PalmPosition));
                    }
                }
            }
        }
        else
        {
            if (inRange)
            {
                LayerManager.layerMetaphorsDisActived.Remove(this);
                LayerManager.layerMetaphorsActived.Add(this);
                this.getLayer().show();
                LayerManager.handle.addLayer(this);
                if (!_oldVersion)
                {
                    LayerManager.bin.removeLayer(this);
                    this.getLayer().getDuplication().showSelf();
                    this.getLayer().getDuplication().hideText();
                    this.worldObject.GetComponent <MeshRenderer>().enabled = false;
                }
            }
        }

        if (handle != null && !IsSelected)
        {
            Hand h = interactionBehaviour.closestHoveringHand;
            handle.updateObjectsOrder();
            if (_oldVersion)
            {
                handle.updateObjectsPositions(worldObject.transform.position);
            }
            else
            {
                handle.updateObjectsPositions(UnityVectorExtension.ToVector3(h.PalmPosition));
            }
        }
        _isLocked = false;
    }