diff --git a/examples/SharedMemory/PhysicsServerExample.cpp b/examples/SharedMemory/PhysicsServerExample.cpp index 6ae9a654d..75e475738 100644 --- a/examples/SharedMemory/PhysicsServerExample.cpp +++ b/examples/SharedMemory/PhysicsServerExample.cpp @@ -140,11 +140,11 @@ void MotionThreadFunc(void* userPtr,void* lsMemory) btVector3 from = args->m_pos; btMatrix3x3 mat(args->m_orn); - + btScalar pickDistance = 100.; btVector3 toX = args->m_pos+mat.getColumn(0); btVector3 toY = args->m_pos+mat.getColumn(1); - btVector3 toZ = args->m_pos+mat.getColumn(2)*50.; - + btVector3 toZ = args->m_pos+mat.getColumn(2)*pickDistance; + if (args->m_isPicking) { diff --git a/examples/StandaloneMain/hellovr_opengl_main.cpp b/examples/StandaloneMain/hellovr_opengl_main.cpp index 630c2d3e8..e85b8af0e 100644 --- a/examples/StandaloneMain/hellovr_opengl_main.cpp +++ b/examples/StandaloneMain/hellovr_opengl_main.cpp @@ -30,11 +30,14 @@ int gSharedMemoryKey = -1; #include "pathtools.h" CommonExampleInterface* sExample; -int sIsPressed=-1; + int sPrevPacketNum=0; GUIHelperInterface* sGuiPtr = 0; +static vr::VRControllerState_t sPrevStates[vr::k_unMaxTrackedDeviceCount] = { 0 }; + + #if defined(POSIX) #include "unistd.h" #endif @@ -663,63 +666,57 @@ bool CMainApplication::HandleInput() vr::VRControllerState_t state; if( m_pHMD->GetControllerState( unDevice, &state ) ) { - uint64_t trigger = vr::ButtonMaskFromId(vr::k_EButton_SteamVR_Trigger); - - if (sPrevPacketNum != state.unPacketNum) + //we need to have the 'move' events, so no early out here + //if (sPrevStates[unDevice].unPacketNum != state.unPacketNum) { - - static int counter=0; - sPrevPacketNum = state.unPacketNum; - //b3Printf("."); - bool isTrigger = (state.ulButtonPressed&trigger)!=0; - if (isTrigger) + sPrevStates[unDevice].unPacketNum = state.unPacketNum; + + for (int button = 0; button < vr::k_EButton_Max; button++) { - //printf("unDevice=%d\n",unDevice); - b3Transform tr; - getControllerTransform(unDevice,tr); - float pos[3] = {tr.getOrigin()[0],tr.getOrigin()[1],tr.getOrigin()[2]}; - b3Quaternion born = tr.getRotation(); - float orn[4] = {born[0],born[1],born[2],born[3]}; - + uint64_t trigger = vr::ButtonMaskFromId((vr::EVRButtonId)button); - if (sIsPressed!=unDevice) + bool isTrigger = (state.ulButtonPressed&trigger) != 0; + if (isTrigger) { - b3Printf("trigger pressed %d, %d\n",counter++, unDevice); - sIsPressed=unDevice; - sExample->vrControllerButtonCallback(unDevice,1,1,pos, orn); - - // - //virtual void vrControllerMoveCallback(int controllerId, float pos[4], float orientation[4]) {} - //virtual void vrControllerButtonCallback(int controllerId, int button, int state, float pos[4], float orientation[4]){} - - //sExample->start - } else - { - sExample->vrControllerMoveCallback(unDevice,pos,orn); - } - //sExample->exitPhysics(); - //m_app->m_instancingRenderer->removeAllInstances(); - ///sExample->initPhysics(); - } else - { - if (unDevice==sIsPressed) - { b3Transform tr; - getControllerTransform(unDevice,tr); - float pos[3] = {tr.getOrigin()[0],tr.getOrigin()[1],tr.getOrigin()[2]}; + getControllerTransform(unDevice, tr); + float pos[3] = { tr.getOrigin()[0], tr.getOrigin()[1], tr.getOrigin()[2] }; b3Quaternion born = tr.getRotation(); - float orn[4] = {born[0],born[1],born[2],born[3]}; + float orn[4] = { born[0], born[1], born[2], born[3] }; - sIsPressed=-1; - printf("device released: %d",unDevice); - sExample->vrControllerButtonCallback(unDevice,1,0,pos, orn); + //pressed now, not pressed before -> raise a button down event + if ((sPrevStates[unDevice].ulButtonPressed&trigger)==0) + { +// printf("Device PRESSED: %d, button %d\n", unDevice, button); + sExample->vrControllerButtonCallback(unDevice, button, 1, pos, orn); + } + else + { +// printf("Device MOVED: %d\n", unDevice); + sExample->vrControllerMoveCallback(unDevice, pos, orn); + } + } + else + { + //not pressed now, but pressed before -> raise a button up event + if ((sPrevStates[unDevice].ulButtonPressed&trigger) != 0) + { + b3Transform tr; + getControllerTransform(unDevice, tr); + float pos[3] = { tr.getOrigin()[0], tr.getOrigin()[1], tr.getOrigin()[2] }; + b3Quaternion born = tr.getRotation(); + float orn[4] = { born[0], born[1], born[2], born[3] }; +// printf("Device RELEASED: %d, button %d\n", unDevice,button); + sExample->vrControllerButtonCallback(unDevice, button, 0, pos, orn); + } } } } m_rbShowTrackedDevice[ unDevice ] = state.ulButtonPressed == 0; } + sPrevStates[unDevice] = state; } return bRet;