public void RegisterPickupable(Collider c, BKI_Hand hand, BKI_Finger finger, BKI_FreezeTypes freezeType)
        {
            if (c.gameObject == null)
            {
                return;
            }

            switch (hand)
            {
            case BKI_Hand.right:
                if (freezeType == BKI_FreezeTypes.toProximal && registeredPickupableRight[(int)finger] != null)
                {
                    return;
                }
                if (c.GetComponent <IBetterPickupable>() != null && registeredPickupableRight[(int)finger] == null)
                {
                    registeredPickupableRight[(int)finger] = c.GetComponent <IBetterPickupable>().GetPickupable();
                }
                break;

            case BKI_Hand.left:
                if (freezeType == BKI_FreezeTypes.toProximal && registeredPickupableLeft[(int)finger] != null)
                {
                    return;
                }
                if (c.GetComponent <IBetterPickupable>() != null && registeredPickupableLeft[(int)finger] == null)
                {
                    registeredPickupableLeft[(int)finger] = c.GetComponent <IBetterPickupable>().GetPickupable();
                }
                break;
            }
        }
        public bool EntryAlreadyExists(BKI_Hand hand, BKI_SingleGestureClass ges)
        {
            SweepDictionaries();
            bool returnVal = false;

            if (!returnVal)
            {
                returnVal = ((hand == BKI_Hand.right) ? rhDictionary : lhDictionary).ContainsKey(ges.gestureIdentifier);
            }
            if (!returnVal)
            {
                if (hand == BKI_Hand.right)
                {
                    foreach (var g in rhGesturesList)
                    {
                        if (g.gesture == ges)
                        {
                            return(true);
                        }
                    }
                }
                else
                {
                    foreach (var g in lhGesturesList)
                    {
                        if (g.gesture == ges)
                        {
                            return(true);
                        }
                    }
                }
            }
            return(returnVal);
        }
        // Returns the rotational value read directly from the rotations before being applied to the mesh.
        public float GetFingerValueRaw(BKI_Hand hand, BKI_Finger finger)
        {
            BKI_HandValues handVals = null;

            switch (hand)
            {
            case BKI_Hand.right:
                handVals = rightHandValues;
                break;

            case BKI_Hand.left:
                handVals = leftHandValues;
                break;
            }
            switch (finger)
            {
            case BKI_Finger.thumb: return(handVals.GetFingerValueRaw(finger));

            case BKI_Finger.index: return(handVals.GetFingerValueRaw(finger));

            case BKI_Finger.middle: return(handVals.GetFingerValueRaw(finger));

            case BKI_Finger.ring: return(handVals.GetFingerValueRaw(finger));

            case BKI_Finger.pinky: return(handVals.GetFingerValueRaw(finger));

            default: return(0);
            }
        }
        // Returns true or false depending on whether the read value exceeds the demanded deadzone.
        // Acts as a mirror of Unity.Input.GetButton() for the BetterKnuckleGestures library.
        public bool IsFingerDown(BKI_Hand hand, BKI_Finger finger)
        {
            BKI_HandValues handVals = null;

            switch (hand)
            {
            case BKI_Hand.right:
                handVals = rightHandValues;
                break;

            case BKI_Hand.left:
                handVals = leftHandValues;
                break;
            }
            switch (finger)
            {
            case BKI_Finger.thumb: return(handVals.GetFingerValue(finger) >= DEFAULT_PRESSED_DEADZONE);

            case BKI_Finger.index: return(handVals.GetFingerValue(finger) >= DEFAULT_PRESSED_DEADZONE);

            case BKI_Finger.middle: return(handVals.GetFingerValue(finger) >= DEFAULT_PRESSED_DEADZONE);

            case BKI_Finger.ring: return(handVals.GetFingerValue(finger) >= DEFAULT_PRESSED_DEADZONE);

            case BKI_Finger.pinky: return(handVals.GetFingerValue(finger) >= DEFAULT_PRESSED_DEADZONE);

            default: return(false);
            }
        }
        private void FreezeFinger(BKI_Hand hand, BKI_Finger finger, BKI_FreezeTypes freezeType, Collider c)
        {
            switch (hand)
            {
            case BKI_Hand.right:
                if (BKI_FingerCurler.BKI_Curler_Instance.GetFingerValueRaw(BKI_Hand.right, finger) <= 0.05f)
                {
                    break;
                }
                fingerFrozenRightHand[(int)finger]      = true;
                fingerFrozenValueRightHand[(int)finger] = Mathf.Clamp(BKI_FingerCurler.BKI_Curler_Instance.GetFingerValueRaw(BKI_Hand.right, finger) - 0.1f, 0.1f, 1f);
                rightHandSkeleton.FreezeFingerInArray(finger, freezeType, c);
                break;

            case BKI_Hand.left:
                if (BKI_FingerCurler.BKI_Curler_Instance.GetFingerValueRaw(BKI_Hand.left, finger) <= 0.05f)
                {
                    break;
                }
                fingerFrozenLeftHand[(int)finger]      = true;
                fingerFrozenValueLeftHand[(int)finger] = Mathf.Clamp(BKI_FingerCurler.BKI_Curler_Instance.GetFingerValueRaw(BKI_Hand.left, finger) - 0.1f, 0.1f, 1f);
                leftHandSkeleton.FreezeFingerInArray(finger, freezeType, c);
                break;
            }
            RegisterPickupable(c, hand, finger, freezeType);
        }
