void Pinch2Object(string messageKey, object param1, object param2, object param3, object param4)
        {
            if (messageKey.CompareTo(Hi5_MessageKey.messagePinchObject2) == 0)
            {
                List <int> objectIds            = param1 as List <int>;
                Hi5_Glove_Interaction_Hand hand = param2 as Hi5_Glove_Interaction_Hand;
                int objectId = (int)param3;
                if (mObjectDic.ContainsKey(objectId))
                {
                    //ruige 加入判断
                    Hi5_Glove_Interaction_Item pinchObject = mObjectDic[objectId];
                    if (pinchObject != null && pinchObject.mObjectType == EObject_Type.ECommon)
                    {
                        hand.AddPinch2Object(pinchObject.transform, hand.mVisibleHand.palm);

                        pinchObject.SetIsKinematic(true);
                        pinchObject.ChangeState(E_Object_State.EPinch);
                        Hi5_Object_State_Base state = pinchObject.mstatemanager.GetState(E_Object_State.EPinch);
                        if (state != null && (state is Hi5_Object_State_Pinch))
                        {
                            Hi5_Object_State_Pinch pinchState = state as Hi5_Object_State_Pinch;
                            if (hand.m_IsLeftHand)
                            {
                                pinchState.SetPinchHand(Hi5_Object_Pinch_Type.ELeft, hand);
                            }
                            else
                            {
                                pinchState.SetPinchHand(Hi5_Object_Pinch_Type.ERight, hand);
                            }
                        }
                    }
                }
            }
        }
        protected void init(Hi5_Glove_Interaction_Item objectItem)
        {
            mItem = objectItem;
            Hi5_Object_State_Pinch pinchState = new Hi5_Object_State_Pinch();

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

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

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

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

            pokeState.Init(objectItem, this);
            //if (Hi5_Interaction_Const.TestFlyMoveNoUsedGravity)
            {
                Hi5_Object_State_Fly_Lift flyLift = new Hi5_Object_State_Fly_Lift();
                flyLift.Init(objectItem, this);
                mDicState.Add(E_Object_State.EFlyLift, flyLift);
            }
            mDicState.Add(E_Object_State.EPinch, pinchState);
            mDicState.Add(E_Object_State.EStatic, releaseState);
            mDicState.Add(E_Object_State.EMove, moveState);
            mDicState.Add(E_Object_State.EClap, clapState);
            mDicState.Add(E_Object_State.EPoke, pokeState);
            mCurrentState = releaseState;
        }
Example #3
0
 internal protected void StopThrowMove(bool isTouchObject = false)
 {
     if (State == E_Object_State.EMove)
     {
         if (mDicState[E_Object_State.EMove] is Hi5_Object_State_Move)
         {
             if ((mDicState[E_Object_State.EMove] as Hi5_Object_State_Move).Move != null)
             {
                 if ((mDicState[E_Object_State.EMove] as Hi5_Object_State_Move).Move.mMoveType == Hi5ObjectMoveType.EThrowMove ||
                     (mDicState[E_Object_State.EMove] as Hi5_Object_State_Move).Move.mMoveType == Hi5ObjectMoveType.EFree)
                 {
                     ////Debug.Log("StopThrowMove");
                     ChangeState(E_Object_State.EStatic, true);
                     Hi5_Object_State_Base temp = GetState(E_Object_State.EStatic);
                     if (isTouchObject)
                     {
                         (temp as Hi5_Object_State_Static).isTouchObject = true;
                     }
                 }
             }
         }
     }
     if (State == E_Object_State.EFlyLift)
     {
         //Debug.Log("StopThrowMove");
         ChangeState(E_Object_State.EStatic, true);
     }
 }
        void FlyPinchObject(string messageKey, object param1, object param2, object param3, object param4)
        {
            if (messageKey.CompareTo(Hi5_MessageKey.messageFlyPinchObject) == 0)
            {
                List <int> objectIds            = param1 as List <int>;
                Hi5_Glove_Interaction_Hand hand = param2 as Hi5_Glove_Interaction_Hand;
                int objectId = (int)param3;

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

                        //pinchObject.transform.position = hand.mPalm.transform.position;
                        pinchObject.ChangeState(E_Object_State.EPinch);
                        Hi5_Object_State_Base state = pinchObject.mstatemanager.GetState(E_Object_State.EPinch);
                        if (state != null && (state is Hi5_Object_State_Pinch))
                        {
                            Hi5_Object_State_Pinch pinchState = state as Hi5_Object_State_Pinch;
                            //pinchState.isTestRelease = true;
                            if (hand.m_IsLeftHand)
                            {
                                pinchState.SetPinchHand(Hi5_Object_Pinch_Type.ELeft, hand);
                            }
                            else
                            {
                                pinchState.SetPinchHand(Hi5_Object_Pinch_Type.ERight, hand);
                            }
                        }
                    }
                }
                //if (objectIds != null && objectIds.Count > 0 && mObjectDic.ContainsKey(objectIds[0]))
                //{
                //    Hi5_Glove_Interraction_Item pinchObject = mObjectDic[objectIds[0]];
                //    hand.AddPinchObject(pinchObject.transform);
                //    pinchObject.SetIsKinematic(true);
                //    pinchObject.ChangeState(E_Object_State.EPinch);
                //}
            }
        }
        internal protected void ChangeState(E_Object_State state, bool iForce = false)
        {
            if (State == state && !iForce)
            {
                return;
            }

            State = state;
            if (Hi5_Interaction_Const.TestChangeState1 && mItem != null)
            {
                mItem.state = State;
            }
            mCurrentState.End();
            if (mDicState.ContainsKey(state))
            {
                mDicState[state].Start();
                //Debug.Log ("object state"+state);
                mCurrentState = mDicState[state];
            }
        }
