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); }
override internal protected void Init(Hi5_Glove_Interaction_Item itemObject, Hi5_Obiect_State_Manager state) { mObjectItem = itemObject; mState = state; mMoveObject = new Hi5_Object_Move(itemObject, state); mMoveObject.SetAttribute(mObjectItem.AirFrictionRate, mObjectItem.PlaneFrictionRate); }
public static float GetDistance(Transform palm, Hi5_Glove_Interaction_Item ObjectItem, out bool ContactIsSelf) { if (palm == null || ObjectItem == null) { ContactIsSelf = false; return(0.0f); } Ray ray = new Ray(palm.position, ObjectItem.transform.position - palm.position); RaycastHit hit; if (Physics.Raycast(ray, out hit, Mathf.Infinity)) { if (hit.transform == ObjectItem.transform || hit.transform.parent == ObjectItem.transform) { ContactIsSelf = true; float distance = Vector3.Distance(palm.position, hit.point); return(distance); } else { ContactIsSelf = false; return(0.0f); } } else { ContactIsSelf = false; return(0.0f); } }
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); } } } } } }
//bool isColliderStaticObjectGrasp = false; internal bool IsTouchStaticObject() { if (trigger != null && trigger.IsTiggerObject) { Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(trigger.mTiggerObjectId); if (item != null) { if (item.state == E_Object_State.EStatic) { return(true); } else { //Debug.Log ("1"); return(false); } } else { //Debug.Log ("2"); return(false); } } else { //Debug.Log ("3"); return(false); } }
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; }
public void AddObject(Hi5_Glove_Interaction_Item item, int key) { if (!mObjectDic.ContainsKey(key)) { mObjectDic.Add(key, item); } }
internal static Hi5_Obiect_State_Manager CreateState(Hi5_Glove_Interaction_Item objectItem) { Hi5_Obiect_State_Manager state = new Hi5_Obiect_State_Manager(); state.init(objectItem); return(state); }
internal bool IsClap() { if (mHand.gameObject.GetComponent <Hi5_Glove_Property>() != null) { if (!mHand.gameObject.GetComponent <Hi5_Glove_Property>().Property_Data.IsClap) { return(false); } } int objectId = 0; Hi5_Glove_Interaction_Finger_Type fingTypeOne; Hi5_Glove_Interaction_Finger_Type fingTypeTwo; bool isClap = mHand.mState.mJudgeMent.IsClap(out objectId, out fingTypeOne, out fingTypeTwo); Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(objectId); if (item != null && (item.state == E_Object_State.EStatic || item.state == E_Object_State.EPoke)) { Hi5_Object_State_Clap clapState = item.mstatemanager.GetState(E_Object_State.EClap) as Hi5_Object_State_Clap; clapState.fingerTypeOne = fingTypeOne; clapState.fingerTypeTwo = fingTypeTwo; clapState.hand = mHand; if (mHand.m_IsLeftHand) { clapState.handType = Hi5_Object_State_Clap.Hi5_Object_Clap_Type.ELeft; } else { clapState.handType = Hi5_Object_State_Clap.Hi5_Object_Clap_Type.ERight; } Hi5_Glove_Interaction_Hand handTemp = mHand; item.mstatemanager.ChangeState(E_Object_State.EClap); Hi5_Glove_State_Clap handState = null; mState.GetGloveState <Hi5_Glove_State_Clap> (E_Hand_State.EClap, out handState); if (handState != null) { handState.objectId = objectId; } mState.ChangeState(E_Hand_State.EClap); { 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.EClap); 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.EClap); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageHandEvent, (object)data, null); } return(true); } return(false); }
internal bool IsFlyPinch() { List <int> pinchs4; //isPinch = Hand.mState.mJudgeMent.IsPinch(out pinchs4, out ObjectId); //if(!isPinch) int ObjectId = -1000; bool isPinch = mHand.mState.mJudgeMent.IsFlyIngPinch(out pinchs4, out ObjectId); if (isPinch) { Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(ObjectId); float dis = Mathf.Abs(item.PlaneY - item.transform.position.y); if (item != null && item.state == E_Object_State.EMove && (item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EThrowMove || item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EFree) && !item.mstatemanager.GetMoveState().IsProtectionFly() && dis > (0.1f * item.GetHeight())) { if (item.mObjectType == EObject_Type.ECommon) { Hi5_Interaction_Message.GetInstance().DispenseMessage(Hi5_MessageKey.messageFlyPinchObject, pinchs4, mHand, ObjectId); Hi5_Glove_State_Base baseState = mState.GetBaseState(E_Hand_State.EPinch); if (baseState != null) { (baseState as Hi5_Glove_State_Pinch).isPinchCollider = true; (baseState as Hi5_Glove_State_Pinch).objectId = ObjectId; } item.transform.position = mHand.GetThumbAndMiddlePoin(); item.CleanRecord(); mState.ChangeState(E_Hand_State.EPinch); Hi5_Glove_Interaction_Hand handTemp = mHand; // if (handTemp.m_IsLeftHand) // { // Debug.Log ("Left pinch"); // } { Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(item.idObject, item.mObjectType, handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight, EEventObjectType.EPinch); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null); } { Hi5_Glove_Interaction_Hand_Event_Data data = Hi5_Glove_Interaction_Hand_Event_Data.Instance(item.idObject, handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight, EEventHandType.EPinch); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageHandEvent, (object)data, null); } return(true); } } } return(false); }
private bool IsRealese() { Hi5_Glove_Interaction_Item itemObject = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(objectId); if (itemObject == null) { return(false); } List <Collider> triggers = itemObject.GetTriggers(); if (triggers != null && triggers.Count > 0) { foreach (Collider item in triggers) { if (item.gameObject.GetComponent <Hi5_Glove_Collider_Finger>() != null && item.gameObject.GetComponent <Hi5_Glove_Collider_Finger>().mFinger != null && item.gameObject.GetComponent <Hi5_Glove_Collider_Finger>().mFinger.mHand != null) { if (Hand.m_IsLeftHand) { if (item.gameObject.GetComponent <Hi5_Glove_Collider_Finger>().mFinger.mHand.m_IsLeftHand) { return(false); } } else { if (!item.gameObject.GetComponent <Hi5_Glove_Collider_Finger>().mFinger.mHand.m_IsLeftHand) { return(false); } } } else if (item.gameObject.GetComponent <Hi5_Glove_Collider_Palm>() != null && item.gameObject.GetComponent <Hi5_Glove_Collider_Palm>().mHand != null) { if (Hand.m_IsLeftHand) { if (item.gameObject.GetComponent <Hi5_Glove_Collider_Palm>().mHand.m_IsLeftHand) { return(false); } } else if (Hand.m_IsLeftHand) { if (!item.gameObject.GetComponent <Hi5_Glove_Collider_Palm>().mHand.m_IsLeftHand) { return(false); } } } } } return(true); }
internal bool IsPinch2() { List <int> pinchs2; List <Hi5_Glove_Interaction_Finger> fingers = null; int ObjectId = -1000; bool isPinch2 = mHand.mState.mJudgeMent.IsPinch2(out pinchs2, out fingers, out ObjectId); Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(ObjectId); if (item != null && item.mObjectType == EObject_Type.ECommon && item.mstatemanager != null && item.mstatemanager.GetMoveState() != null && (item.state == E_Object_State.EStatic || item.state == E_Object_State.EPinch || item.state == E_Object_State.EFlyLift || item.state == E_Object_State.EClap || (item.state == E_Object_State.EMove && item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EPlaneMove) || (item.state == E_Object_State.EMove && item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EFree))) { if (isPinch2 && pinchs2 != null && pinchs2.Count > 0 && fingers != null) { foreach (Hi5_Glove_Interaction_Finger tempItem in fingers) { tempItem.NotifyEnterPinch2State(); } Hi5_Interaction_Message.GetInstance().DispenseMessage(Hi5_MessageKey.messagePinchObject2, pinchs2, mHand, ObjectId); Hi5_Glove_State_Base baseState = mState.GetBaseState(E_Hand_State.EPinch2); if (baseState != null) { (baseState as Hi5_Glove_State_Pinch2).objectId = ObjectId; } item.CleanRecord(); Hi5_Glove_Interaction_Hand handTemp = mHand; mState.ChangeState(E_Hand_State.EPinch2); { Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(item.idObject, item.mObjectType, handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight, EEventObjectType.EPinch); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null); } { Hi5_Glove_Interaction_Hand_Event_Data data = Hi5_Glove_Interaction_Hand_Event_Data.Instance(item.idObject, handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight, EEventHandType.EPinch); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageHandEvent, (object)data, null); } return(true); } } return(false); }
internal bool IsLift() { int objectId = 0; // Hi5_Glove_Interaction_Finger_Type fingType; bool islift = mHand.mState.mJudgeMent.IsLift(out objectId); Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(objectId); if (item != null && item.mObjectType == EObject_Type.ECommon && (item.state == E_Object_State.EStatic || /*|| item.state == E_Object_State.EPinch || item.state == E_Object_State.EFlyLift || item.state == E_Object_State.EClap*/ (item.state == E_Object_State.EMove)) && islift) { Hi5_Glove_State_Lift liftState = mHand.mState.GetBaseState(E_Hand_State.ELift) as Hi5_Glove_State_Lift; liftState.objectId = objectId; Hi5_Glove_Interaction_Hand handTemp = mHand; Hi5_Interaction_Message.GetInstance().DispenseMessage(Hi5_MessageKey.messageLiftObject, mHand, objectId); if (Hi5_Interaction_Const.TestChangeState) { mState.ChangeState(E_Hand_State.ELift); } { Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(item.idObject, item.mObjectType, handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight, EEventObjectType.ELift); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null); } { Hi5_Glove_Interaction_Hand_Event_Data data = Hi5_Glove_Interaction_Hand_Event_Data.Instance(item.idObject, handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight, EEventHandType.ELift); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageHandEvent, (object)data, null); } //Hi5_Glove_Interaction_Object_Event_Data data = new Hi5_Glove_Interaction_Object_Event_Data(); //if (Hand.m_IsLeftHand) // data.mHandType = EHandType.EHandLeft; //else // data.mHandType = EHandType.EHandRight; //data.mObjectType = item.mObjectType; //data.mEventType = EEventType.ELift; //data.mObjectId = item.idObject; //Hi5InteractionManger.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null); return(true); } return(false); }
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); //} } }
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); //} } }
//bool isColliderStaticObjectGrasp = false; internal bool IsTouchStaticObject(out int ObjctID) { ObjctID = -1000; bool isTriggerObjectId = false; foreach (Hi5_Interaction_Item_Collider item in itemColliders) { if (item.trigger != null && item.trigger.IsTriggerObject) { Hi5_Glove_Interaction_Item itemTemp = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(item.trigger.mTriggerObjectId); if (itemTemp != null) { if (itemTemp.state == E_Object_State.EStatic || itemTemp.state == E_Object_State.EFlyLift || itemTemp.state == E_Object_State.EMove) { ObjctID = itemTemp.idObject; isTriggerObjectId = true; break; } } } } return(isTriggerObjectId); }
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); } } } }
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); } } }
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); }
virtual internal protected void Init(Hi5_Glove_Interaction_Item itemObject, Hi5_Object_State_Manager state) { mObjectItem = itemObject; mState = state; }
internal bool IsLift(out int objectId) { //if (Hi5_Interaction_Const.TestFlyMoveNoUsedGravity) { List <int> collisionIndexs; bool index = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex].IsLift(out collisionIndexs); List <int> collisionMiddles; bool middle = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle].IsLift(out collisionMiddles); List <int> collisionRings; bool ring = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.ERing].IsLift(out collisionRings); List <int> collisionResults1 = null; if (index && middle && collisionIndexs != null && collisionMiddles != null && collisionIndexs.Count > 0 && collisionMiddles.Count > 0) { collisionResults1 = collisionIndexs.Intersect(collisionMiddles).ToList(); } List <int> collisionResults2 = null; if (ring && middle && collisionRings != null && collisionMiddles != null && collisionRings.Count > 0 && collisionMiddles.Count > 0) { collisionResults2 = collisionRings.Intersect(collisionMiddles).ToList(); } List <int> collisionPalms; int tempId = -1; // bool palm = Hand.mPalm.IsClap(out collisionPalms); //bool palm = Hand.mPalm.IsLift(out collisionPalms); List <int> collisionResult = null; // if (palm && collisionPalms != null && collisionPalms.Count > 0) { collisionResult = collisionPalms; } if (collisionResult == null && collisionResults1 != null && collisionResults1.Count > 0) { collisionResult = collisionResults1; } else { if (collisionResult != null && collisionResult.Count > 0 && collisionResults1 != null && collisionResults1.Count > 0) { List <int> collisionResultValue = collisionResult.Intersect(collisionResults1).ToList(); collisionResult = collisionResultValue; } else { if (collisionResults1 != null && collisionResults1.Count > 0) { collisionResult = collisionResults1; } } } if (collisionResult == null && collisionResults2 != null && collisionResults2.Count > 0) { collisionResult = collisionResults2; } else { if (collisionResult != null && collisionResult.Count > 0 && collisionResults2 != null && collisionResults2.Count > 0) { List <int> collisionResultValue = collisionResult.Intersect(collisionResults2).ToList(); collisionResult = collisionResultValue; } else { if (collisionResults2 != null && collisionResults2.Count > 0) { collisionResult = collisionResults2; } } } if (collisionResult != null && collisionResult.Count > 0) { for (int i = 0; i < collisionResult.Count; i++) { int idObject = collisionResult[i]; Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(idObject); if ((item.mstatemanager.State == E_Object_State.EMove && (item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EThrowMove || item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EFree)) || item.mstatemanager.State == E_Object_State.EStatic) { float angle = Vector3.Angle(Hi5_Interaction_Object_Manager.GetObjectManager().transform.up, -Hand.mPalm.transform.up); if (angle < Hi5_Interaction_Const.FlyLiftPamlAngel && angle > 0.0f) { if (Hand.mPalm.mAnchor == null) { Hand.mPalm.mAnchor = Hand.mPalm.transform.GetChild(0); } Vector3 pamlUp = -Hand.mPalm.mAnchor.up; Vector3 v1 = item.transform.position - Hand.mPalm.mAnchor.position; //float dotValue = Vector3.Dot(v1, pamlUp); float angleVale = Vector3.Angle(v1, pamlUp); //Debug.Log ("angleVale =" +angleVale); if (angleVale < 0.0f) { angleVale = 180.0f - angleVale; } //Debug.Log ("angleVale =" +angleVale); if (angleVale > 85.0f) { } else { tempId = idObject; } break; } } } if (tempId == -1) { objectId = -1; return(false); } else { objectId = tempId; return(true); } } else { objectId = -1; return(false); } } //else //{ // objectId = -1; // return 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); }
internal bool IsClap(out int objectId, out Hi5_Glove_Interaction_Finger_Type fingerOneType, out Hi5_Glove_Interaction_Finger_Type fingerTwoType) { List <int> collisionIndexs; bool index = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex].IsClap(out collisionIndexs); List <int> collisionMiddles; bool middle = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle].IsClap(out collisionMiddles); List <int> collisionRings; bool ring = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.ERing].IsClap(out collisionRings); List <int> collisionPalms; // bool pinky = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EPinky].IsClap(out collisionRings); // List<int> collisionPinkys; //手腕 bool palm = Hand.mPalm.IsClap(out collisionPalms); if (palm && collisionPalms != null && collisionPalms.Count > 0) { for (int i = 0; i < collisionPalms.Count; i++) { int idObject = collisionPalms[i]; Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(idObject); //判断夹角 Transform palmTransform = Hand.mPalm.transform; Transform onPoint = item.transform; Vector3 temp = onPoint.position - palmTransform.position; float tempValue = Vector3.Dot(temp, palmTransform.up); if (tempValue < 0) { objectId = collisionPalms[i]; fingerOneType = Hi5_Glove_Interaction_Finger_Type.ENone; fingerTwoType = Hi5_Glove_Interaction_Finger_Type.ENone; float angelUpWorld = Vector3.Angle(palmTransform.transform.up, Hi5_Interaction_Object_Manager.GetObjectManager().transform.up); if (angelUpWorld < 45.0f && angelUpWorld > 0.0f) { return(true); } else { objectId = -1; fingerOneType = Hi5_Glove_Interaction_Finger_Type.ENone; fingerTwoType = Hi5_Glove_Interaction_Finger_Type.ENone; return(false); } } } } int middleObjectId = -1; Hi5_Glove_Interaction_Finger_Type fingerMiddleType = Hi5_Glove_Interaction_Finger_Type.ENone; { //中指 if (middle && collisionMiddles != null && collisionMiddles.Count > 0) { for (int i = 0; i < collisionMiddles.Count; i++) { int idObject = collisionMiddles[i]; Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(idObject); //判断夹角 Transform palmTransform = Hand.mPalm.transform; Transform onPoint = item.transform; Vector3 temp = onPoint.position - palmTransform.position; float tempValue = Vector3.Dot(temp, palmTransform.up); if (tempValue < 0) { float angelUpWorld = Vector3.Angle(palmTransform.transform.up, Hi5_Interaction_Object_Manager.GetObjectManager().transform.up); //Debug.Log("angelUpWorld=" + angelUpWorld); if (angelUpWorld < 45.0f && angelUpWorld > 0.0f) { middleObjectId = collisionMiddles[i]; fingerMiddleType = Hi5_Glove_Interaction_Finger_Type.EMiddle; //return true; } else { middleObjectId = -1; fingerMiddleType = Hi5_Glove_Interaction_Finger_Type.ENone; //return false; } } } } } int indexObjectId = -1; Hi5_Glove_Interaction_Finger_Type fingerIndexType = Hi5_Glove_Interaction_Finger_Type.ENone; { //index if (index && collisionIndexs != null && collisionIndexs.Count > 0) { for (int i = 0; i < collisionIndexs.Count; i++) { int idObject = collisionIndexs[i]; Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(idObject); //判断夹角 Transform palmTransform = Hand.mPalm.transform; Transform onPoint = item.transform; Vector3 temp = onPoint.position - palmTransform.position; float tempValue = Vector3.Dot(temp, palmTransform.up); if (tempValue < 0) { float angelUpWorld = Vector3.Angle(palmTransform.transform.up, Hi5_Interaction_Object_Manager.GetObjectManager().transform.up); //Debug.Log("angelUpWorld=" + angelUpWorld); if (angelUpWorld < 45.0f && angelUpWorld > 0.0f) { indexObjectId = collisionIndexs[i]; fingerIndexType = Hi5_Glove_Interaction_Finger_Type.EIndex; //return true; } else { indexObjectId = -1; fingerIndexType = Hi5_Glove_Interaction_Finger_Type.ENone; //return false; } } } } } int ringObjectId = -1; Hi5_Glove_Interaction_Finger_Type fingerRingType = Hi5_Glove_Interaction_Finger_Type.ENone; { //ring if (ring && collisionRings != null && collisionRings.Count > 0) { for (int i = 0; i < collisionRings.Count; i++) { int idObject = collisionRings[i]; Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(idObject); //判断夹角 Transform palmTransform = Hand.mPalm.transform; Transform onPoint = item.transform; Vector3 temp = onPoint.position - palmTransform.position; float tempValue = Vector3.Dot(temp, palmTransform.up); if (tempValue < 0) { float angelUpWorld = Vector3.Angle(palmTransform.transform.up, Hi5_Interaction_Object_Manager.GetObjectManager().transform.up); if (angelUpWorld < 45.0f && angelUpWorld > 0.0f) { ringObjectId = collisionRings[i]; fingerRingType = Hi5_Glove_Interaction_Finger_Type.EMiddle; //return true; } else { ringObjectId = -1; fingerRingType = Hi5_Glove_Interaction_Finger_Type.ENone; //return false; } } } } } if (middleObjectId != -1 && indexObjectId != -1 && middleObjectId == indexObjectId) { objectId = middleObjectId; fingerOneType = Hi5_Glove_Interaction_Finger_Type.EMiddle; fingerTwoType = Hi5_Glove_Interaction_Finger_Type.EIndex; return(true); } if (middleObjectId != -1 && ringObjectId != -1 && middleObjectId == ringObjectId) { objectId = middleObjectId; fingerOneType = Hi5_Glove_Interaction_Finger_Type.EMiddle; fingerTwoType = Hi5_Glove_Interaction_Finger_Type.ERing; return(true); } if (indexObjectId != -1 && ringObjectId != -1 && indexObjectId == ringObjectId) { objectId = ringObjectId; fingerOneType = Hi5_Glove_Interaction_Finger_Type.EIndex; fingerTwoType = Hi5_Glove_Interaction_Finger_Type.ERing; return(true); } else { objectId = -1; fingerOneType = Hi5_Glove_Interaction_Finger_Type.ENone; fingerTwoType = Hi5_Glove_Interaction_Finger_Type.ENone; 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); } }
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); } } } } } } }
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 Hi5_Object_Move(Hi5_Glove_Interaction_Item objectItem, Hi5_Obiect_State_Manager state) { mState = state; mItem = objectItem; }
internal Hi5_Object_Move(Hi5_Glove_Interaction_Item objectItem, Hi5_Object_State_Manager state) { mState = state; mItem = objectItem; // objectItem.GetComponent<Rigidbody> }