コード例 #1
0
 override protected void OnTriggerEnter(Collider other)
 {
     if (!isTrigger)
     {
         base.OnTriggerEnter(other);
         Hi5_Interaction_Message.GetInstance().DispenseMessage(Hi5_MessageKey.messageObjectReset, null, null);
         isTrigger = true;
     }
 }
コード例 #2
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);
        }
コード例 #3
0
        void  AngelPinchRelease()
        {
            Dictionary <Hi5_Glove_Interaction_Finger_Type, Hi5_Glove_Interaction_Finger> fingers = Hand.mFingers;
            bool isRelease    = false;
            int  releaseCount = 0;

            if (fingers.ContainsKey(Hi5_Glove_Interaction_Finger_Type.EThumb))
            {
                if (fingers[Hi5_Glove_Interaction_Finger_Type.EThumb].IsPinchRelease)
                {
                    releaseCount++;
                    //isRelease = true;
                }
            }

            if (fingers.ContainsKey(Hi5_Glove_Interaction_Finger_Type.EMiddle))
            {
                //Debug.Log("Hi5_Glove_Interaction_Finger_Type.EMiddle");
                if (fingers[Hi5_Glove_Interaction_Finger_Type.EMiddle].IsPinchRelease)
                {
                    // Debug.Log("Hi5_Glove_Interaction_Finger_Type.EMiddle true");
                    releaseCount++;
                }
            }
            if (fingers.ContainsKey(Hi5_Glove_Interaction_Finger_Type.EIndex))
            {
                //Debug.Log("Hi5_Glove_Interaction_Finger_Type.EIndex");
                if (fingers[Hi5_Glove_Interaction_Finger_Type.EIndex].IsPinchRelease)
                {
                    //Debug.Log("Hi5_Glove_Interaction_Finger_Type.EIndex true");
                    releaseCount++;
                }
            }
            else if (fingers.ContainsKey(Hi5_Glove_Interaction_Finger_Type.ERing))
            {
                //Debug.Log("Hi5_Glove_Interaction_Finger_Type.ERing");
                if (fingers[Hi5_Glove_Interaction_Finger_Type.ERing].IsPinchRelease)
                {
                    // Debug.Log("Hi5_Glove_Interaction_Finger_Type.ERing true");
                    releaseCount++;
                }
            }
            if (releaseCount >= 2)
            {
                isRelease = true;
            }
            if (isRelease)
            {
                mState.ChangeState(E_Hand_State.ERelease);
                Hi5_Interaction_Message.GetInstance().DispenseMessage(Hi5_MessageKey.messageUnPinchObject, (object)Hand.mPinchObjectId, Hand);

                if (Hand != null)
                {
                    Hand.mPinchObjectId = -1;
                }
            }
        }
 private void OnEnable()
 {
     Hi5_Interaction_Message.GetInstance().RegisterMessage(PinchObject, Hi5_MessageKey.messagePinchObject);
     Hi5_Interaction_Message.GetInstance().RegisterMessage(FlyPinchObject, Hi5_MessageKey.messageFlyPinchObject);
     Hi5_Interaction_Message.GetInstance().RegisterMessage(GetObjectById, Hi5_MessageKey.messageGetObjecById);
     Hi5_Interaction_Message.GetInstance().RegisterMessage(UnPinchObject, Hi5_MessageKey.messageUnPinchObject);
     Hi5_Interaction_Message.GetInstance().RegisterMessage(Pinch2Object, Hi5_MessageKey.messagePinchObject2);
     Hi5_Interaction_Message.GetInstance().RegisterMessage(UnPinch2Object, Hi5_MessageKey.messageUnPinchObject2);
     Hi5_Interaction_Message.GetInstance().RegisterMessage(LiftObject, Hi5_MessageKey.messageLiftObject);
     //mObjectDic.Clear();
 }
コード例 #5
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);
        }
コード例 #6
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);
        }
コード例 #7
0
 public static Hi5_Interaction_Message GetInstance()
 {
     if (instance == null)
     {
         lock (_lock)
         {
             if (instance == null)
             {
                 instance = new Hi5_Interaction_Message();
             }
         }
     }
     return(instance);
 }
コード例 #8
0
 protected void OnDisable()
 {
     Hi5_Interaction_Message.GetInstance().UnRegisterMessage(Reset, Hi5_MessageKey.messageObjectReset);
 }
コード例 #9
0
 protected void OnEnable()
 {
     originalPosition = transform.position;
     originalRotation = transform.rotation;
     Hi5_Interaction_Message.GetInstance().RegisterMessage(Reset, Hi5_MessageKey.messageObjectReset);
 }
