Beispiel #1
0
        virtual protected void OnTriggerEnter(Collider other)
        {
            if (other.gameObject.layer == Hi5_Interaction_Const.PlaneLayer())
            {
                planeTransform = other.gameObject.transform;
                IsTrigger      = true;

                TouchPlaneY       = transform.position.y;
                IsPreNoTouchPlane = false;
                //Debug.Log("Hi5_Glove_Interaction_Item_Trigger IsTigger true");
                //if (!Hi5_Interaction_Const.TestFlyMoveUsedGravity)
                {
                    if (itemObject != null)
                    {
                        itemObject.OnItemTriggerEnter(other);
                    }
                }
                //Debug.Log("TouchPlaneY ="+TouchPlaneY);
            }

            if (other.gameObject.layer == Hi5_Interaction_Const.ObjectTriggerLayer())
            {
                if (other.gameObject.GetComponent <Hi5_Glove_Interaction_Item_Trigger> () != null && other.gameObject.GetComponent <Hi5_Glove_Interaction_Item_Trigger> ().itemObject != null)
                {
                    mTriggerObjectId   = other.gameObject.GetComponent <Hi5_Glove_Interaction_Item_Trigger> ().itemObject.idObject;
                    IsTriggerObject    = true;
                    IsPreNoTouchObject = false;
                    //Debug.Log("IsTiggerObject true");

                    TouchObjectY = transform.position.y;
                    //Debug.Log("TouchObjectY ="+TouchObjectY);
                }
            }
        }
        override protected void OnTriggerEnter(Collider other)
        {
            base.OnTriggerEnter(other);
            if (mObjectType == EObject_Type.EButton || mObjectType == EObject_Type.ECommon)
            {
                if (other.gameObject.layer == Hi5_Interaction_Const.ThumbTailLayer() ||
                    other.gameObject.layer == Hi5_Interaction_Const.OtherFingerTailLayer())
                {
                    //Debug.Log ("item OnTriggerEnter Tail");

                    if (other.gameObject.GetComponent <Hi5_Glove_Collider_Finger>() != null &&
                        other.gameObject.GetComponent <Hi5_Glove_Collider_Finger>().mFinger != null &&
                        other.gameObject.GetComponent <Hi5_Glove_Collider_Finger>().mFinger.mHand != null)
                    {
                        if (mObjectType == EObject_Type.EButton)
                        {
                            if (state == E_Object_State.EStatic)
                            {
                                this.ChangeState(E_Object_State.EPoke);
                                NotifyPokeEvent(other);
                            }
                        }
                        else
                        {
                            if (state == E_Object_State.EStatic || state == E_Object_State.EFlyLift)
                            {
                            }
                        }
                    }
                    //ChangeColor(Color.black);
                }
            }
        }
        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);
        }
