internal float Pich2RealseTailDistance(Hi5_Glove_Interaction_Item item, out bool ContactIsSelf)
        {
            float distance = Hi5_Interaction_Const.GetDistance(mChildNodes[4].transform, item, out ContactIsSelf);

            //Debug.DrawLine(mChildNodes[4].transform.position, item.transform.position, Color.red, 1);
            return(distance);
        }
 override internal protected void Init(Hi5_Glove_Interaction_Item itemObject, Hi5_Obiect_State_Manager state)
 {
     mObjectItem = itemObject;
     mState      = state;
     mMoveObject = new Hi5_Object_Move(itemObject, state);
     mMoveObject.SetAttribute(mObjectItem.AirFrictionRate, mObjectItem.PlaneFrictionRate);
 }
        public static float GetDistance(Transform palm, Hi5_Glove_Interaction_Item ObjectItem, out bool ContactIsSelf)
        {
            if (palm == null || ObjectItem == null)
            {
                ContactIsSelf = false;
                return(0.0f);
            }
            Ray        ray = new Ray(palm.position, ObjectItem.transform.position - palm.position);
            RaycastHit hit;

            if (Physics.Raycast(ray, out hit, Mathf.Infinity))
            {
                if (hit.transform == ObjectItem.transform || hit.transform.parent == ObjectItem.transform)
                {
                    ContactIsSelf = true;
                    float distance = Vector3.Distance(palm.position, hit.point);
                    return(distance);
                }
                else
                {
                    ContactIsSelf = false;
                    return(0.0f);
                }
            }
            else
            {
                ContactIsSelf = false;
                return(0.0f);
            }
        }
        void Pinch2Object(string messageKey, object param1, object param2, object param3, object param4)
        {
            if (messageKey.CompareTo(Hi5_MessageKey.messagePinchObject2) == 0)
            {
                List <int> objectIds            = param1 as List <int>;
                Hi5_Glove_Interaction_Hand hand = param2 as Hi5_Glove_Interaction_Hand;
                int objectId = (int)param3;
                if (mObjectDic.ContainsKey(objectId))
                {
                    //ruige 加入判断
                    Hi5_Glove_Interaction_Item pinchObject = mObjectDic[objectId];
                    if (pinchObject != null && pinchObject.mObjectType == EObject_Type.ECommon)
                    {
                        hand.AddPinch2Object(pinchObject.transform, hand.mVisibleHand.palm);

                        pinchObject.SetIsKinematic(true);
                        pinchObject.ChangeState(E_Object_State.EPinch);
                        Hi5_Object_State_Base state = pinchObject.mstatemanager.GetState(E_Object_State.EPinch);
                        if (state != null && (state is Hi5_Object_State_Pinch))
                        {
                            Hi5_Object_State_Pinch pinchState = state as Hi5_Object_State_Pinch;
                            if (hand.m_IsLeftHand)
                            {
                                pinchState.SetPinchHand(Hi5_Object_Pinch_Type.ELeft, hand);
                            }
                            else
                            {
                                pinchState.SetPinchHand(Hi5_Object_Pinch_Type.ERight, hand);
                            }
                        }
                    }
                }
            }
        }
        //bool isColliderStaticObjectGrasp = false;

        internal bool IsTouchStaticObject()
        {
            if (trigger != null && trigger.IsTiggerObject)
            {
                Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(trigger.mTiggerObjectId);
                if (item != null)
                {
                    if (item.state == E_Object_State.EStatic)
                    {
                        return(true);
                    }
                    else
                    {
                        //Debug.Log ("1");
                        return(false);
                    }
                }
                else
                {
                    //Debug.Log ("2");
                    return(false);
                }
            }
            else
            {
                //Debug.Log ("3");
                return(false);
            }
        }
        protected void init(Hi5_Glove_Interaction_Item objectItem)
        {
            mItem = objectItem;
            Hi5_Object_State_Pinch pinchState = new Hi5_Object_State_Pinch();

            pinchState.Init(objectItem, this);
            Hi5_Object_State_Static releaseState = new Hi5_Object_State_Static();

            releaseState.Init(objectItem, this);
            Hi5_Object_State_Move moveState = new Hi5_Object_State_Move();

            moveState.Init(objectItem, this);
            Hi5_Object_State_Clap clapState = new Hi5_Object_State_Clap();

            clapState.Init(objectItem, this);
            Hi5_Object_State_Poke pokeState = new Hi5_Object_State_Poke();

            pokeState.Init(objectItem, this);
            //if (Hi5_Interaction_Const.TestFlyMoveNoUsedGravity)
            {
                Hi5_Object_State_Fly_Lift flyLift = new Hi5_Object_State_Fly_Lift();
                flyLift.Init(objectItem, this);
                mDicState.Add(E_Object_State.EFlyLift, flyLift);
            }
            mDicState.Add(E_Object_State.EPinch, pinchState);
            mDicState.Add(E_Object_State.EStatic, releaseState);
            mDicState.Add(E_Object_State.EMove, moveState);
            mDicState.Add(E_Object_State.EClap, clapState);
            mDicState.Add(E_Object_State.EPoke, pokeState);
            mCurrentState = releaseState;
        }
 public void AddObject(Hi5_Glove_Interaction_Item item, int key)
 {
     if (!mObjectDic.ContainsKey(key))
     {
         mObjectDic.Add(key, item);
     }
 }
        internal static Hi5_Obiect_State_Manager CreateState(Hi5_Glove_Interaction_Item objectItem)
        {
            Hi5_Obiect_State_Manager state = new Hi5_Obiect_State_Manager();

            state.init(objectItem);
            return(state);
        }
        internal bool IsClap()
        {
            if (mHand.gameObject.GetComponent <Hi5_Glove_Property>() != null)
            {
                if (!mHand.gameObject.GetComponent <Hi5_Glove_Property>().Property_Data.IsClap)
                {
                    return(false);
                }
            }
            int objectId = 0;
            Hi5_Glove_Interaction_Finger_Type fingTypeOne;
            Hi5_Glove_Interaction_Finger_Type fingTypeTwo;
            bool isClap = mHand.mState.mJudgeMent.IsClap(out objectId, out fingTypeOne, out fingTypeTwo);

            Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(objectId);

            if (item != null && (item.state == E_Object_State.EStatic || item.state == E_Object_State.EPoke))
            {
                Hi5_Object_State_Clap clapState = item.mstatemanager.GetState(E_Object_State.EClap) as Hi5_Object_State_Clap;
                clapState.fingerTypeOne = fingTypeOne;
                clapState.fingerTypeTwo = fingTypeTwo;
                clapState.hand          = mHand;
                if (mHand.m_IsLeftHand)
                {
                    clapState.handType = Hi5_Object_State_Clap.Hi5_Object_Clap_Type.ELeft;
                }
                else
                {
                    clapState.handType = Hi5_Object_State_Clap.Hi5_Object_Clap_Type.ERight;
                }
                Hi5_Glove_Interaction_Hand handTemp = mHand;
                item.mstatemanager.ChangeState(E_Object_State.EClap);
                Hi5_Glove_State_Clap handState = null;
                mState.GetGloveState <Hi5_Glove_State_Clap> (E_Hand_State.EClap, out handState);
                if (handState != null)
                {
                    handState.objectId = objectId;
                }

                mState.ChangeState(E_Hand_State.EClap);
                {
                    Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(item.idObject,
                                                                                                                    item.mObjectType,
                                                                                                                    handTemp.m_IsLeftHand? EHandType.EHandLeft: EHandType.EHandRight,
                                                                                                                    EEventObjectType.EClap);
                    Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null);
                }

                {
                    Hi5_Glove_Interaction_Hand_Event_Data data = Hi5_Glove_Interaction_Hand_Event_Data.Instance(item.idObject,
                                                                                                                handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight,
                                                                                                                EEventHandType.EClap);
                    Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageHandEvent, (object)data, null);
                }

                return(true);
            }
            return(false);
        }