コード例 #10
0
        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);
        }
コード例 #11
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);
            }
        }
コード例 #12
0
        // Update is called once per frame
        override public void Update(float deltaTime)
        {
            if (fingerColliders.ContainsKey(Hi5_Glove_Interaction_Finger_Type.EThumb))
            {
                Hi5_Glove_Interaction_Finger fingerThumb = fingerColliders[Hi5_Glove_Interaction_Finger_Type.EThumb];
                Hi5_Glove_Interaction_Finger otherFinger = null;
                if (fingerColliders.ContainsKey(Hi5_Glove_Interaction_Finger_Type.EIndex))
                {
                    otherFinger = fingerColliders[Hi5_Glove_Interaction_Finger_Type.EIndex];
                }
                else if (fingerColliders.ContainsKey(Hi5_Glove_Interaction_Finger_Type.EMiddle))
                {
                    otherFinger = fingerColliders[Hi5_Glove_Interaction_Finger_Type.EMiddle];
                }
                if (fingerThumb != null && otherFinger != null)
                {
//                    Vector3 point = new Vector3((fingerThumb.GetTailPosition().x + otherFinger.GetTailPosition().x) / 2,
//                                                (fingerThumb.GetTailPosition().y + otherFinger.GetTailPosition().y) / 2,
//                                                (fingerThumb.GetTailPosition().z + otherFinger.GetTailPosition().z) / 2);
//                    Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(objectId);
//                    if (item != null)
//                        item.transform.position = point;

                    //Debug.Log("Pich2 position"+ point);
                }
            }
            if (fingerColliders.Count > 1)
            {
                // Debug.Log("fingerColliders.Count > 1" );
                bool isRelease  = false;
                int  countValue = 0;
                foreach (KeyValuePair <Hi5_Glove_Interaction_Finger_Type, Hi5_Glove_Interaction_Finger> item in fingerColliders)
                {
                    ////碰撞释放
                    //if (!item.Value.IsTailColliderById(objectId))
                    //{
                    //    isRelease = true;

                    //}
                    //角度释放
                    if (fingerColliders[item.Key].IsPinch2Realease(Hi5_Interaction_Const.FingerPinch2Release))
                    {
                        isRelease = true;
                        return;
                    }
                }
                if (fingerColliders.ContainsKey(Hi5_Glove_Interaction_Finger_Type.EThumb))
                {
                    Hi5_Glove_Interaction_Finger fingerThumb = fingerColliders[Hi5_Glove_Interaction_Finger_Type.EThumb];
                    Hi5_Glove_Interaction_Finger otherFinger = null;
                    if (fingerColliders.ContainsKey(Hi5_Glove_Interaction_Finger_Type.EIndex))
                    {
                        otherFinger = fingerColliders[Hi5_Glove_Interaction_Finger_Type.EIndex];
                    }
                    else if (fingerColliders.ContainsKey(Hi5_Glove_Interaction_Finger_Type.EMiddle))
                    {
                        otherFinger = fingerColliders[Hi5_Glove_Interaction_Finger_Type.EMiddle];
                    }
                    if (fingerThumb != null && otherFinger != null)
                    {
                        Vector3 tempThumb = fingerThumb.GetTailPosition();
                        Vector3 tempOther = otherFinger.GetTailPosition();
                        float   distance  = Vector3.Distance(tempThumb, tempOther);
                        if (distance > 0.080f)
                        {
                            isRelease = true;
                        }
                    }
                }
                if (isRelease || countValue >= 2)
                {
                    mState.ChangeState(E_Hand_State.ERelease);
                    Hi5_Interaction_Message.GetInstance().DispenseMessage(Hi5_MessageKey.messageUnPinchObject2, (object)Hand.mPinchObjectId, Hand);
                }
                else
                {
                }
            }
            else
            {
                mState.ChangeState(E_Hand_State.ERelease);
                Hi5_Interaction_Message.GetInstance().DispenseMessage(Hi5_MessageKey.messageUnPinchObject2, (object)Hand.mPinchObjectId, Hand);
            }
        }
        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);
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #14
0
 virtual protected void OnDisable()
 {
     Hi5_Interaction_Message.GetInstance().RegisterMessage(PichOtherHandRealse, Hi5_MessageKey.messagePinchObject);
 }
コード例 #15
0
 virtual protected void OnEnable()
 {
     Hi5_Interaction_Message.GetInstance().RegisterMessage(PichOtherHandRealse, Hi5_MessageKey.messageLiftObject);
     //m_TriggerCount.Clear();
 }
コード例 #16
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);
        }