Beispiel #4
0
        override protected void OnCollisionStay(Collision collision)
        {
            base.OnCollisionStay(collision);


            if (itemObject.mObjectType == EObject_Type.ECommon)
            {
                if (/*collision.gameObject.layer == Hi5_Interaction_Const.ThumbTailLayer()
                    || */collision.gameObject.layer == Hi5_Interaction_Const.OtherFingerTailLayer()
                    /*|| collision.gameObject.layer == Hi5_Interaction_Const.PalmRigidbodyLayer()*/)
                {
                    if (itemObject.mstatemanager == null)
                    {
                        return;
                    }
                    // if (collision.gameObject.GetComponent<Hi5_Hand_Collider_Visible_Finger>())
                    {
                        //if (Hi5_Interaction_Const.TestChangeState)
                        {
                            if (itemObject.mstatemanager.State == E_Object_State.EStatic ||
                                (itemObject.mstatemanager.State == E_Object_State.EMove && itemObject.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EPlaneMove))
                            {
                                if (/*collision.gameObject.layer == Hi5_Interaction_Const.ThumbTailLayer() ||*/ collision.gameObject.layer == Hi5_Interaction_Const.OtherFingerTailLayer())
                                {
                                    if (collision.gameObject.GetComponent <Hi5_Hand_Collider_Visible_Thumb_Finger>() == null)
                                    {
                                        return;
                                    }
                                    Hi5_Hand_Visible_Finger finger = collision.gameObject.GetComponent <Hi5_Hand_Collider_Visible_Thumb_Finger>().mFinger;
                                    if (finger && (finger is Hi5_Hand_Visible_Thumb_Finger))
                                    {
                                        if (!(finger as Hi5_Hand_Visible_Thumb_Finger).IsMoveTowardHand())
                                        {
                                            Hi5_Hand_Visible_Hand handTemp = collision.gameObject.GetComponent <Hi5_Hand_Collider_Visible_Finger> ().mHand;
                                            itemObject.ChangeState(E_Object_State.EMove);
                                            if (itemObject.mstatemanager != null)
                                            {
                                                itemObject.mstatemanager.SetPlaneMove(collision);
                                            }
                                            {
                                                Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(itemObject.idObject,
                                                                                                                                                itemObject.mObjectType,
                                                                                                                                                handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight,
                                                                                                                                                EEventObjectType.EMove);
                                                Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null);
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                }
                            }
                        }
                    }
                }
            }
        }
Beispiel #5
0
        override protected void OnTriggerEnter(Collider other)
        {
            base.OnTriggerEnter(other);
            if (Hi5_Interaction_Const.TestPinchOpenCollider)
            {
                if (other.gameObject.GetComponent <Hi5_Hand_Nail_Collider>() != null)
                {
                    itemObject.ColliderNailNum++;
                    if (itemObject.ColliderNailNum > 0)
                    {
                        if (other.gameObject.GetComponent <Hi5_Hand_Nail_Collider>().mHand != null)
                        {
                            other.gameObject.GetComponent <Hi5_Hand_Nail_Collider>().mHand.AddNailColliderCount();
                        }

                        //if (itemObject.state == E_Object_State.EStatic
                        //    || (itemObject.state == E_Object_State.EMove && itemObject.moveType == Hi5ObjectMoveType.EPlaneMove))
                        //{
                        //    itemObject.SetIsKinematic(true);
                        //    itemObject.GetComponent<Rigidbody>().Sleep();
                        //}
                    }
                }
            }

            if (itemObject.mObjectType == EObject_Type.EButton || itemObject.mObjectType == EObject_Type.ECommon)
            {
                if (other.gameObject.layer == Hi5_Interaction_Const.OtherFingerTailLayer())
                {
                    if (other.gameObject.GetComponent <Hi5_Glove_Collider_Finger>() != null &&
                        other.gameObject.GetComponent <Hi5_Glove_Collider_Finger>().mFinger != null &&
                        other.gameObject.GetComponent <Hi5_Glove_Collider_Finger>().mFinger.mHand != null)
                    {
                        if (itemObject.mObjectType == EObject_Type.EButton)
                        {
                            if (itemObject.state == E_Object_State.EStatic)
                            {
                                itemObject.ChangeState(E_Object_State.EPoke);
                                itemObject.NotifyPokeEvent(other);
                            }
                        }
                        else
                        {
                            if (itemObject.state == E_Object_State.EStatic || itemObject.state == E_Object_State.EFlyLift)
                            {
                            }
                        }
                    }
                }
            }
        }
Beispiel #6
0
        //#if Test_Assembly
        internal void OnItemTriggerEnter(Collider collision)
        {
            //Debug.Log ("Hi5_Glove_Interaction_Item OnItemTriggerEnter ENTER");
            if (collision.gameObject.layer == Hi5_Interaction_Const.PlaneLayer())
            {
                if (mObjectType == EObject_Type.ECommon)
                {
                    //Debug.Log ("Hi5_Glove_Interaction_Item OnItemTriggerEnter");
                    mstatemanager.StopThrowMove(true);
                    //if (Hi5_Interaction_Const.TestPlanePhycis) {


                    //}
                    //else
                    //	transform.rotation = Quaternion.Euler(0.0f, transform.eulerAngles.y, 0.0f);
                    {
                        Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(idObject, mObjectType, EHandType.EHandLeft, EEventObjectType.EStatic);
                        Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null);
                    }
                }
            }

            if (collision.gameObject.layer == Hi5_Interaction_Const.ObjectGrasp())
            {
                if ((collision.gameObject.GetComponent <Hi5_Glove_Interaction_Item> () != null &&
                     collision.gameObject.GetComponent <Hi5_Glove_Interaction_Item> ().state == E_Object_State.EStatic) ||
                    (collision.transform.parent.gameObject.GetComponent <Hi5_Glove_Interaction_Item> () != null &&
                     collision.transform.parent.gameObject.GetComponent <Hi5_Glove_Interaction_Item> ().state == E_Object_State.EStatic))
                {
                    if (mObjectType == EObject_Type.ECommon)
                    {
                        //Debug.Log ("Hi5_Glove_Interaction_Item OnItemTriggerEnter");
                        mstatemanager.StopThrowMove(true);
                        //transform.rotation = Quaternion.Euler(0.0f, transform.eulerAngles.y, 0.0f);
                        //if (Hi5_Interaction_Const.TestChangeState)
                        {
                            Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(idObject, mObjectType, EHandType.EHandLeft, EEventObjectType.EStatic);
                            Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null);
                        }
                    }
                }
            }
        }
 override protected void OnTriggerExit(Collider other)
 {
     base.OnTriggerExit(other);
     if (mObjectType == EObject_Type.EButton)
     {
         if (other.gameObject.layer == Hi5_Interaction_Const.ThumbTailLayer() ||
             other.gameObject.layer == Hi5_Interaction_Const.OtherFingerTailLayer())
         {
             if (other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> () != null &&
                 other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> ().mFinger != null &&
                 other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> ().mFinger.mHand != null)
             {
                 if (state == E_Object_State.EPoke)
                 {
                     this.ChangeState(E_Object_State.EStatic);
                     if (Hi5_Interaction_Const.TestChangeState)
                     {
                         Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(idObject,
                                                                                                                         mObjectType,
                                                                                                                         other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> ().mFinger.mHand.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight,
                                                                                                                         EEventObjectType.EStatic);
                         Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null);
                     }
                 }
             }
         }
     }
     else if (mObjectType == EObject_Type.ECommon)
     {
         if (other.gameObject.layer == Hi5_Interaction_Const.ThumbTailLayer() ||
             other.gameObject.layer == Hi5_Interaction_Const.OtherFingerTailLayer())
         {
             if (other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> () != null &&
                 other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> ().mFinger != null &&
                 other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> ().mFinger.mHand != null)
             {
                 IsPokeInLoop = false;
             }
         }
     }
 }