示例#10
0
        internal bool IsFlyPinch()
        {
            List <int> pinchs4;
            //isPinch = Hand.mState.mJudgeMent.IsPinch(out pinchs4, out ObjectId);
            //if(!isPinch)
            int  ObjectId = -1000;
            bool isPinch  = mHand.mState.mJudgeMent.IsFlyIngPinch(out pinchs4, out ObjectId);

            if (isPinch)
            {
                Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(ObjectId);
                float dis = Mathf.Abs(item.PlaneY - item.transform.position.y);
                if (item != null && item.state == E_Object_State.EMove &&
                    (item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EThrowMove || item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EFree) &&
                    !item.mstatemanager.GetMoveState().IsProtectionFly() && dis > (0.1f * item.GetHeight()))
                {
                    if (item.mObjectType == EObject_Type.ECommon)
                    {
                        Hi5_Interaction_Message.GetInstance().DispenseMessage(Hi5_MessageKey.messageFlyPinchObject, pinchs4, mHand, ObjectId);
                        Hi5_Glove_State_Base baseState = mState.GetBaseState(E_Hand_State.EPinch);
                        if (baseState != null)
                        {
                            (baseState as Hi5_Glove_State_Pinch).isPinchCollider = true;
                            (baseState as Hi5_Glove_State_Pinch).objectId        = ObjectId;
                        }

                        item.transform.position = mHand.GetThumbAndMiddlePoin();


                        item.CleanRecord();
                        mState.ChangeState(E_Hand_State.EPinch);
                        Hi5_Glove_Interaction_Hand handTemp = mHand;

//						if (handTemp.m_IsLeftHand)
//						{
//							Debug.Log ("Left pinch");
//						}
                        {
                            Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(item.idObject,
                                                                                                                            item.mObjectType,
                                                                                                                            handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight,
                                                                                                                            EEventObjectType.EPinch);
                            Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null);
                        }

                        {
                            Hi5_Glove_Interaction_Hand_Event_Data data = Hi5_Glove_Interaction_Hand_Event_Data.Instance(item.idObject,
                                                                                                                        handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight,
                                                                                                                        EEventHandType.EPinch);
                            Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageHandEvent, (object)data, null);
                        }
                        return(true);
                    }
                }
            }
            return(false);
        }
        private bool IsRealese()
        {
            Hi5_Glove_Interaction_Item itemObject = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(objectId);

            if (itemObject == null)
            {
                return(false);
            }
            List <Collider> triggers = itemObject.GetTriggers();

            if (triggers != null && triggers.Count > 0)
            {
                foreach (Collider item in triggers)
                {
                    if (item.gameObject.GetComponent <Hi5_Glove_Collider_Finger>() != null &&
                        item.gameObject.GetComponent <Hi5_Glove_Collider_Finger>().mFinger != null &&
                        item.gameObject.GetComponent <Hi5_Glove_Collider_Finger>().mFinger.mHand != null)
                    {
                        if (Hand.m_IsLeftHand)
                        {
                            if (item.gameObject.GetComponent <Hi5_Glove_Collider_Finger>().mFinger.mHand.m_IsLeftHand)
                            {
                                return(false);
                            }
                        }
                        else
                        {
                            if (!item.gameObject.GetComponent <Hi5_Glove_Collider_Finger>().mFinger.mHand.m_IsLeftHand)
                            {
                                return(false);
                            }
                        }
                    }
                    else if (item.gameObject.GetComponent <Hi5_Glove_Collider_Palm>() != null &&
                             item.gameObject.GetComponent <Hi5_Glove_Collider_Palm>().mHand != null)
                    {
                        if (Hand.m_IsLeftHand)
                        {
                            if (item.gameObject.GetComponent <Hi5_Glove_Collider_Palm>().mHand.m_IsLeftHand)
                            {
                                return(false);
                            }
                        }
                        else if (Hand.m_IsLeftHand)
                        {
                            if (!item.gameObject.GetComponent <Hi5_Glove_Collider_Palm>().mHand.m_IsLeftHand)
                            {
                                return(false);
                            }
                        }
                    }
                }
            }
            return(true);
        }
示例#12
0
        internal bool IsPinch2()
        {
            List <int> pinchs2;
            List <Hi5_Glove_Interaction_Finger> fingers = null;
            int  ObjectId = -1000;
            bool isPinch2 = mHand.mState.mJudgeMent.IsPinch2(out pinchs2, out fingers, out ObjectId);

            Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(ObjectId);


            if (item != null &&
                item.mObjectType == EObject_Type.ECommon &&
                item.mstatemanager != null &&
                item.mstatemanager.GetMoveState() != null &&
                (item.state == E_Object_State.EStatic || item.state == E_Object_State.EPinch || item.state == E_Object_State.EFlyLift || item.state == E_Object_State.EClap ||
                 (item.state == E_Object_State.EMove && item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EPlaneMove) ||
                 (item.state == E_Object_State.EMove && item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EFree)))
            {
                if (isPinch2 && pinchs2 != null && pinchs2.Count > 0 && fingers != null)
                {
                    foreach (Hi5_Glove_Interaction_Finger tempItem in fingers)
                    {
                        tempItem.NotifyEnterPinch2State();
                    }
                    Hi5_Interaction_Message.GetInstance().DispenseMessage(Hi5_MessageKey.messagePinchObject2, pinchs2, mHand, ObjectId);
                    Hi5_Glove_State_Base baseState = mState.GetBaseState(E_Hand_State.EPinch2);
                    if (baseState != null)
                    {
                        (baseState as Hi5_Glove_State_Pinch2).objectId = ObjectId;
                    }

                    item.CleanRecord();
                    Hi5_Glove_Interaction_Hand handTemp = mHand;
                    mState.ChangeState(E_Hand_State.EPinch2);
                    {
                        Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(item.idObject,
                                                                                                                        item.mObjectType,
                                                                                                                        handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight,
                                                                                                                        EEventObjectType.EPinch);
                        Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null);
                    }

                    {
                        Hi5_Glove_Interaction_Hand_Event_Data data = Hi5_Glove_Interaction_Hand_Event_Data.Instance(item.idObject,
                                                                                                                    handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight,
                                                                                                                    EEventHandType.EPinch);
                        Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageHandEvent, (object)data, null);
                    }
                    return(true);
                }
            }
            return(false);
        }