Пример #6
0
        private void DrawButtonsSingle(BKI_Hand hand)
        {
            string handString          = (hand == BKI_Hand.right) ? "right" : "left";
            string handStringShorthand = (hand == BKI_Hand.right) ? "rh" : "lh";

            lhGesture = SerializeGesture(BKI_Hand.left, leftHandValues);
            rhGesture = SerializeGesture(BKI_Hand.right, rightHandValues);
            float buttonWidth = WINDOW_MAX_SIZE_X * 0.25f - (DEFAULT_AREA_PADDING * 2.5f);
            int   xPos        = DEFAULT_AREA_PADDING;

            BKI_UIType t = (hand == BKI_Hand.right) ? BKI_UIType.right : BKI_UIType.left;

            GUILayout.BeginArea(buttonStackRect);
            {
                GUILayout.BeginArea(new Rect(xPos, 0, WINDOW_MAX_SIZE_X * 0.45f - DEFAULT_AREA_PADDING, TITLE_FIELD_SIZE * 3));
                {
                    EditorGUILayout.BeginHorizontal();
                    DrawSubmitButtonSingle(hand, buttonWidth);
                    EditorGUILayout.EndHorizontal();
                }
                GUILayout.EndArea();
                GUILayout.Space(DEFAULT_AREA_PADDING);
            }
            GUILayout.EndArea();
        }
        // Saves individual hand
        public void SaveToList(BKI_Hand hand, BKI_SingleGestureClass ges, bool isOverwrite = false)
        {
            BKI_SingleGestureStruct struc = new BKI_SingleGestureStruct(ges);

            if (!EntryAlreadyExists(hand, ges) || isOverwrite)
            {
                if (isOverwrite)
                {
                    foreach (var item in ((hand == BKI_Hand.right) ? rhGesturesList : lhGesturesList))
                    {
                        if (item.gesture.gestureIdentifier == ges.gestureIdentifier)
                        {
                            ((hand == BKI_Hand.right) ? rhGesturesList : lhGesturesList).Remove(item);
                            break;
                        }
                    }
                    if (((hand == BKI_Hand.right) ? rhDictionary : lhDictionary).ContainsKey(ges.gestureIdentifier))
                    {
                        ((hand == BKI_Hand.right) ? rhDictionary : lhDictionary).Remove(ges.gestureIdentifier);
                    }
                }
                ((hand == BKI_Hand.right) ? rhGesturesList : lhGesturesList).Add(struc);
                ((hand == BKI_Hand.right) ? rhDictionary : lhDictionary).Add(ges.gestureIdentifier, ges);
                AssetDatabase.Refresh();
                EditorUtility.SetDirty(this);
                AssetDatabase.SaveAssets();
            }
        }
 public void SetValues(BKI_Hand h, string id, bool reqClench, BKI_FingerState[] states)
 {
     hand = h;
     gestureIdentifier = id;
     requiresClench    = reqClench;
     fingerStates      = states;
     AssignValues(states);
 }
        private FingerValues GetFingerValues(BKI_Hand hand)
        {
            float thumbVal    = BKI_FingerCurler.BKI_Curler_Instance.GetFingerValueMesh(hand, BKI_Finger.thumb);
            float indexVal    = BKI_FingerCurler.BKI_Curler_Instance.GetFingerValueMesh(hand, BKI_Finger.index);
            float middleVal   = BKI_FingerCurler.BKI_Curler_Instance.GetFingerValueMesh(hand, BKI_Finger.middle);
            float ringVal     = BKI_FingerCurler.BKI_Curler_Instance.GetFingerValueMesh(hand, BKI_Finger.ring);
            float pinkyVal    = BKI_FingerCurler.BKI_Curler_Instance.GetFingerValueMesh(hand, BKI_Finger.pinky);
            bool  isClenching = BKI_FingerCurler.BKI_Curler_Instance.IsHandClenching(hand);

            return(new FingerValues(thumbVal, indexVal, middleVal, ringVal, pinkyVal, isClenching));
        }
 private void RefreezeFinger(BKI_Hand hand, BKI_Finger finger, BKI_FreezeTypes freezeType, Collider c)
 {
     if (IsValueOverFrozenValue(hand, finger))
     {
         UnfreezeFinger(hand, finger, freezeType, c);
     }
     else
     {
         FreezeFinger(hand, finger, freezeType, c);
     }
 }
 public BKI_PickupableObject GetRegisteredPickupable(BKI_Hand hand, BKI_Finger finger)
 {
     if (hand == BKI_Hand.right)
     {
         return((IsHandGripping(BKI_Hand.right)) ? registeredPickupableRight[(int)finger] : null);
     }
     else
     {
         return((IsHandGripping(BKI_Hand.left)) ? registeredPickupableLeft[(int)finger] : null);
     }
 }
        // Initialises the object to get parented to the designated finger on the designated hand.
        // Sets the callbacks for when the object enters, stays or exits collision.
        public void Initialise(Action onColEnterCallback, Action onColStayCallback, Action onColExitCallback, BKI_Hand h)
        {
            collidedObjects = new List <Collider>();
            onColEnter      = onColEnterCallback;
            onColStay       = onColStayCallback;
            onColExit       = onColExitCallback;

            hand = h;

            // Makes sure the collider is set to isTrigger.
            GetComponent <Collider>().isTrigger = true;
        }
