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; }
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]; } }
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); } } } } } } }