示例#13
0
        internal bool IsLift()
        {
            int objectId = 0;
            // Hi5_Glove_Interaction_Finger_Type fingType;
            bool islift = mHand.mState.mJudgeMent.IsLift(out objectId);

            Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(objectId);

            if (item != null &&
                item.mObjectType == EObject_Type.ECommon &&
                (item.state == E_Object_State.EStatic ||                 /*|| item.state == E_Object_State.EPinch || item.state == E_Object_State.EFlyLift || item.state == E_Object_State.EClap*/
                 (item.state == E_Object_State.EMove)) &&
                islift)
            {
                Hi5_Glove_State_Lift liftState = mHand.mState.GetBaseState(E_Hand_State.ELift) as Hi5_Glove_State_Lift;
                liftState.objectId = objectId;
                Hi5_Glove_Interaction_Hand handTemp = mHand;
                Hi5_Interaction_Message.GetInstance().DispenseMessage(Hi5_MessageKey.messageLiftObject, mHand, objectId);
                if (Hi5_Interaction_Const.TestChangeState)
                {
                    mState.ChangeState(E_Hand_State.ELift);
                }
                {
                    Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(item.idObject,
                                                                                                                    item.mObjectType,
                                                                                                                    handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight,
                                                                                                                    EEventObjectType.ELift);
                    Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null);
                }

                {
                    Hi5_Glove_Interaction_Hand_Event_Data data = Hi5_Glove_Interaction_Hand_Event_Data.Instance(item.idObject,
                                                                                                                handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight,
                                                                                                                EEventHandType.ELift);
                    Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageHandEvent, (object)data, null);
                }


                //Hi5_Glove_Interaction_Object_Event_Data data = new Hi5_Glove_Interaction_Object_Event_Data();
                //if (Hand.m_IsLeftHand)
                //    data.mHandType = EHandType.EHandLeft;
                //else
                //    data.mHandType = EHandType.EHandRight;
                //data.mObjectType = item.mObjectType;
                //data.mEventType = EEventType.ELift;
                //data.mObjectId = item.idObject;
                //Hi5InteractionManger.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null);
                return(true);
            }
            return(false);
        }
        void FlyPinchObject(string messageKey, object param1, object param2, object param3, object param4)
        {
            if (messageKey.CompareTo(Hi5_MessageKey.messageFlyPinchObject) == 0)
            {
                List <int> objectIds            = param1 as List <int>;
                Hi5_Glove_Interaction_Hand hand = param2 as Hi5_Glove_Interaction_Hand;
                int objectId = (int)param3;

                if (mObjectDic.ContainsKey(objectId))
                {
                    // Debug.Log("FlyPinchObject");
                    Hi5_Glove_Interaction_Item pinchObject = mObjectDic[objectId];
                    if (pinchObject != null && pinchObject.mObjectType == EObject_Type.ECommon)
                    {
                        hand.AddPinchObject(pinchObject.transform, hand.mVisibleHand.palm);
                        pinchObject.SetIsKinematic(true);

                        //pinchObject.transform.position = hand.mPalm.transform.position;
                        pinchObject.ChangeState(E_Object_State.EPinch);
                        Hi5_Object_State_Base state = pinchObject.mstatemanager.GetState(E_Object_State.EPinch);
                        if (state != null && (state is Hi5_Object_State_Pinch))
                        {
                            Hi5_Object_State_Pinch pinchState = state as Hi5_Object_State_Pinch;
                            //pinchState.isTestRelease = true;
                            if (hand.m_IsLeftHand)
                            {
                                pinchState.SetPinchHand(Hi5_Object_Pinch_Type.ELeft, hand);
                            }
                            else
                            {
                                pinchState.SetPinchHand(Hi5_Object_Pinch_Type.ERight, hand);
                            }
                        }
                    }
                }
                //if (objectIds != null && objectIds.Count > 0 && mObjectDic.ContainsKey(objectIds[0]))
                //{
                //    Hi5_Glove_Interraction_Item pinchObject = mObjectDic[objectIds[0]];
                //    hand.AddPinchObject(pinchObject.transform);
                //    pinchObject.SetIsKinematic(true);
                //    pinchObject.ChangeState(E_Object_State.EPinch);
                //}
            }
        }
示例#15
0
        void PinchObject(string messageKey, object param1, object param2, object param3, object param4)
        {
            if (messageKey.CompareTo(Hi5_MessageKey.messagePinchObject) == 0)
            {
                List <int> objectIds            = param1 as List <int>;
                Hi5_Glove_Interaction_Hand hand = param2 as Hi5_Glove_Interaction_Hand;
                int objectId = (int)param3;
                if (mObjectDic.ContainsKey(objectId))
                {
                    Hi5_Glove_Interaction_Item pinchObject = mObjectDic[objectId];
                    hand.AddPinchObject(pinchObject.transform);
                    pinchObject.SetIsKinematic(true);

                    pinchObject.ChangeState(E_Object_State.EPinch);

                    Hi5_Object_State_Base state = pinchObject.mstatemanager.GetState(E_Object_State.EPinch);
                    if (state != null && (state is Hi5_Object_State_Pinch))
                    {
                        Hi5_Object_State_Pinch pinchState = state as Hi5_Object_State_Pinch;
                        if (hand.m_IsLeftHand)
                        {
                            pinchState.SetPinchHand(Hi5_Object_Pinch_Type.ELeft, hand);
                        }
                        else
                        {
                            pinchState.SetPinchHand(Hi5_Object_Pinch_Type.ERight, hand);
                        }
                    }
                }
                //if (objectIds != null && objectIds.Count > 0 && mObjectDic.ContainsKey(objectIds[0]))
                //{
                //    Hi5_Glove_Interraction_Item pinchObject = mObjectDic[objectIds[0]];
                //    hand.AddPinchObject(pinchObject.transform);
                //    pinchObject.SetIsKinematic(true);
                //    pinchObject.ChangeState(E_Object_State.EPinch);
                //}
            }
        }
示例#16
0
        //bool isColliderStaticObjectGrasp = false;

        internal bool IsTouchStaticObject(out int ObjctID)
        {
            ObjctID = -1000;
            bool isTriggerObjectId = false;

            foreach (Hi5_Interaction_Item_Collider item in itemColliders)
            {
                if (item.trigger != null && item.trigger.IsTriggerObject)
                {
                    Hi5_Glove_Interaction_Item itemTemp = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(item.trigger.mTriggerObjectId);
                    if (itemTemp != null)
                    {
                        if (itemTemp.state == E_Object_State.EStatic || itemTemp.state == E_Object_State.EFlyLift || itemTemp.state == E_Object_State.EMove)
                        {
                            ObjctID           = itemTemp.idObject;
                            isTriggerObjectId = true;
                            break;
                        }
                    }
                }
            }
            return(isTriggerObjectId);
        }
 void LiftObject(string messageKey, object param1, object param2, object param3, object param4)
 {
     //Debug.Log("LiftObject");
     // Hi5_MessageKey.messageLiftObject, Hand, ObjectId
     if (messageKey.CompareTo(Hi5_MessageKey.messageLiftObject) == 0)
     {
         Hi5_Glove_Interaction_Hand hand = param1 as Hi5_Glove_Interaction_Hand;
         int id = (int)param2;
         if (mObjectDic.ContainsKey(id))
         {
             Hi5_Glove_Interaction_Item pinchObject = mObjectDic[id];
             if (pinchObject != null && pinchObject.mObjectType == EObject_Type.ECommon)
             {
                 Hi5_Object_State_Base state = pinchObject.mstatemanager.GetState(E_Object_State.EFlyLift);
                 if (state is Hi5_Object_State_Fly_Lift)
                 {
                     (state as Hi5_Object_State_Fly_Lift).hand = hand;
                 }
                 pinchObject.mstatemanager.ChangeState(E_Object_State.EFlyLift);
             }
         }
     }
 }