Пример #13
0
        /// <summary>
        /// Function that converts the mirror class to the class that will be used at runtime.
        /// Cannot return null. If the input class is null, it returns a freshly generated BKI_GestureClass.
        /// </summary>
        private BKI_SingleGestureClass SerializeGesture(BKI_Hand h, BKI_GestureMirrorClass mirror)
        {
            BKI_SingleGestureClass returnVal = ScriptableObject.CreateInstance <BKI_SingleGestureClass>();

            if (mirror == null)
            {
                return(returnVal);
            }

            returnVal.SetValues(h, mirror.gestureIdentifier, mirror.requiresClench, mirror.fingerStates);

            return(returnVal);
        }
        // Sets the speed which the hand adjusts to finger values.
        public void SetHandUpdateBlend(BKI_Hand hand, bool isLowBlendPercentage)
        {
            switch (hand)
            {
            case BKI_Hand.right:
                rightHandSkeleton.SetHandUpdateBlend(isLowBlendPercentage);
                break;

            case BKI_Hand.left:
                leftHandSkeleton.SetHandUpdateBlend(isLowBlendPercentage);
                break;
            }
        }
        private void UnfreezeHand(BKI_Hand hand)
        {
            switch (hand)
            {
            case BKI_Hand.right:
                rightHandSkeleton.UnfreezeHand();
                isRightHandFrozen = false;
                break;

            case BKI_Hand.left:
                leftHandSkeleton.UnfreezeHand();
                isLeftHandFrozen = false;
                break;
            }
        }
        public bool IsValueOverFrozenValue(BKI_Hand h, BKI_Finger f)
        {
            switch (h)
            {
            case BKI_Hand.right:
                return(fingerFrozenValueRightHand[(int)f] > BKI_FingerCurler.BKI_Curler_Instance.GetFingerValueRaw(BKI_Hand.right, f) ||
                       BKI_FingerCurler.BKI_Curler_Instance.GetFingerValueRaw(BKI_Hand.right, f) < 0.1f);

            case BKI_Hand.left:
                return(fingerFrozenValueLeftHand[(int)f] > BKI_FingerCurler.BKI_Curler_Instance.GetFingerValueRaw(BKI_Hand.left, f) ||
                       BKI_FingerCurler.BKI_Curler_Instance.GetFingerValueRaw(BKI_Hand.left, f) < 0.1f);

            default:
                return(false);
            }
        }
        public void UnregisterPickupable(Collider c, BKI_Hand hand, BKI_Finger finger, BKI_FreezeTypes freezeType)
        {
            if (c.GetComponent <IBetterPickupable>() == null)
            {
                return;
            }
            switch (hand)
            {
            case BKI_Hand.right:
                registeredPickupableRight[(int)finger] = null;
                break;

            case BKI_Hand.left:
                registeredPickupableLeft[(int)finger] = null;
                break;
            }
        }
        // Returns current value.
        public bool IsHandGripping(BKI_Hand hand)
        {
            BKI_HandValues vals = (hand == BKI_Hand.left) ? leftHandValues : rightHandValues;
            BKI_SteamVR_Behaviour_Skeleton skel = (hand == BKI_Hand.left) ? leftHandSkeleton : rightHandSkeleton;

            bool canDoLoop = skel.IsFingerFrozen(BKI_Finger.thumb) && (skel.IsFingerFrozen(BKI_Finger.index) || skel.IsFingerFrozen(BKI_Finger.middle) || skel.IsFingerFrozen(BKI_Finger.ring) || skel.IsFingerFrozen(BKI_Finger.pinky));

            if (canDoLoop)
            {
                for (int i = 1; i < 5; i++)
                {
                    if (!(skel.IsFingerFrozen((BKI_Finger)i) && !(vals.GetFingerValue((BKI_Finger)i) < 0.1f)))
                    {
                        continue;
                    }
                    if (
                        (colliderManager.GetRegisteredPickupable(hand, BKI_Finger.thumb) != null &&
                         (colliderManager.GetRegisteredPickupable(hand, (BKI_Finger)i)) != null) &&
                        colliderManager.GetRegisteredPickupable(hand, BKI_Finger.thumb).GetPickupable() == colliderManager.GetRegisteredPickupable(hand, (BKI_Finger)i).GetPickupable())
                    {
                        if (hand == BKI_Hand.right)
                        {
                            rhGrippedObject = colliderManager.GetRegisteredPickupable(hand, BKI_Finger.thumb);
                        }
                        else
                        {
                            lhGrippedObject = colliderManager.GetRegisteredPickupable(hand, BKI_Finger.thumb);
                        }
                        return(true);
                    }
                }
            }
            else
            {
                if (hand == BKI_Hand.right)
                {
                    rhGrippedObject = null;
                }
                else
                {
                    lhGrippedObject = null;
                }
                return(false);
            }
            return(false);
        }
