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