示例#18
0
        internal bool IsFlyIngPinch(out List <int> results, out int ObjectId)
        {
            //if (Hi5_Interaction_Const.TestFlyMoveNoUsedGravity && Hand.mHandCollider != null)
            {
                int        count = 0;
                List <int> handList;
                if (Hand.mHandFlyCollider.IsFlyPinch(out handList))
                {
                    // Debug.Log("Hand.mHandCollider.IsFlyPinch");
                    bool thumb = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EThumb].IsFlyPinch;
                    //Debug.Log("Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EThumb] angel "+ Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EThumb].flyPinch);
                    if (thumb)
                    {
                        count++;
                    }
                    bool index = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex].IsFlyPinch;
                    //Debug.Log("Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex] angel " + Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex].flyPinch);
                    if (index)
                    {
                        count++;
                    }

                    bool middle = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle].IsFlyPinch;
                    //Debug.Log("Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle] angel " + Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle].flyPinch);
                    if (middle)
                    {
                        count++;
                    }

                    bool ring = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.ERing].IsFlyPinch;
                    // Debug.Log("Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.ring] angel " + Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.ERing].flyPinch);
                    if (ring)
                    {
                        count++;
                    }

                    bool pinky = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EPinky].IsFlyPinch;
                    if (pinky)
                    {
                        count++;
                    }
                    if (count >= 2)
                    {
                        results = handList;
                        if (results != null)
                        {
                            float distanceMin   = 20.0f;
                            int   distanceminId = -1;
                            for (int i = 0; i < results.Count; i++)
                            {
                                int objectIdTemp = results[i];
                                Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(objectIdTemp);
                                //if (item != null)
                                //{
                                //    Debug.Log("itemstate"+ item.state);
                                //}
                                if (item != null && item.state == E_Object_State.EMove &&
                                    //&& (item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EThrowMove || item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EFree)
                                    //&&
                                    !item.mstatemanager.GetMoveState().IsProtectionFly())
                                {
                                    bool  ContactIsSelf = false;
                                    float distance      = Hi5_Interaction_Const.GetDistance(mHand.mPalm.transform, item, out ContactIsSelf);
                                    if (ContactIsSelf)
                                    {
                                        if (distance < distanceMin)
                                        {
                                            distanceMin   = distance;
                                            distanceminId = objectIdTemp;
                                        }
                                    }
                                }
                            }
                            if (distanceminId != -1)
                            {
                                ObjectId = distanceminId;
                                //Hi5_Glove_Interraction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(ObjectId);
                                //item.transform.position = Hand.mPalm.transform.position;
                                return(true);
                            }
                            else
                            {
                                results  = null;
                                ObjectId = -1;
                                return(false);
                            }
                        }
                        else
                        {
                            results  = null;
                            ObjectId = -1;
                            return(false);
                        }
                    }
                    else
                    {
                        results  = null;
                        ObjectId = -1;
                        return(false);
                    }
                }
                else
                {
                    results  = null;
                    ObjectId = -1;
                    return(false);
                }
            }
        }
示例#19
0
        internal bool IsPinch()
        {
            List <int> pinchs;
            int        ObjectId = -1;
            bool       isPinch  = mHand.mState.mJudgeMent.IsPinch(out pinchs, out ObjectId);

            if (isPinch)
            {
                Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(ObjectId);
                if (item != null &&
                    item.mObjectType == EObject_Type.ECommon &&
                    item.mstatemanager != null &&
                    item.mstatemanager.GetMoveState() != null &&
                    (item.state == E_Object_State.EStatic ||
                     item.state == E_Object_State.EPinch ||
                     item.state == E_Object_State.EFlyLift ||
                     item.state == E_Object_State.EClap ||
                     (item.state == E_Object_State.EMove && item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EPlaneMove)))
                {
                    Hi5_Interaction_Message.GetInstance().DispenseMessage(Hi5_MessageKey.messagePinchObject, pinchs, mHand, ObjectId);
                    //isPinchCollider
                    Hi5_Glove_State_Base baseState = mState.GetBaseState(E_Hand_State.EPinch);
                    if (baseState != null)
                    {
                        (baseState as Hi5_Glove_State_Pinch).isPinchCollider = true;
                        (baseState as Hi5_Glove_State_Pinch).objectId        = ObjectId;
                    }

                    //Hi5_Glove_Interraction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(ObjectId);
                    if (item != null && item.state == E_Object_State.EMove &&
                        (item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EThrowMove || item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EFree) &&
                        !item.mstatemanager.GetMoveState().IsProtectionFly())
                    {
                        bool  ContactIsSelf = false;
                        float distance      = Hi5_Interaction_Const.GetDistance(mHand.mPalm.transform, item, out ContactIsSelf);
                        if (ContactIsSelf)
                        {
                            Vector3 offset = new Vector3(mHand.mPalm.transform.position.x - item.transform.position.x,
                                                         mHand.mPalm.transform.position.y - item.transform.position.y,
                                                         mHand.mPalm.transform.position.z - item.transform.position.z).normalized;
                            offset = offset * distance;
                            //item.transform.position = new Vector3(item.transform.position.x + offset.x,
                            //    item.transform.position.y + offset.y,
                            //    item.transform.position.z + offset.z);
                        }
                    }
                    item.CleanRecord();
                    Hi5_Glove_Interaction_Hand handTemp = mHand;
                    mState.ChangeState(E_Hand_State.EPinch);

//					if (handTemp.m_IsLeftHand)
//					{
//						Debug.Log ("Left pinch");
//					}
                    {
                        Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(item.idObject,
                                                                                                                        item.mObjectType,
                                                                                                                        handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight,
                                                                                                                        EEventObjectType.EPinch);
                        Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null);
                    }

                    {
                        Hi5_Glove_Interaction_Hand_Event_Data data = Hi5_Glove_Interaction_Hand_Event_Data.Instance(item.idObject,
                                                                                                                    handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight,
                                                                                                                    EEventHandType.EPinch);
                        Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageHandEvent, (object)data, null);
                    }
                    //Hi5_Glove_Interaction_Object_Event_Data data = new Hi5_Glove_Interaction_Object_Event_Data();
                    //if (Hand.m_IsLeftHand)
                    //    data.mHandType = EHandType.EHandLeft;
                    //else
                    //    data.mHandType = EHandType.EHandRight;
                    //data.mObjectType = item.mObjectType;
                    //data.mEventType = EEventType.EPinch;
                    //data.mObjectId = item.idObject;
                    //Hi5InteractionManger.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null);

                    return(true);;
                }
                return(false);
            }
            return(false);
        }
 virtual internal protected void Init(Hi5_Glove_Interaction_Item itemObject, Hi5_Object_State_Manager state)
 {
     mObjectItem = itemObject;
     mState      = state;
 }