Пример #19
0
        // Happens when the "Save Gesture" button is pressed. Starts the saving process. Returns the object referenced in the resources folder.
        private BKI_SingleGestureClass SubmitSingleHandGesture(BKI_Hand hand, BKI_SingleGestureClass ges, bool fromResources)
        {
            BKI_SingleGestureClass returnObj = null;

            if (gestureStorage == null)
            {
                Debug.LogError("Gesture storage could not be found. Exiting save function.");
                return(null);
            }

            if (!gestureStorage.EntryAlreadyExists(hand, ges) || fromResources)
            {
                returnObj = SaveObjectToResources(ges, hand);
                gestureStorage.SaveToList(hand, returnObj, fromResources);
            }

            return(returnObj);
        }
        private void UnfreezeFinger(BKI_Hand hand, BKI_Finger finger, BKI_FreezeTypes freezeType, Collider c)
        {
            switch (hand)
            {
            case BKI_Hand.right:
                fingerFrozenRightHand[(int)finger]      = false;
                fingerFrozenValueRightHand[(int)finger] = 0;
                rightHandSkeleton.UnfreezeFingerInArray(finger, freezeType, c);
                break;

            case BKI_Hand.left:
                fingerFrozenLeftHand[(int)finger]      = false;
                fingerFrozenValueLeftHand[(int)finger] = 0;
                leftHandSkeleton.UnfreezeFingerInArray(finger, freezeType, c);
                break;
            }
            UnregisterPickupable(c, hand, finger, freezeType);
        }
        // Only returns true on the frame grip is entered.
        public bool IsHandGrippingDown(BKI_Hand hand)
        {
            bool currentHandState = IsHandGripping(hand);
            bool prevGripping     = (hand == BKI_Hand.left) ? leftPreviousIsGripping : rightPreviousIsGripping;

            bool returnVal = currentHandState && !prevGripping;

            if (hand == BKI_Hand.left)
            {
                leftPreviousIsGripping = currentHandState;
            }
            else
            {
                rightPreviousIsGripping = currentHandState;
            }

            return(returnVal);
        }
