Пример #1
0
 private static void setFingerBones(ref Transform[] bones, Vector3 angles, ESensoFingerType fingerType)
 {
     if (fingerType == ESensoFingerType.Thumb)
     {
         setThumbBones(ref bones, ref angles);
     }
     else
     {
         if (angles.z < 0.0f)
         {
             bones[0].localEulerAngles = angles;
         }
         else
         {
             angles.z /= 2.0f;
             for (int j = 0; j < bones.Length; ++j)
             {
                 bones[j].localEulerAngles = angles;
                 if (j == 0)
                 {
                     angles.y = 0.0f;
                 }
             }
         }
         if (ESensoFingerType.Little == fingerType)
         {
             bones[0].Rotate(new Vector3(0.0f, -15.0f, 0));
         }
     }
 }
Пример #2
0
        public int GetJSON(ESensoPositionType hand, ESensoFingerType finger, ref Byte[] buf, ref int bufOffset)
        {
            var str = String.Format("{{\"dst\":\"{0}\",\"type\":\"vibration\",\"data\":{{\"type\":{1},\"dur\":{2},\"str\":{3}}}}}\n", (hand == ESensoPositionType.RightHand ? "rh" : "lh"), (int)finger, m_duration, m_strength);

            changed = false;
            return(Encoding.ASCII.GetBytes(str, 0, str.Length, buf, bufOffset));
        }
Пример #3
0
 public void VibrateFinger(ESensoFingerType finger, ushort duration, byte strength)
 {
     if (m_sensoManager.IsAlive)
     {
         SensoManager man = m_sensoManager.Target as SensoManager;
         man.SendVibro(HandType, finger, duration, strength);
     }
 }
Пример #4
0
    ///
    /// @brief Send vibrating command to the server
    ///
    public void VibrateFinger(ESensoPositionType handType, ESensoFingerType fingerType, ushort duration, byte strength)
    {
        int handMult = handType == ESensoPositionType.RightHand ? 0 : 1;
        int ind      = handMult * 5 + (int)fingerType;

        lock (vibroLock)
            vibroPackets[ind].Change(duration, strength);
    }
Пример #5
0
    ///
    /// @brief Return FingerTip with specified type
    ///
    public SensoFingerTip GetFingerTip(ESensoFingerType fingerType)
    {
        var fingers = GetComponentsInChildren <SensoFingerTip>();

        foreach (var finger in fingers)
        {
            if (finger.FingerType == fingerType)
            {
                return(finger);
            }
        }
        return(null);
    }
Пример #6
0
    public void SensoPoseChanged(SensoHandData aData)
    {
        latestSample  = aData;
        sampleChanged = true;

        for (ESensoFingerType fingerType = ESensoFingerType.Thumb; fingerType <= ESensoFingerType.Little; ++fingerType)
        {
            var tip = GetFingerTip(fingerType);
            if (tip != null)
            {
                tip.SetRelativePitch(aData.fingerAngles[(int)fingerType].z);
            }
        }
    }
Пример #7
0
    public event EventHandler <SensoGrabArgs> OnGrabEnd          = delegate {}; // Is fired when hand has ended grabbing

    public void TriggerPinch(ESensoFingerType finger1Type, ESensoFingerType finger2Type, bool stop = false)
    {
        SensoFingerTip finger1 = GetFingerTip(finger1Type < finger2Type ? finger1Type : finger2Type);
        SensoFingerTip finger2 = GetFingerTip(finger2Type > finger1Type ? finger2Type : finger1Type);
        var            args    = new SensoPinchEventArgs(finger1, finger2);

        if (!stop)
        {
            OnPinchStart(this, args);
        }
        else
        {
            OnPinchEnd(this, args);
        }
    }
Пример #8
0
    /// Events
    public void fingerPinch(ESensoPositionType handType, ESensoFingerType finger1Type, ESensoFingerType finger2Type, bool stop = false)
    {
        SensoHand aHand = null;

        foreach (var hand in sensoHands)
        {
            if (hand.HandType == handType)
            {
                aHand = hand;
                break;
            }
        }

        if (aHand != null)
        {
            aHand.TriggerPinch(finger1Type, finger2Type, stop);
        }
    }
Пример #9
0
    private void netSendVibro(ref Byte[] buf, ref int offset)
    {
        ESensoPositionType hand   = ESensoPositionType.Unknown;
        ESensoFingerType   finger = ESensoFingerType.Thumb;

        lock (vibroLock) {
            for (int i = 0; i < 10; ++i)
            {
                if (i % 5 == 0)
                {
                    ++hand;
                    finger = ESensoFingerType.Thumb;
                }
                if (vibroPackets[i].changed)
                {
                    offset += vibroPackets[i].GetJSON(hand, finger, ref buf, ref offset);
                }
                ++finger;
            }
        }
    }
    public SensoHandGesture(JSONNode data)
    {
        JSONArray arr = data["fingers"].AsArray;

        Fingers = new ESensoFingerType[arr.Count];
        for (int i = 0; i < arr.Count; ++i)
        {
            Fingers[i] = (ESensoFingerType)arr[i].AsInt;
        }

        string handStr = data["hand"].Value;

        if (handStr.Equals("rh"))
        {
            Hand = ESensoPositionType.RightHand;
        }
        else if (handStr.Equals("lh"))
        {
            Hand = ESensoPositionType.LeftHand;
        }
        else
        {
            Hand = ESensoPositionType.Unknown;
        }

        string typeStr = data["name"].Value;

        if (typeStr.Equals("pinch_start"))
        {
            Type = ESensoGestureType.PinchStart;
        }
        else if (typeStr.Equals("pinch_end"))
        {
            Type = ESensoGestureType.PinchEnd;
        }
        else
        {
            Type = ESensoGestureType.Unknown;
        }
    }
Пример #11
0
    /*void OrientationUpdated(OVRCameraRig rig)
     * {
     *  if (VRCameraHolder != null)
     *  {
     *      VRCameraHolder.localRotation = Quaternion.Inverse(rig.centerEyeAnchor.localRotation);
     *  }
     *  if (DateTime.Now >= orientationNextSend)
     *  {
     *      sensoThread.SendHMDOrientation(rig.centerEyeAnchor.localEulerAngles);
     *      orientationNextSend = DateTime.Now.AddMilliseconds(orientationSendEveryMS);
     *  }
     * }*/

    ///
    /// @brief Send vibration command to the server
    ///
    public void SendVibro(ESensoPositionType hand, ESensoFingerType finger, ushort duration, byte strength)
    {
        sensoThread.VibrateFinger(hand, finger, duration, strength);
    }