示例#21
0
        internal bool IsLift(out int objectId)
        {
            //if (Hi5_Interaction_Const.TestFlyMoveNoUsedGravity)
            {
                List <int> collisionIndexs;
                bool       index = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex].IsLift(out collisionIndexs);
                List <int> collisionMiddles;
                bool       middle = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle].IsLift(out collisionMiddles);
                List <int> collisionRings;
                bool       ring = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.ERing].IsLift(out collisionRings);



                List <int> collisionResults1 = null;
                if (index && middle && collisionIndexs != null && collisionMiddles != null && collisionIndexs.Count > 0 && collisionMiddles.Count > 0)
                {
                    collisionResults1 = collisionIndexs.Intersect(collisionMiddles).ToList();
                }

                List <int> collisionResults2 = null;
                if (ring && middle && collisionRings != null && collisionMiddles != null && collisionRings.Count > 0 && collisionMiddles.Count > 0)
                {
                    collisionResults2 = collisionRings.Intersect(collisionMiddles).ToList();
                }

                List <int> collisionPalms;
                int        tempId = -1;
//
                bool palm = Hand.mPalm.IsClap(out collisionPalms);
                //bool palm = Hand.mPalm.IsLift(out collisionPalms);
                List <int> collisionResult = null;
//
                if (palm && collisionPalms != null && collisionPalms.Count > 0)
                {
                    collisionResult = collisionPalms;
                }


                if (collisionResult == null && collisionResults1 != null && collisionResults1.Count > 0)
                {
                    collisionResult = collisionResults1;
                }
                else
                {
                    if (collisionResult != null && collisionResult.Count > 0 && collisionResults1 != null && collisionResults1.Count > 0)
                    {
                        List <int> collisionResultValue = collisionResult.Intersect(collisionResults1).ToList();
                        collisionResult = collisionResultValue;
                    }
                    else
                    {
                        if (collisionResults1 != null && collisionResults1.Count > 0)
                        {
                            collisionResult = collisionResults1;
                        }
                    }
                }

                if (collisionResult == null && collisionResults2 != null && collisionResults2.Count > 0)
                {
                    collisionResult = collisionResults2;
                }
                else
                {
                    if (collisionResult != null && collisionResult.Count > 0 && collisionResults2 != null && collisionResults2.Count > 0)
                    {
                        List <int> collisionResultValue = collisionResult.Intersect(collisionResults2).ToList();
                        collisionResult = collisionResultValue;
                    }
                    else
                    {
                        if (collisionResults2 != null && collisionResults2.Count > 0)
                        {
                            collisionResult = collisionResults2;
                        }
                    }
                }


                if (collisionResult != null && collisionResult.Count > 0)
                {
                    for (int i = 0; i < collisionResult.Count; i++)
                    {
                        int idObject = collisionResult[i];
                        Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(idObject);
                        if ((item.mstatemanager.State == E_Object_State.EMove && (item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EThrowMove || item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EFree)) ||
                            item.mstatemanager.State == E_Object_State.EStatic)
                        {
                            float angle = Vector3.Angle(Hi5_Interaction_Object_Manager.GetObjectManager().transform.up, -Hand.mPalm.transform.up);
                            if (angle < Hi5_Interaction_Const.FlyLiftPamlAngel && angle > 0.0f)
                            {
                                if (Hand.mPalm.mAnchor == null)
                                {
                                    Hand.mPalm.mAnchor = Hand.mPalm.transform.GetChild(0);
                                }
                                Vector3 pamlUp = -Hand.mPalm.mAnchor.up;
                                Vector3 v1     = item.transform.position - Hand.mPalm.mAnchor.position;
                                //float dotValue = Vector3.Dot(v1, pamlUp);
                                float angleVale = Vector3.Angle(v1, pamlUp);
                                //Debug.Log ("angleVale =" +angleVale);
                                if (angleVale < 0.0f)
                                {
                                    angleVale = 180.0f - angleVale;
                                }
                                //Debug.Log ("angleVale =" +angleVale);
                                if (angleVale > 85.0f)
                                {
                                }
                                else
                                {
                                    tempId = idObject;
                                }
                                break;
                            }
                        }
                    }
                    if (tempId == -1)
                    {
                        objectId = -1;
                        return(false);
                    }
                    else
                    {
                        objectId = tempId;
                        return(true);
                    }
                }
                else
                {
                    objectId = -1;
                    return(false);
                }
            }
            //else
            //{
            //    objectId = -1;
            //    return false;
            //}
        }
        internal bool IsPinch()
        {
            if (mHand.gameObject.GetComponent <Hi5_Glove_Property>() != null)
            {
                if (!mHand.gameObject.GetComponent <Hi5_Glove_Property>().Property_Data.IsPinch)
                {
                    return(false);
                }
            }

            List <int> pinchs;
            int        ObjectId = -1;
            bool       isPinch  = mHand.mState.mJudgeMent.IsPinch(out pinchs, out ObjectId);

            if (isPinch && !(mHand.GetRecognitionState() == Hi5_Glove_Gesture_Recognition_State.EFist) && !(mHand.GetRecognitionState() == Hi5_Glove_Gesture_Recognition_State.EIndexPoint))
            {
                Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(ObjectId);
                if (item != null &&
                    item.mObjectType == EObject_Type.ECommon &&
                    item.mstatemanager != null &&
                    item.mstatemanager.GetMoveState() != null &&
                    (item.state == E_Object_State.EStatic ||
                     item.state == E_Object_State.EPinch ||
                     item.state == E_Object_State.EFlyLift ||
                     item.state == E_Object_State.EClap ||
                     (item.state == E_Object_State.EMove && item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EPlaneMove)))
                {
                    Hi5_Interaction_Message.GetInstance().DispenseMessage(Hi5_MessageKey.messagePinchObject, pinchs, mHand, ObjectId);
                    //isPinchCollider
                    Hi5_Glove_State_Base baseState = mState.GetBaseState(E_Hand_State.EPinch);
                    if (baseState != null)
                    {
                        (baseState as Hi5_Glove_State_Pinch).isPinchCollider = true;
                        (baseState as Hi5_Glove_State_Pinch).objectId        = ObjectId;
                    }
                    if (item != null && item.state == E_Object_State.EMove &&
                        (item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EThrowMove || item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EFree) &&
                        !item.mstatemanager.GetMoveState().IsProtectionFly())
                    {
                        bool  ContactIsSelf = false;
                        float distance      = Hi5_Interaction_Const.GetDistance(mHand.mPalm.transform, item, out ContactIsSelf);
                        if (ContactIsSelf)
                        {
                            Vector3 offset = new Vector3(mHand.mPalm.transform.position.x - item.transform.position.x,
                                                         mHand.mPalm.transform.position.y - item.transform.position.y,
                                                         mHand.mPalm.transform.position.z - item.transform.position.z).normalized;
                            offset = offset * distance;
                        }
                    }
                    item.CleanRecord();
                    Hi5_Glove_Interaction_Hand handTemp = mHand;
                    mHand.mGestureRecognition.CleanRecord();
                    mState.ChangeState(E_Hand_State.EPinch);

                    {
                        Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(item.idObject,
                                                                                                                        item.mObjectType,
                                                                                                                        handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight,
                                                                                                                        EEventObjectType.EPinch);
                        Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null);
                    }

                    {
                        Hi5_Glove_Interaction_Hand_Event_Data data = Hi5_Glove_Interaction_Hand_Event_Data.Instance(item.idObject,
                                                                                                                    handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight,
                                                                                                                    EEventHandType.EPinch);
                        Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageHandEvent, (object)data, null);
                    }
                    return(true);;
                }
                return(false);
            }
            return(false);
        }