Пример #22
0
        // Draws the appropriate title depending on the hand requested.
        private void DrawHandTitle(BKI_Hand hand)
        {
            string handString = (hand == BKI_Hand.right) ? "Right" : "Left";

            GUILayout.Space(12);
            EditorGUILayout.BeginHorizontal();
            {
                GUILayout.Label(handString + " hand \n gesture", subtitleStyle);
                if (GUILayout.Button("Reset values \n " + handString + " hand", GUILayout.Height(32), GUILayout.Width(96)))
                {
                    if (hand == BKI_Hand.right)
                    {
                        ResetRh();
                    }
                    else
                    {
                        ResetLh();
                    }
                }
                GUILayout.Space(32);
            }
            EditorGUILayout.EndHorizontal();
        }
 private bool IsHandGripping(BKI_Hand hand)
 {
     if (hand == BKI_Hand.left)
     {
         for (int i = 1; i < 5; i++)
         {
             if (registeredPickupableLeft[i] == registeredPickupableLeft[0])
             {
                 return(true);
             }
         }
     }
     else
     {
         for (int i = 1; i < 5; i++)
         {
             if (registeredPickupableRight[i] == registeredPickupableRight[0])
             {
                 return(true);
             }
         }
     }
     return(false);
 }
 public BKI_PickupableObject GetGrippedObject(BKI_Hand hand)
 {
     return((hand == BKI_Hand.right) ? rhGrippedObject : lhGrippedObject);
 }
 public bool IsHandClenching(BKI_Hand hand)
 {
     return((hand == BKI_Hand.right) ? rightHandValues.GetIsClenching() : leftHandValues.GetIsClenching());
 }