Beispiel #8
0
 virtual protected void OnTriggerExit(Collider other)
 {
     if (other.gameObject.layer == Hi5_Interaction_Const.PlaneLayer())
     {
         IsPreNoTouchPlane = true;
         //Debug.Log("IsPreNoTouchPlane true");
         //IsTrigger = false;
     }
     if (other.gameObject.layer == Hi5_Interaction_Const.ObjectTriggerLayer())
     {
         if (other.gameObject.GetComponent <Hi5_Glove_Interaction_Item_Trigger> () != null)
         {
             IsPreNoTouchObject = true;
             //mTiggerObjectId = -1000;
             //IsTiggerObject = false;
             //Debug.Log("IsTiggerObject true");
             //TouchObjectY = transform.position.y;
         }
     }
     //Debug.Log("Hi5_Glove_Interaction_Item_Trigger OnTriggerStay false");
     //Debug.Log("IsTrigger false");
 }
        internal void OnItemTriggerEnter(Collider collision)
        {
            if (collision.gameObject.layer == Hi5_Interaction_Const.PlaneLayer())
            {
                if (mObjectType == EObject_Type.ECommon)
                {
                    //Debug.Log ("OnItemTriggerEnter collision"+transform.eulerAngles.y);
                    mstatemanager.StopThrowMove();
                    transform.rotation = Quaternion.Euler(0.0f, transform.eulerAngles.y, 0.0f);
                    if (Hi5_Interaction_Const.TestChangeState)
                    {
                        Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(idObject, mObjectType, EHandType.EHandLeft, EEventObjectType.EStatic);
                        Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null);
                    }
                    //transform.position = new Vector3(transform.position.x, Y-0.001f, transform.position.z);
                    //Debug.Log ("transform.rotation x"+ transform.rotation.x+" y"+ transform.rotation.y+"transform.rotation z"+ transform.rotation.z);
                }
            }

            if (collision.gameObject.layer == Hi5_Interaction_Const.ObjectGrasp() &&
                collision.gameObject.GetComponent <Hi5_Glove_Interaction_Item>() != null &&
                collision.gameObject.GetComponent <Hi5_Glove_Interaction_Item>().state == E_Object_State.EStatic)
            {
                if (mObjectType == EObject_Type.ECommon)
                {
                    //Debug.Log ("OnItemTriggerEnter collision"+transform.eulerAngles.y);
                    mstatemanager.StopThrowMove();
                    transform.rotation = Quaternion.Euler(0.0f, transform.eulerAngles.y, 0.0f);
                    if (Hi5_Interaction_Const.TestChangeState)
                    {
                        Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(idObject, mObjectType, EHandType.EHandLeft, EEventObjectType.EStatic);
                        Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null);
                    }
                    //transform.position = new Vector3(transform.position.x, Y-0.001f, transform.position.z);
                    //Debug.Log ("transform.rotation x"+ transform.rotation.x+" y"+ transform.rotation.y+"transform.rotation z"+ transform.rotation.z);
                }
            }
        }
 virtual protected void OnTriggerStay(Collider other)
 {
     if (other.gameObject.layer == Hi5_Interaction_Const.PlaneLayer())
     {
         planeTransform = other.gameObject.transform;
         IsTrigger      = true;
         //TouchPlaneY = transform.position.y;
         IsPreNoTouchPlane = false;
         //Debug.Log("IsTigger true");
     }
     if (other.gameObject.layer == Hi5_Interaction_Const.ObjectTriggerLayer())
     {
         if (other.gameObject.GetComponent <Hi5_Glove_Interaction_Item_Trigger> () != null && other.gameObject.GetComponent <Hi5_Glove_Interaction_Item_Trigger> ().itemObject != null)
         {
             mTiggerObjectId    = other.gameObject.GetComponent <Hi5_Glove_Interaction_Item_Trigger> ().itemObject.idObject;
             IsTiggerObject     = true;
             IsPreNoTouchObject = false;
             //TouchObjectY = transform.position.y;
             //Debug.Log("IsTiggerObject true");
         }
     }
     //Debug.Log("Hi5_Glove_Interaction_Item_Trigger OnTriggerStay true");
     //Debug.Log("IsTrigger true");
 }