示例#23
0
        internal bool IsClap(out int objectId, out Hi5_Glove_Interaction_Finger_Type fingerOneType, out Hi5_Glove_Interaction_Finger_Type fingerTwoType)
        {
            List <int> collisionIndexs;
            bool       index = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex].IsClap(out collisionIndexs);
            List <int> collisionMiddles;
            bool       middle = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle].IsClap(out collisionMiddles);
            List <int> collisionRings;
            bool       ring = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.ERing].IsClap(out collisionRings);
            List <int> collisionPalms;
//			bool pinky = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EPinky].IsClap(out collisionRings);
//			List<int> collisionPinkys;
            //手腕
            bool palm = Hand.mPalm.IsClap(out collisionPalms);

            if (palm && collisionPalms != null && collisionPalms.Count > 0)
            {
                for (int i = 0; i < collisionPalms.Count; i++)
                {
                    int idObject = collisionPalms[i];
                    Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(idObject);
                    //判断夹角
                    Transform palmTransform = Hand.mPalm.transform;
                    Transform onPoint       = item.transform;
                    Vector3   temp          = onPoint.position - palmTransform.position;
                    float     tempValue     = Vector3.Dot(temp, palmTransform.up);
                    if (tempValue < 0)
                    {
                        objectId      = collisionPalms[i];
                        fingerOneType = Hi5_Glove_Interaction_Finger_Type.ENone;
                        fingerTwoType = Hi5_Glove_Interaction_Finger_Type.ENone;
                        float angelUpWorld = Vector3.Angle(palmTransform.transform.up, Hi5_Interaction_Object_Manager.GetObjectManager().transform.up);
                        if (angelUpWorld < 45.0f && angelUpWorld > 0.0f)
                        {
                            return(true);
                        }
                        else
                        {
                            objectId      = -1;
                            fingerOneType = Hi5_Glove_Interaction_Finger_Type.ENone;
                            fingerTwoType = Hi5_Glove_Interaction_Finger_Type.ENone;
                            return(false);
                        }
                    }
                }
            }

            int middleObjectId = -1;
            Hi5_Glove_Interaction_Finger_Type fingerMiddleType = Hi5_Glove_Interaction_Finger_Type.ENone;
            {
                //中指
                if (middle && collisionMiddles != null && collisionMiddles.Count > 0)
                {
                    for (int i = 0; i < collisionMiddles.Count; i++)
                    {
                        int idObject = collisionMiddles[i];
                        Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(idObject);
                        //判断夹角
                        Transform palmTransform = Hand.mPalm.transform;
                        Transform onPoint       = item.transform;
                        Vector3   temp          = onPoint.position - palmTransform.position;
                        float     tempValue     = Vector3.Dot(temp, palmTransform.up);
                        if (tempValue < 0)
                        {
                            float angelUpWorld = Vector3.Angle(palmTransform.transform.up, Hi5_Interaction_Object_Manager.GetObjectManager().transform.up);
                            //Debug.Log("angelUpWorld=" + angelUpWorld);
                            if (angelUpWorld < 45.0f && angelUpWorld > 0.0f)
                            {
                                middleObjectId   = collisionMiddles[i];
                                fingerMiddleType = Hi5_Glove_Interaction_Finger_Type.EMiddle;
                                //return true;
                            }

                            else
                            {
                                middleObjectId   = -1;
                                fingerMiddleType = Hi5_Glove_Interaction_Finger_Type.ENone;
                                //return false;
                            }
                        }
                    }
                }
            }


            int indexObjectId = -1;
            Hi5_Glove_Interaction_Finger_Type fingerIndexType = Hi5_Glove_Interaction_Finger_Type.ENone;
            {
                //index
                if (index && collisionIndexs != null && collisionIndexs.Count > 0)
                {
                    for (int i = 0; i < collisionIndexs.Count; i++)
                    {
                        int idObject = collisionIndexs[i];
                        Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(idObject);
                        //判断夹角
                        Transform palmTransform = Hand.mPalm.transform;
                        Transform onPoint       = item.transform;
                        Vector3   temp          = onPoint.position - palmTransform.position;
                        float     tempValue     = Vector3.Dot(temp, palmTransform.up);
                        if (tempValue < 0)
                        {
                            float angelUpWorld = Vector3.Angle(palmTransform.transform.up, Hi5_Interaction_Object_Manager.GetObjectManager().transform.up);
                            //Debug.Log("angelUpWorld=" + angelUpWorld);
                            if (angelUpWorld < 45.0f && angelUpWorld > 0.0f)
                            {
                                indexObjectId   = collisionIndexs[i];
                                fingerIndexType = Hi5_Glove_Interaction_Finger_Type.EIndex;
                                //return true;
                            }
                            else
                            {
                                indexObjectId   = -1;
                                fingerIndexType = Hi5_Glove_Interaction_Finger_Type.ENone;
                                //return false;
                            }
                        }
                    }
                }
            }

            int ringObjectId = -1;
            Hi5_Glove_Interaction_Finger_Type fingerRingType = Hi5_Glove_Interaction_Finger_Type.ENone;

            {
                //ring
                if (ring && collisionRings != null && collisionRings.Count > 0)
                {
                    for (int i = 0; i < collisionRings.Count; i++)
                    {
                        int idObject = collisionRings[i];
                        Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(idObject);
                        //判断夹角
                        Transform palmTransform = Hand.mPalm.transform;
                        Transform onPoint       = item.transform;
                        Vector3   temp          = onPoint.position - palmTransform.position;
                        float     tempValue     = Vector3.Dot(temp, palmTransform.up);
                        if (tempValue < 0)
                        {
                            float angelUpWorld = Vector3.Angle(palmTransform.transform.up, Hi5_Interaction_Object_Manager.GetObjectManager().transform.up);
                            if (angelUpWorld < 45.0f && angelUpWorld > 0.0f)
                            {
                                ringObjectId   = collisionRings[i];
                                fingerRingType = Hi5_Glove_Interaction_Finger_Type.EMiddle;
                                //return true;
                            }

                            else
                            {
                                ringObjectId   = -1;
                                fingerRingType = Hi5_Glove_Interaction_Finger_Type.ENone;
                                //return false;
                            }
                        }
                    }
                }
            }

            if (middleObjectId != -1 && indexObjectId != -1 && middleObjectId == indexObjectId)
            {
                objectId      = middleObjectId;
                fingerOneType = Hi5_Glove_Interaction_Finger_Type.EMiddle;
                fingerTwoType = Hi5_Glove_Interaction_Finger_Type.EIndex;
                return(true);
            }
            if (middleObjectId != -1 && ringObjectId != -1 && middleObjectId == ringObjectId)
            {
                objectId      = middleObjectId;
                fingerOneType = Hi5_Glove_Interaction_Finger_Type.EMiddle;
                fingerTwoType = Hi5_Glove_Interaction_Finger_Type.ERing;
                return(true);
            }
            if (indexObjectId != -1 && ringObjectId != -1 && indexObjectId == ringObjectId)
            {
                objectId      = ringObjectId;
                fingerOneType = Hi5_Glove_Interaction_Finger_Type.EIndex;
                fingerTwoType = Hi5_Glove_Interaction_Finger_Type.ERing;
                return(true);
            }

            else
            {
                objectId      = -1;
                fingerOneType = Hi5_Glove_Interaction_Finger_Type.ENone;
                fingerTwoType = Hi5_Glove_Interaction_Finger_Type.ENone;
                return(false);
            }
        }