Example #6
0
        void PinchObject(string messageKey, object param1, object param2, object param3, object param4)
        {
            if (messageKey.CompareTo(Hi5_MessageKey.messagePinchObject) == 0)
            {
                List <int> objectIds            = param1 as List <int>;
                Hi5_Glove_Interaction_Hand hand = param2 as Hi5_Glove_Interaction_Hand;
                int objectId = (int)param3;
                if (mObjectDic.ContainsKey(objectId))
                {
                    Hi5_Glove_Interaction_Item pinchObject = mObjectDic[objectId];
                    hand.AddPinchObject(pinchObject.transform);
                    pinchObject.SetIsKinematic(true);

                    pinchObject.ChangeState(E_Object_State.EPinch);

                    Hi5_Object_State_Base state = pinchObject.mstatemanager.GetState(E_Object_State.EPinch);
                    if (state != null && (state is Hi5_Object_State_Pinch))
                    {
                        Hi5_Object_State_Pinch pinchState = state as Hi5_Object_State_Pinch;
                        if (hand.m_IsLeftHand)
                        {
                            pinchState.SetPinchHand(Hi5_Object_Pinch_Type.ELeft, hand);
                        }
                        else
                        {
                            pinchState.SetPinchHand(Hi5_Object_Pinch_Type.ERight, hand);
                        }
                    }
                }
                //if (objectIds != null && objectIds.Count > 0 && mObjectDic.ContainsKey(objectIds[0]))
                //{
                //    Hi5_Glove_Interraction_Item pinchObject = mObjectDic[objectIds[0]];
                //    hand.AddPinchObject(pinchObject.transform);
                //    pinchObject.SetIsKinematic(true);
                //    pinchObject.ChangeState(E_Object_State.EPinch);
                //}
            }
        }
 void LiftObject(string messageKey, object param1, object param2, object param3, object param4)
 {
     //Debug.Log("LiftObject");
     // Hi5_MessageKey.messageLiftObject, Hand, ObjectId
     if (messageKey.CompareTo(Hi5_MessageKey.messageLiftObject) == 0)
     {
         Hi5_Glove_Interaction_Hand hand = param1 as Hi5_Glove_Interaction_Hand;
         int id = (int)param2;
         if (mObjectDic.ContainsKey(id))
         {
             Hi5_Glove_Interaction_Item pinchObject = mObjectDic[id];
             if (pinchObject != null && pinchObject.mObjectType == EObject_Type.ECommon)
             {
                 Hi5_Object_State_Base state = pinchObject.mstatemanager.GetState(E_Object_State.EFlyLift);
                 if (state is Hi5_Object_State_Fly_Lift)
                 {
                     (state as Hi5_Object_State_Fly_Lift).hand = hand;
                 }
                 pinchObject.mstatemanager.ChangeState(E_Object_State.EFlyLift);
             }
         }
     }
 }
        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);
                                }
                            }
                        }
                    }
                }
            }
        }