Beispiel #11
0
        override protected void OnTriggerExit(Collider other)
        {
            base.OnTriggerExit(other);
            if (Hi5_Interaction_Const.TestPinchOpenCollider)
            {
                if (other.gameObject.GetComponent <Hi5_Hand_Nail_Collider>() != null)
                {
                    itemObject.ColliderNailNum--;
                    if (itemObject.ColliderNailNum <= 0)
                    {
                        if (other.gameObject.GetComponent <Hi5_Hand_Nail_Collider>().mHand != null)
                        {
                            other.gameObject.GetComponent <Hi5_Hand_Nail_Collider>().mHand.RemoveNailColliderCount();
                        }
                        //if (itemObject.state == E_Object_State.EMove
                        //  || itemObject.state == E_Object_State.EPoke
                        //  || itemObject.state == E_Object_State.EStatic)
                        //{
                        //    itemObject.SetIsKinematic(false);
                        //}
                    }
                }
            }

            if (itemObject.mObjectType == EObject_Type.EButton)
            {
                if (/*other.gameObject.layer == Hi5_Interaction_Const.ThumbTailLayer ()
                     ||*/other.gameObject.layer == Hi5_Interaction_Const.OtherFingerTailLayer())
                {
                    if (other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> () != null &&
                        other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> ().mFinger != null &&
                        other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> ().mFinger.mHand != null)
                    {
                        if (itemObject.state == E_Object_State.EPoke)
                        {
                            //Debug.Log("EPoke");
                            itemObject.ChangeState(E_Object_State.EStatic);
                            //if (Hi5_Interaction_Const.TestChangeState)
                            {
                                Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(itemObject.idObject,
                                                                                                                                itemObject.mObjectType,
                                                                                                                                other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> ().mFinger.mHand.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight,
                                                                                                                                EEventObjectType.EStatic);
                                Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null);
                            }
                        }
                    }
                }
            }
            else if (itemObject.mObjectType == EObject_Type.ECommon)
            {
                if (/*other.gameObject.layer == Hi5_Interaction_Const.ThumbTailLayer ()
                     ||*/other.gameObject.layer == Hi5_Interaction_Const.OtherFingerTailLayer())
                {
                    if (other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> () != null &&
                        other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> ().mFinger != null &&
                        other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> ().mFinger.mHand != null)
                    {
                        itemObject.IsPokeInLoop = 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);
        }
Beispiel #13
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);
            }
        }