示例#24
0
        private bool IsPinchOne(out List <int> pinchs, out int ObjectId)
        {
            bool       resultbool = false;
            List <int> thumbs;
            bool       thumb = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EThumb].IsPinchTrigger(out thumbs);
            List <int> indexs;
            bool       index = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex].IsPinchTrigger(out indexs);
            List <int> mids;
            bool       mid = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle].IsPinchTrigger(out mids);
            List <int> rings;
            bool       ring = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.ERing].IsPinchTrigger(out rings);

            List <int> results = null;

            if (thumb)
            {
                if (index && mid)
                {
                    List <int> intersects = indexs.Intersect(mids).ToList();
                    if (intersects != null && intersects.Count > 0)
                    {
                        results = thumbs.Intersect(intersects).ToList();
                    }
                }
                else if (ring && mid)
                {
                    List <int> intersects = rings.Intersect(mids).ToList();
                    if (intersects != null && intersects.Count > 0)
                    {
                        results = thumbs.Intersect(intersects).ToList();
                    }
                }
            }
            int distanceminId = -1;

            if (results != null && results.Count > 0)
            {
                List <int> listresult = new List <int>();
                if (Hand.mPalm != null)
                {
                    List <int> removeIds = new List <int>();
                    foreach (int id in results)
                    {
                        Transform temp = null;
                        //mPalm.JudgeObjectHandInside();
                        List <Hi5_Glove_Interaction_Item> array = new List <Hi5_Glove_Interaction_Item>();
                        Hi5_Interaction_Message.GetInstance().DispenseMessage(Hi5_MessageKey.messageGetObjecById, (object)id, (object)array);

                        if (array != null && array.Count > 0)
                        {
                            Transform value = array[0].transform;
                            if (!Hand.mPalm.JudgeObjectHandInside(value))
                            {
                                removeIds.Add(id);
                            }
                        }
                        //else
                        //    Debug.Log("temp = empty");
                    }

                    listresult = results.Except(removeIds).ToList();
                }
                float distanceMin = 20.0f;

                for (int i = 0; i < listresult.Count; i++)
                {
                    int objectIdTemp = listresult[i];
                    Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(objectIdTemp);
                    if (item != null)
                    {
                        bool  ContactIsSelf = false;
                        float distance      = Hi5_Interaction_Const.GetDistance(mHand.mPalm.transform, item, out ContactIsSelf);
                        if (ContactIsSelf)
                        {
                            if (distance < distanceMin)
                            {
                                distanceMin   = distance;
                                distanceminId = objectIdTemp;
                            }
                        }
                    }
                }
                //没用

                if (listresult != null && listresult.Count > 0)
                {
                    pinchs = results;
                    if (thumb)
                    {
                        Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EThumb].NotifyEnterPinchState();
                    }
                    if (index)
                    {
                        Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex].NotifyEnterPinchState();
                    }
                    if (mid)
                    {
                        Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle].NotifyEnterPinchState();
                    }
                    if (ring)
                    {
                        Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.ERing].NotifyEnterPinchState();
                    }
                    resultbool = true;
                }
                else
                {
                    pinchs = null;
                }
            }
            else
            {
                pinchs = null;
            }

            if (distanceminId != -1)
            {
                ObjectId = distanceminId;
                return(true);
            }
            else
            {
                ObjectId = -1;
                return(false);
            }
        }
