create premake/cmake file for Bullet/Extras/obj2sdf
add missing 1.sdf for Bullet/data/kitchens/1.sdf add support for getting keyboard events (pybullet.getKeyboardEvents and b3RobotSimulatorClientAPI::getKeyboardEvents)
This commit is contained in:
@@ -255,9 +255,11 @@ struct MotionArgs
|
||||
btAlignedObjectArray<MyMouseCommand> m_mouseCommands;
|
||||
|
||||
b3VRControllerEvent m_vrControllerEvents[MAX_VR_CONTROLLERS];
|
||||
|
||||
b3VRControllerEvent m_sendVrControllerEvents[MAX_VR_CONTROLLERS];
|
||||
|
||||
btAlignedObjectArray<b3KeyboardEvent> m_keyboardEvents;
|
||||
btAlignedObjectArray<b3KeyboardEvent> m_sendKeyEvents;
|
||||
|
||||
PhysicsServerSharedMemory* m_physicsServerPtr;
|
||||
b3AlignedObjectArray<b3Vector3> m_positions;
|
||||
|
||||
@@ -408,10 +410,33 @@ void MotionThreadFunc(void* userPtr,void* lsMemory)
|
||||
}
|
||||
}
|
||||
|
||||
args->m_sendKeyEvents.resize(args->m_keyboardEvents.size());
|
||||
for (int i=0;i<args->m_keyboardEvents.size();i++)
|
||||
{
|
||||
args->m_sendKeyEvents[i] = args->m_keyboardEvents[i];
|
||||
if (args->m_keyboardEvents[i].m_keyState&eButtonReleased)
|
||||
{
|
||||
args->m_keyboardEvents[i].m_keyState = 0;
|
||||
} else
|
||||
{
|
||||
args->m_keyboardEvents[i].m_keyState &= ~eButtonTriggered;
|
||||
}
|
||||
}
|
||||
//remove the 'released' events
|
||||
for (int i=args->m_keyboardEvents.size()-1;i>=0;i--)
|
||||
{
|
||||
if (args->m_keyboardEvents[i].m_keyState==0)
|
||||
{
|
||||
args->m_keyboardEvents.removeAtIndex(i);
|
||||
}
|
||||
}
|
||||
|
||||
b3KeyboardEvent* keyEvents = args->m_sendKeyEvents.size()? &args->m_sendKeyEvents[0] : 0;
|
||||
|
||||
args->m_csGUI->unlock();
|
||||
{
|
||||
BT_PROFILE("stepSimulationRealTime");
|
||||
args->m_physicsServerPtr->stepSimulationRealTime(deltaTimeInSeconds, args->m_sendVrControllerEvents,numSendVrControllers);
|
||||
args->m_physicsServerPtr->stepSimulationRealTime(deltaTimeInSeconds, args->m_sendVrControllerEvents,numSendVrControllers, keyEvents, args->m_sendKeyEvents.size());
|
||||
}
|
||||
deltaTimeInSeconds = 0;
|
||||
|
||||
@@ -1086,6 +1111,59 @@ public:
|
||||
return false;
|
||||
}
|
||||
virtual bool keyboardCallback(int key, int state){
|
||||
|
||||
//printf("key=%d, state=%d\n", key,state);
|
||||
{
|
||||
int keyIndex = -1;
|
||||
//is already there?
|
||||
for (int i=0;i<m_args[0].m_keyboardEvents.size();i++)
|
||||
{
|
||||
if (m_args[0].m_keyboardEvents[i].m_keyCode == key)
|
||||
{
|
||||
keyIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (state)
|
||||
{
|
||||
b3KeyboardEvent ev;
|
||||
ev.m_keyCode = key;
|
||||
ev.m_keyState = eButtonIsDown+eButtonTriggered;
|
||||
m_args[0].m_csGUI->lock();
|
||||
if (keyIndex>=0)
|
||||
{
|
||||
if (0==(m_args[0].m_keyboardEvents[keyIndex].m_keyState & eButtonIsDown))
|
||||
{
|
||||
m_args[0].m_keyboardEvents[keyIndex] = ev;
|
||||
}
|
||||
} else
|
||||
{
|
||||
m_args[0].m_keyboardEvents.push_back(ev);
|
||||
}
|
||||
m_args[0].m_csGUI->unlock();
|
||||
} else
|
||||
{
|
||||
m_args[0].m_csGUI->lock();
|
||||
b3KeyboardEvent ev;
|
||||
ev.m_keyCode = key;
|
||||
ev.m_keyState = eButtonReleased;
|
||||
if (keyIndex>=0)
|
||||
{
|
||||
m_args[0].m_keyboardEvents[keyIndex]=ev;
|
||||
} else
|
||||
{
|
||||
m_args[0].m_keyboardEvents.push_back(ev);
|
||||
}
|
||||
m_args[0].m_csGUI->unlock();
|
||||
}
|
||||
}
|
||||
/*printf("m_args[0].m_keyboardEvents.size()=%d\n", m_args[0].m_keyboardEvents.size());
|
||||
for (int i=0;i<m_args[0].m_keyboardEvents.size();i++)
|
||||
{
|
||||
printf("key[%d]=%d state = %d\n",i,m_args[0].m_keyboardEvents[i].m_keyCode,m_args[0].m_keyboardEvents[i].m_keyState);
|
||||
}
|
||||
*/
|
||||
if (key=='w' && state)
|
||||
{
|
||||
gVRTeleportPos1[0]+=0.1;
|
||||
|
||||
Reference in New Issue
Block a user