Пример #26
0
        // Draws the check boxes and their labels as seen in the tool UI.
        private void DrawBooleans(BKI_Hand hand)
        {
            BKI_GestureMirrorClass values = (hand == BKI_Hand.right) ? rightHandValues : leftHandValues;

            Rect containerRect = (hand == BKI_Hand.right) ? handGUIContainer : handGUIContainer;

            Rect r = new Rect(DEFAULT_AREA_PADDING + 5, TITLE_FIELD_SIZE + 2, containerRect.width - DEFAULT_AREA_PADDING * 1.5f, containerRect.height - DEFAULT_AREA_PADDING * 1.5f - TITLE_FIELD_SIZE);

            GUILayout.BeginArea(r);
            {
                // Parenthesis to clarify GUI layout at code side.
                EditorGUILayout.BeginHorizontal();
                {
                    EditorGUILayout.BeginVertical();
                    {
                        GUILayout.Label("Thumb: ");
                        GUILayout.Space(3);
                        GUILayout.Label("Index: ");
                        GUILayout.Space(3);
                        GUILayout.Label("Middle: ");
                        GUILayout.Space(3);
                        GUILayout.Label("Ring: ");
                        GUILayout.Space(3);
                        GUILayout.Label("Pinky: ");
                    }
                    EditorGUILayout.EndVertical();
                    GUILayout.Space(-60);
                    EditorGUILayout.BeginVertical();
                    {
                        values.fingerStates[0] = (BKI_FingerState)GUILayout.Toolbar((int)values.fingerStates[0], toolbarText, GUILayout.Width(160));
                        values.fingerStates[1] = (BKI_FingerState)GUILayout.Toolbar((int)values.fingerStates[1], toolbarText, GUILayout.Width(160));
                        values.fingerStates[2] = (BKI_FingerState)GUILayout.Toolbar((int)values.fingerStates[2], toolbarText, GUILayout.Width(160));
                        values.fingerStates[3] = (BKI_FingerState)GUILayout.Toolbar((int)values.fingerStates[3], toolbarText, GUILayout.Width(160));
                        values.fingerStates[4] = (BKI_FingerState)GUILayout.Toolbar((int)values.fingerStates[4], toolbarText, GUILayout.Width(160));
                    }
                    EditorGUILayout.EndVertical();

                    //EditorGUILayout.BeginVertical();
                    //{
                    //	bool thumb = values.GetFingerPressed(BKI_Finger.thumb);
                    //	thumb = EditorGUILayout.Toggle(values.GetFingerPressed(BKI_Finger.thumb));
                    //	values.SetFingerPressed(BKI_Finger.thumb, thumb);

                    //	bool index = values.GetFingerPressed(BKI_Finger.index);
                    //	index = EditorGUILayout.Toggle(values.GetFingerPressed(BKI_Finger.index));
                    //	values.SetFingerPressed(BKI_Finger.index, index);

                    //	bool middle = values.GetFingerPressed(BKI_Finger.middle);
                    //	middle = EditorGUILayout.Toggle(values.GetFingerPressed(BKI_Finger.middle));
                    //	values.SetFingerPressed(BKI_Finger.middle, middle);

                    //	bool ring = values.GetFingerPressed(BKI_Finger.ring);
                    //	ring = EditorGUILayout.Toggle(values.GetFingerPressed(BKI_Finger.ring));
                    //	values.SetFingerPressed(BKI_Finger.ring, ring);

                    //	bool pinky = values.GetFingerPressed(BKI_Finger.pinky);
                    //	pinky = EditorGUILayout.Toggle(values.GetFingerPressed(BKI_Finger.pinky));
                    //	values.SetFingerPressed(BKI_Finger.pinky, pinky);
                    //}
                    //EditorGUILayout.EndVertical();

                    //EditorGUILayout.BeginVertical();
                    //{
                    //	GUILayout.Label("Ignore thumb: ");
                    //	GUILayout.Label("Ignore index: ");
                    //	GUILayout.Label("Ignore middle: ");
                    //	GUILayout.Label("Ignore ring: ");
                    //	GUILayout.Label("Ignore pinky: ");
                    //}
                    //EditorGUILayout.EndVertical();

                    //EditorGUILayout.BeginVertical();
                    //{
                    //	bool thumb = values.GetFingerIgnored(BKI_Finger.thumb);
                    //	thumb = EditorGUILayout.Toggle(values.GetFingerIgnored(BKI_Finger.thumb));
                    //	values.SetFingerIgnored(BKI_Finger.thumb, thumb);

                    //	bool index = values.GetFingerIgnored(BKI_Finger.index);
                    //	index = EditorGUILayout.Toggle(values.GetFingerIgnored(BKI_Finger.index));
                    //	values.SetFingerIgnored(BKI_Finger.index, index);

                    //	bool middle = values.GetFingerIgnored(BKI_Finger.middle);
                    //	middle = EditorGUILayout.Toggle(values.GetFingerIgnored(BKI_Finger.middle));
                    //	values.SetFingerIgnored(BKI_Finger.middle, middle);

                    //	bool ring = values.GetFingerIgnored(BKI_Finger.ring);
                    //	ring = EditorGUILayout.Toggle(values.GetFingerIgnored(BKI_Finger.ring));
                    //	values.SetFingerIgnored(BKI_Finger.ring, ring);

                    //	bool pinky = values.GetFingerIgnored(BKI_Finger.pinky);
                    //	pinky = EditorGUILayout.Toggle(values.GetFingerIgnored(BKI_Finger.pinky));
                    //	values.SetFingerIgnored(BKI_Finger.pinky, pinky);
                    //}
                    //EditorGUILayout.EndVertical();
                }
                EditorGUILayout.EndHorizontal();
            }
            GUILayout.EndArea();

            if (hand == BKI_Hand.right)
            {
                if (rightHandValues != values && values.gestureIdentifier != pickerWindowGNameRh)
                {
                    ResetPickerWindow(false, true, false);
                    rightHandValues = values;
                }
            }
            else if (leftHandValues != values && values.gestureIdentifier != pickerWindowGNameLh)
            {
                ResetPickerWindow(true, false, false);
                leftHandValues = values;
            }
        }
 private void RefreezeHand(BKI_Hand hand)
 {
     FreezeHand(hand);
 }