Beispiel #14
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);
            }
        }
Beispiel #15
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);
                }
            }
        }
Beispiel #16
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);
            }
        }
Beispiel #17
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);
        }
Beispiel #18
0
        override protected void OnCollisionEnter(Collision collision)
        {
            base.OnCollisionEnter(collision);
            if (itemObject.mObjectType == EObject_Type.ECommon)
            {
                if ((collision.gameObject.layer == Hi5_Interaction_Const.PlaneLayer()) ||
                    ((collision.gameObject.layer == Hi5_Interaction_Const.ObjectGrasp() &&
                      (collision.gameObject.GetComponent <Hi5_Glove_Interaction_Item>() != null &&
                       collision.gameObject.GetComponent <Hi5_Glove_Interaction_Item>().state == E_Object_State.EStatic) ||
                      (collision.transform.parent.gameObject.GetComponent <Hi5_Glove_Interaction_Item>() != null &&
                       collision.transform.parent.gameObject.GetComponent <Hi5_Glove_Interaction_Item>().state == E_Object_State.EStatic)))
                    )
                {
                    if (itemObject.state == E_Object_State.EPinch)
                    {
                        return;
                    }
                    //Debug.Log ("Hi5_Interaction_Item_Collider OnCollisionEnter");
                    itemObject.mstatemanager.StopThrowMove(true);
                    Vector3        separationVector = Vector3.zero;
                    ContactPoint[] contactPoints    = collision.contacts;
                    if (contactPoints != null && contactPoints.Length > 0)
                    {
                        itemObject.contactPointTemp = new Hi5_Glove_Interaction_Item.ContactPointClass();
                        itemObject.contactPointTemp.contactPoint = contactPoints [0];

                        float   separation         = itemObject.contactPointTemp.contactPoint.separation;
                        Vector3 contactPointNormal = itemObject.contactPointTemp.contactPoint.normal;
                        contactPointNormal.Normalize();

                        separationVector = (contactPointNormal) * separation;
                        itemObject.transform.position = new Vector3(itemObject.transform.position.x, itemObject.transform.position.y + Mathf.Abs(separationVector.y), itemObject.transform.position.z);
                    }
                    itemObject.PlaneY = itemObject.transform.position.y;
                    //transform.rotation = initRotation;
                    //if (!Hi5_Interaction_Const.TestPlanePhycis)
                    //	itemObject.transform.rotation = Quaternion.Euler(0.0f, transform.eulerAngles.y, 0.0f);
                    //if (Hi5_Interaction_Const.TestChangeState)
                    {
                        Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(itemObject.idObject, itemObject.mObjectType, EHandType.EHandLeft, EEventObjectType.EStatic);
                        Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null);
                    }
                }
                if (collision.gameObject.layer == Hi5_Interaction_Const.OtherFingerTailLayer()
                    /*|| collision.gameObject.layer == Hi5_Interaction_Const.ThumbTailLayer()*/)
                {
                    if (collision.gameObject.GetComponent <Hi5_Hand_Collider_Visible_Finger>())
                    {
                        if (itemObject.mObjectType == EObject_Type.ECommon)
                        {
                            if (itemObject.state == E_Object_State.EStatic || itemObject.state == E_Object_State.EFlyLift)
                            {
                                if (!itemObject.IsPokeInLoop)
                                {
                                    ContactPoint[] contactPoints = collision.contacts;
                                    if (contactPoints != null && contactPoints.Length > 0)
                                    {
                                        Vector3 normal = contactPoints [0].normal;
                                        float   angle  = Vector3.Angle(Hi5_Interaction_Object_Manager.GetObjectManager().transform.up, normal);

                                        if (Mathf.Abs(angle) > 25.0f)
                                        {
                                            itemObject.NotifyPokeEvent(collision);
                                            itemObject.IsPokeInLoop = true;
                                        }
                                    }
                                }
                            }
                            {
                                if (itemObject.mstatemanager.State == E_Object_State.EStatic ||
                                    (itemObject.mstatemanager.State == E_Object_State.EMove && itemObject.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EPlaneMove))
                                {
                                    Hi5_Hand_Visible_Hand handTemp = collision.gameObject.GetComponent <Hi5_Hand_Collider_Visible_Finger>().mHand;

                                    itemObject.ChangeState(E_Object_State.EMove);
                                    if (itemObject.mstatemanager != null)
                                    {
                                        itemObject.mstatemanager.SetPlaneMove(collision);
                                    }
                                    {
                                        Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(itemObject.idObject, itemObject.mObjectType, handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight, EEventObjectType.EMove);
                                        Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        override protected void OnCollisionEnter(Collision collision)
        {
            UnityEngine.Profiling.Profiler.BeginSample("Hi5_Glove_Interaction_Item");
            base.OnCollisionEnter(collision);
            if (mObjectType == EObject_Type.ECommon)
            {
                if ((collision.gameObject.layer == Hi5_Interaction_Const.PlaneLayer()) ||
                    ((collision.gameObject.layer == Hi5_Interaction_Const.ObjectGrasp() &&
                      collision.gameObject.GetComponent <Hi5_Glove_Interaction_Item>() != null &&
                      collision.gameObject.GetComponent <Hi5_Glove_Interaction_Item>().state == E_Object_State.EStatic)))

                {
                    if (state == E_Object_State.EPinch)
                    {
                        return;
                    }

                    mstatemanager.StopThrowMove();
                    Vector3        separationVector = Vector3.zero;
                    ContactPoint[] contactPoints    = collision.contacts;
                    if (contactPoints != null && contactPoints.Length > 0)
                    {
                        contactPointTemp = new ContactPointClass();
                        contactPointTemp.contactPoint = contactPoints [0];

                        float   separation         = contactPointTemp.contactPoint.separation;
                        Vector3 contactPointNormal = contactPointTemp.contactPoint.normal;
                        contactPointNormal.Normalize();

                        separationVector   = (contactPointNormal) * separation;
                        transform.position = new Vector3(transform.position.x, transform.position.y + Mathf.Abs(separationVector.y), transform.position.z);
                    }
                    PlaneY = transform.position.y;
                    //transform.rotation = initRotation;

                    transform.rotation = Quaternion.Euler(0.0f, transform.eulerAngles.y, 0.0f);
                    if (Hi5_Interaction_Const.TestChangeState)
                    {
                        Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(idObject, mObjectType, EHandType.EHandLeft, EEventObjectType.EStatic);
                        Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null);
                    }
                }
                if (collision.gameObject.layer == Hi5_Interaction_Const.OtherFingerTailLayer() ||
                    collision.gameObject.layer == Hi5_Interaction_Const.ThumbTailLayer())
                {
                    //Debug.Log ("Hi5_Interaction_Const.OtherFingerTailLayer");
                    if (collision.gameObject.GetComponent <Hi5_Hand_Collider_Visible_Finger>())
                    {
                        //float dot = Vector3.Dot(collision.contacts[0].normal, collision.gameObject.transform.parent.right);
                        //if (dot < 0.0f)
                        if (mObjectType == EObject_Type.ECommon)
                        {
                            if (state == E_Object_State.EStatic || state == E_Object_State.EFlyLift)
                            {
                                if (!IsPokeInLoop)
                                {
                                    ContactPoint[] contactPoints = collision.contacts;
                                    if (contactPoints != null && contactPoints.Length > 0)
                                    {
                                        Vector3 normal = contactPoints [0].normal;
                                        float   angle  = Vector3.Angle(Hi5_Interaction_Object_Manager.GetObjectManager().transform.up, normal);

                                        if (Mathf.Abs(angle) > 25.0f)
                                        {
                                            NotifyPokeEvent(collision);
                                            IsPokeInLoop = true;
                                        }
                                    }
                                }
                            }



                            if (Hi5_Interaction_Const.TestChangeState)
                            {
                                if (mstatemanager.State == E_Object_State.EStatic ||
                                    (mstatemanager.State == E_Object_State.EMove && mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EPlaneMove))
                                {
                                    Hi5_Hand_Visible_Hand handTemp = collision.gameObject.GetComponent <Hi5_Hand_Collider_Visible_Finger>().mHand;
                                    if (mstatemanager != null)
                                    {
                                        mstatemanager.SetPlaneMove(collision);
                                    }
                                    ChangeState(E_Object_State.EMove);
                                    {
                                        Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(idObject, mObjectType, handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight, EEventObjectType.EMove);
                                        Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null);
                                    }
                                }
                            }
                            else
                            {
                                if (mstatemanager.State == E_Object_State.EStatic || mstatemanager.State == E_Object_State.EMove)
                                {
                                    Hi5_Hand_Visible_Hand handTemp = collision.gameObject.GetComponent <Hi5_Hand_Collider_Visible_Finger>().mHand;
                                    if (mstatemanager != null)
                                    {
                                        mstatemanager.SetPlaneMove(collision);
                                    }
                                    ChangeState(E_Object_State.EMove);
                                    {
                                        Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(idObject, mObjectType, handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight, EEventObjectType.EMove);
                                        Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            UnityEngine.Profiling.Profiler.EndSample();;
        }
        //GameObject Clone = null;
        internal void CalculateThrowMove(Queue <Hi5_Position_Record> records, Transform handPalm, Hi5_Glove_Interaction_Hand hand)
        {
            mIsFlyMovePause = false;
            int     index            = 0;
            int     weightPointCount = 0;
            float   timeCount        = 0.0f;
            Vector3 distanceVector   = Vector3.zero;

            foreach (Hi5_Position_Record item in records)
            {
                if (Hi5_Interaction_Const.RecordPositionWeight.Length > index)
                {
                    int weight = Hi5_Interaction_Const.RecordPositionWeight[index];
                    weightPointCount += weight;
                    timeCount        += item.mIntervalTime * weight;
                    distanceVector   += item.mMoveVector * weight;
                }
                index++;
            }
            if (index <= 1)
            {
//				mMoveData = new ObjectMoveData();
//				mMoveData.mDirection = new Vector3 (0.0f, 0.08598139f, 0.0f);
//				mMoveData.y = mMoveData.mDirection.y;
//				mMoveData.ySpeed = mMoveData.mDirection.y;
                //Debug.Log("index <= 1");
                Vector3 temp = hand.MoveAnchor.position - hand.mPalm.transform.position;
                temp.Normalize();
                mMoveData            = new ObjectMoveData();
                mMoveData.mDirection = temp * 0.3998139f;
                mMoveData.y          = mMoveData.mDirection.y;
                mMoveData.ySpeed     = mMoveData.mDirection.y;

//				mMoveData = new ObjectMoveData();
//				mMoveData.mDirection = distanceVector / timeCount* Hi5_Interaction_Const.ThrowSpeed;
//				mMoveData.y = mMoveData.mDirection.y;
//				mMoveData.ySpeed = mMoveData.mDirection.y;

                Hi5_Interaction_Const.WriteItemMoveXml(records, mMoveData);
            }
            else
            {
                //Debug.Log("index > 1");
                mMoveData            = new ObjectMoveData();
                mMoveData.mDirection = distanceVector / timeCount * Hi5_Interaction_Const.ThrowSpeed;
                mMoveData.y          = mMoveData.mDirection.y;
                mMoveData.ySpeed     = mMoveData.mDirection.y;
                Hi5_Interaction_Const.WriteItemMoveXml(records, mMoveData);
            }

            //if (Hi5_Interaction_Const.TestPhycis)
            //if (Hi5_Interaction_Const.TestModifyConstraints)
            {
                //mItem.SetIsKinematic (false);
                //mItem.SetUseGravity (true);
                //mItem.CleanLock ();

                if (mItem.GetComponent <Hi5_Object_Property>() != null &&
                    mItem.GetComponent <Hi5_Object_Property>().ObjectProperty.AirMoveProperty != null)
                {
                    mItem.SetIsKinematic(false);
                    mItem.SetUseGravity(true);
                    mItem.GetComponent <Rigidbody>().constraints = RigidbodyConstraints.None;
                    mItem.GetComponent <Hi5_Object_Property>().SetRotation(mItem.GetComponent <Hi5_Object_Property>().ObjectProperty.AirMoveProperty.ConstraintsFreezeRotation,
                                                                           mItem.GetComponent <Hi5_Object_Property>().ObjectProperty.AirMoveProperty.ConstraintsFreezeRotation,
                                                                           mItem.GetComponent <Hi5_Object_Property>().ObjectProperty.AirMoveProperty.ConstraintsFreezeRotation);
                }
                else
                {
                    mItem.SetIsKinematic(false);
                    mItem.SetUseGravity(true);
                    mItem.CleanLock();
                }
            }

            mMoveType          = Hi5ObjectMoveType.EThrowMove;
            protectedTransform = handPalm;
            IsProtectFly       = true;
        }
Beispiel #21
0
        internal void CacullateThrowMove(Queue <Hi5_Position_Record> records, Transform handPalm, Hi5_Glove_Interaction_Hand hand)
        {
            mIsFlyMovePause = false;
            int     index            = 0;
            int     weightPointCount = 0;
            float   timeCount        = 0.0f;
            Vector3 distanceVector   = Vector3.zero;

            foreach (Hi5_Position_Record item in records)
            {
                if (Hi5_Interaction_Const.RecordPositionWeight.Length > index)
                {
                    int weight = Hi5_Interaction_Const.RecordPositionWeight[index];
                    weightPointCount += weight;
                    timeCount        += item.mIntervalTime * weight;
                    distanceVector   += item.mMoveVector * weight;
                }
                index++;
            }
            if (index <= 1)
            {
//				mMoveData = new ObjectMoveData();
//				mMoveData.mDirection = new Vector3 (0.0f, 0.08598139f, 0.0f);
//				mMoveData.y = mMoveData.mDirection.y;
//				mMoveData.ySpeed = mMoveData.mDirection.y;

                Vector3 temp = hand.MoveAnchor.position - hand.mPalm.transform.position;
                temp.Normalize();
                mMoveData            = new ObjectMoveData();
                mMoveData.mDirection = temp * 0.3998139f;
                mMoveData.y          = mMoveData.mDirection.y;
                mMoveData.ySpeed     = mMoveData.mDirection.y;

//				mMoveData = new ObjectMoveData();
//				mMoveData.mDirection = distanceVector / timeCount* Hi5_Interaction_Const.ThrowSpeed;
//				mMoveData.y = mMoveData.mDirection.y;
//				mMoveData.ySpeed = mMoveData.mDirection.y;

                Hi5_Interaction_Const.WriteItemMoveXml(records, mMoveData);
            }
            else
            {
                mMoveData            = new ObjectMoveData();
                mMoveData.mDirection = distanceVector / timeCount * Hi5_Interaction_Const.ThrowSpeed;
                mMoveData.y          = mMoveData.mDirection.y;
                mMoveData.ySpeed     = mMoveData.mDirection.y;
                Hi5_Interaction_Const.WriteItemMoveXml(records, mMoveData);
            }



            //if (Hi5_Interaction_Const.TestFlyMoveNoUsedGravity)
            {
                mItem.SetIsKinematic(true);
                mItem.SetUseGravity(false);
            }
            //else
            //{
            //    mItem.SetIsKinematic(false);
            //    mItem.SetUseGravity(true);
            //}


            mMoveType         = Hi5ObjectMoveType.EThrowMove;
            protecedTransform = handPalm;
            IsProtectFly      = true;
        }