示例#25
0
        internal bool IsPinch2(out List <int> results, out List <Hi5_Glove_Interaction_Finger> fingers, out int ObjectId)
        {
            //resultValues = null;
            results = null;
            List <int> thumbs;
            bool       index = false;

            List <int> indexcs;
            bool       index1 = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex].IsPinch2Trigger(out indexcs);

            if (index1 && indexcs != null)
            {
            }

            bool thumb = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EThumb].IsPinch2TailTrigger(out thumbs);

            if (thumb && thumbs != null)
            {
                List <int> indexs;
                index = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex].IsPinch2Trigger(out indexs);
                if (index && indexs != null)
                {
                    //Debug.Log ("pinch2 Index");

                    foreach (int indexTemp in indexs)
                    {
                        //Debug.Log ("indexIndex" + indexTemp);
                    }
                    List <int> intersects = indexs.Intersect(thumbs).ToList();
                    if (intersects != null)
                    {
                        results = intersects;
                    }
                }

                if (results == null)
                {
                    //Debug.Log ("pinch2 middle");

                    List <int> middles;
                    bool       middle = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle].IsPinch2Trigger(out middles);
                    if (middle && middles != null)
                    {
//						foreach (int indexTemp in middles)
//						{
//							Debug.Log ("middleIndex" + indexTemp);
//						}
                        List <int> intersects = middles.Intersect(thumbs).ToList();
                        if (intersects != null)
                        {
                            results = intersects;
                        }
                    }
                }
            }



            if (results != null && results.Count > 0)
            {
                List <Hi5_Glove_Interaction_Finger> fingertemps = new List <Hi5_Glove_Interaction_Finger>();
                fingertemps.Add(Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EThumb]);
                //Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EThumb].NotifyEnterPinch2State();
                if (index)
                {
                    //Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex].NotifyEnterPinch2State();
                    //fingerType = Hi5_Glove_Interaction_Finger_Type.EIndex;
                    fingertemps.Add(Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex]);
                }
                else
                {
                    fingertemps.Add(Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle]);
                    //Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle].NotifyEnterPinch2State();
                    //fingerType = Hi5_Glove_Interaction_Finger_Type.EMiddle;
                }
                float distanceMin   = 20.0f;
                int   distanceminId = -1;
                for (int i = 0; i < results.Count; i++)
                {
                    //Debug.Log ("pinch2 1");
                    int objectIdTemp = results[i];
                    Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(objectIdTemp);
                    if (item != null)
                    {
                        //Debug.Log ("pinch2 2");
                        bool  ContactIsSelf = false;
                        float distance      = Hi5_Interaction_Const.GetDistance(mHand.mPalm.transform, item, out ContactIsSelf);
                        if (ContactIsSelf)
                        {
                            //Debug.Log ("pinch2 3");
                            if (distance < distanceMin)
                            {
                                //Debug.Log ("pinch2 4");
                                distanceMin   = distance;
                                distanceminId = objectIdTemp;
                            }
                        }
                    }
                }
                ObjectId = distanceminId;
                if (fingertemps != null && fingertemps.Count >= 2)
                {
                    fingers = fingertemps;
                }
                else
                {
                    fingers = null;
                }
                return(true);
            }
            else
            {
                fingers  = null;
                ObjectId = -1;
                return(false);
            }
        }
        void UnPinchObject(string messageKey, object param1, object param2, object param3, object param4)
        {
            if (messageKey.CompareTo(Hi5_MessageKey.messageUnPinchObject) == 0)
            {
                //Debug.Log ("UnPinchObject");
                int objectId = (int)param1;
                Hi5_Glove_Interaction_Hand hand = param2 as Hi5_Glove_Interaction_Hand;
                if (mObjectDic.ContainsKey(objectId))
                {
                    Hi5_Glove_Interaction_Item pinchObject = mObjectDic[objectId];
                    if (pinchObject != null && pinchObject.mObjectType == EObject_Type.ECommon)
                    {
                        Hi5_Object_State_Base state = pinchObject.mstatemanager.GetState(E_Object_State.EPinch);
                        bool isRelease        = false;
                        bool OtherHandRelease = false;
                        if (state != null && state is Hi5_Object_State_Pinch)
                        {
                            Hi5_Object_State_Pinch pinchState = state as Hi5_Object_State_Pinch;
                            if (pinchState != null && !pinchState.isTestRelease)
                            {
                                if (hand.m_IsLeftHand)
                                {
                                    isRelease = pinchState.CancelPinchHand(Hi5_Object_Pinch_Type.ELeft, out OtherHandRelease);
                                }
                                else
                                {
                                    isRelease = pinchState.CancelPinchHand(Hi5_Object_Pinch_Type.ERight, out OtherHandRelease);
                                }
                            }
                        }
                        if (OtherHandRelease)
                        {
                            Hi5_Interaction_Message.GetInstance().DispenseMessage(Hi5_MessageKey.messagePinchOtherHandRelease, hand, objectId);
                        }

                        if (isRelease)
                        {
                            if (!pinchObject.isTouchPlane)
                            {
                                //Debug.Log ("!pinchObject.isTouchPlane");

                                pinchObject.ChangeState(E_Object_State.EMove);
                                pinchObject.CalculateThrowMove(hand.mPalm.transform, hand);
                                pinchObject.CleanRecord();
//								if (Hi5_Interaction_Const.TestChangeState)
//									hand.mState.ChangeState(E_Hand_State.ERelease);
                                {
                                    Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(pinchObject.idObject,
                                                                                                                                    pinchObject.mObjectType,
                                                                                                                                    hand.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight,
                                                                                                                                    EEventObjectType.EMove);
                                    Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null);
                                }

                                {
                                    Hi5_Glove_Interaction_Hand_Event_Data data = Hi5_Glove_Interaction_Hand_Event_Data.Instance(pinchObject.idObject,
                                                                                                                                hand.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight,
                                                                                                                                EEventHandType.EThrow);
                                    Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageHandEvent, (object)data, null);
                                }
                            }
                            else
                            {
                                Debug.Log("pinchObject.isTouchPlane");
                                //if (Hi5_Interaction_Const.TestChangeState)
                                hand.mState.ChangeState(E_Hand_State.ERelease);
                                pinchObject.ChangeState(E_Object_State.EStatic);
                                Hi5_Object_State_Static staticState = pinchObject.mstatemanager.GetState(E_Object_State.EStatic) as Hi5_Object_State_Static;
                                staticState.ResetPreTransform();
                                {
                                    Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(pinchObject.idObject,
                                                                                                                                    pinchObject.mObjectType,
                                                                                                                                    hand.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight,
                                                                                                                                    EEventObjectType.EStatic);
                                    Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null);
                                }

                                {
                                    Hi5_Glove_Interaction_Hand_Event_Data data = Hi5_Glove_Interaction_Hand_Event_Data.Instance(pinchObject.idObject,
                                                                                                                                hand.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight,
                                                                                                                                EEventHandType.ERelease);
                                    Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageHandEvent, (object)data, null);
                                }
                            }
                        }
                    }
                }
            }
        }
示例#27
0
        private bool IsPalmPinch(out List <int> pinchs, out int ObjectId)
        {
            List <Collider> colliders = Hand.IsPalmTrigger();

            if (colliders == null)
            {
                pinchs   = null;
                ObjectId = -1;
                return(false);
            }

            int        idObject = -10000;
            List <int> temp     = new List <int>();

            foreach (Collider item in colliders)
            {
                if (item.GetComponent <Hi5_Glove_Interaction_Item>() != null)
                {
                    idObject = item.GetComponent <Hi5_Glove_Interaction_Item>().idObject;
                    if (Hand.mPalm.JudgeObjectHandInside(item.transform))
                    {
                        temp.Add(idObject);
                    }
                }
            }
            if (idObject == -10000)
            {
                pinchs   = null;
                ObjectId = -1;
                return(false);
            }

            List <int> thumbs;
            bool       thumb = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EThumb].IsPinchTrigger(out thumbs);

            if (thumb)
            {
                Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EThumb].NotifyEnterPinchState();
                int count = 0;
                if (Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex].PalmPinch())
                {
                    ///Debug.Log("Hi5_Glove_Interaction_Finger_Type.EIndex");
                    Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex].NotifyEnterPinchState();
                    count++;
                }

                if (Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle].PalmPinch())
                {
                    Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle].NotifyEnterPinchState();
                    //Debug.Log("Hi5_Glove_Interaction_Finger_Type.EMiddle");
                    count++;
                }

                if (Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.ERing].PalmPinch())
                {
                    Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.ERing].NotifyEnterPinchState();
                    //Debug.Log("Hi5_Glove_Interaction_Finger_Type.ERing");
                    count++;
                }

                if (Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EPinky].PalmPinch())
                {
                    Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EPinky].NotifyEnterPinchState();
                    // Debug.Log("Hi5_Glove_Interaction_Finger_Type.EPinky");
                    count++;
                }
                if (count > 2)
                {
                    pinchs = temp;
                    float distanceMin   = 20.0f;
                    int   distanceminId = -1;
                    for (int i = 0; i < temp.Count; i++)
                    {
                        int objectIdTemp = temp[i];
                        Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(objectIdTemp);
                        if (item != null)
                        {
                            bool  ContactIsSelf = false;
                            float distance      = Hi5_Interaction_Const.GetDistance(mHand.mPalm.transform, item, out ContactIsSelf);
                            if (ContactIsSelf)
                            {
                                if (distance < distanceMin)
                                {
                                    distanceMin   = distance;
                                    distanceminId = objectIdTemp;
                                }
                            }
                        }
                    }
                    ObjectId = distanceminId;
                    return(true);
                }
                else
                {
                    pinchs   = null;
                    ObjectId = -1;
                    return(false);
                }
            }
            else
            {
                pinchs   = null;
                ObjectId = -1;
                return(false);
            }
        }
示例#28
0
 internal Hi5_Object_Move(Hi5_Glove_Interaction_Item objectItem, Hi5_Obiect_State_Manager state)
 {
     mState = state;
     mItem  = objectItem;
 }
 internal Hi5_Object_Move(Hi5_Glove_Interaction_Item objectItem, Hi5_Object_State_Manager state)
 {
     mState = state;
     mItem  = objectItem;
     // objectItem.GetComponent<Rigidbody>
 }