Пример #28
0
        private BKI_SingleGestureClass SaveObjectToResources(BKI_SingleGestureClass o, BKI_Hand hand)
        {
            string path = "";

            switch (hand)
            {
            case BKI_Hand.left:
            {
                path = RESOURCES_LEFTHAND_PATH + "/lhGes_" + o.gestureIdentifier + ".asset";
            }
            break;

            case BKI_Hand.right:
            {
                path = RESOURCES_RIGHTHAND_PATH + "/rhGes_" + o.gestureIdentifier + ".asset";
            }
            break;
            }

            AssetDatabase.CreateAsset(o, path);
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();

            return(AssetDatabase.LoadAssetAtPath <BKI_SingleGestureClass>(path));
        }
 public int GetFingerPriorityValue(BKI_Hand hand)
 {
     return((hand == BKI_Hand.right) ? priorityValueRh : priorityValueLh);
 }
Пример #30
0
        // Draws the base hand and the individual fingers dependent on selected values.
        private void DrawHandImages(BKI_Hand hand, BKI_GestureMirrorClass values, Rect pos, float scale = 1)
        {
            float flipValueWidth, flipValuePos;
            float valueHeight = 1 / scale;
            Rect  newPos      = pos;

            if (hand == BKI_Hand.right)
            {
                flipValueWidth = 1;
                flipValuePos   = 0;
                newPos.x      += 15;
            }
            else
            {
                flipValueWidth = -1;
                flipValuePos   = 1;
            }

            flipValueWidth /= scale;

            if (values.GetFingerState(BKI_Finger.thumb) == BKI_FingerState.FingerIgnored)
            {
                GUI.DrawTextureWithTexCoords(newPos, thumbHandCrossText2D, new Rect(flipValuePos, 0, flipValueWidth, valueHeight));
            }
            else if (!(values.GetFingerState(BKI_Finger.thumb) == BKI_FingerState.fingerIn))
            {
                GUI.DrawTextureWithTexCoords(newPos, thumbHandText2D, new Rect(flipValuePos, 0, flipValueWidth, valueHeight));
            }

            if (values.GetFingerState(BKI_Finger.index) == BKI_FingerState.FingerIgnored)
            {
                GUI.DrawTextureWithTexCoords(newPos, indexHandCrossText2D, new Rect(flipValuePos, 0, flipValueWidth, valueHeight));
            }
            else if (!(values.GetFingerState(BKI_Finger.index) == BKI_FingerState.fingerIn))
            {
                GUI.DrawTextureWithTexCoords(newPos, indexHandText2D, new Rect(flipValuePos, 0, flipValueWidth, valueHeight));
            }

            if (values.GetFingerState(BKI_Finger.middle) == BKI_FingerState.FingerIgnored)
            {
                GUI.DrawTextureWithTexCoords(newPos, middleHandCrossText2D, new Rect(flipValuePos, 0, flipValueWidth, valueHeight));
            }
            else if (!(values.GetFingerState(BKI_Finger.middle) == BKI_FingerState.fingerIn))
            {
                GUI.DrawTextureWithTexCoords(newPos, middleHandText2D, new Rect(flipValuePos, 0, flipValueWidth, valueHeight));
            }

            if (values.GetFingerState(BKI_Finger.ring) == BKI_FingerState.FingerIgnored)
            {
                GUI.DrawTextureWithTexCoords(newPos, ringHandCrossText2D, new Rect(flipValuePos, 0, flipValueWidth, valueHeight));
            }
            else if (!(values.GetFingerState(BKI_Finger.ring) == BKI_FingerState.fingerIn))
            {
                GUI.DrawTextureWithTexCoords(newPos, ringHandText2D, new Rect(flipValuePos, 0, flipValueWidth, valueHeight));
            }

            if (values.GetFingerState(BKI_Finger.pinky) == BKI_FingerState.FingerIgnored)
            {
                GUI.DrawTextureWithTexCoords(newPos, pinkyHandCrossText2D, new Rect(flipValuePos, 0, flipValueWidth, valueHeight));
            }
            else if (!(values.GetFingerState(BKI_Finger.pinky) == BKI_FingerState.fingerIn))
            {
                GUI.DrawTextureWithTexCoords(newPos, pinkyHandText2D, new Rect(flipValuePos, 0, flipValueWidth, valueHeight));
            }

            GUI.DrawTextureWithTexCoords(newPos, baseHandText2D, new Rect(flipValuePos, 0, flipValueWidth, valueHeight));
        }