diff --git a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp index 2f5aa52bf..4cd2c5464 100644 --- a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp +++ b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp @@ -434,7 +434,7 @@ struct InternalStateLogger virtual ~InternalStateLogger() {} virtual void stop() = 0; - virtual void logState(btScalar timeStamp)=0; + virtual void logState(btScalar timeStep)=0; }; @@ -456,7 +456,7 @@ struct VideoMP4Loggger : public InternalStateLogger { m_guiHelper->dumpFramesToVideo(0); } - virtual void logState(btScalar timeStamp) + virtual void logState(btScalar timeStep) { //dumping video frames happens in another thread //we could add some overlay of timestamp here, if needed/wanted @@ -586,6 +586,203 @@ struct MinitaurStateLogger : public InternalStateLogger } }; + +struct b3VRControllerEvents +{ + b3VRControllerEvent m_vrEvents[MAX_VR_CONTROLLERS]; + + b3VRControllerEvents() + { + init(); + } + + virtual ~b3VRControllerEvents() + { + } + + void init() + { + for (int i=0;i structNames; + structNames.push_back("stepCount"); + structNames.push_back("timeStamp"); + structNames.push_back("controllerId"); + structNames.push_back("numMoveEvents"); + structNames.push_back("m_numButtonEvents"); + structNames.push_back("posX"); + structNames.push_back("posY"); + structNames.push_back("posZ"); + structNames.push_back("oriX"); + structNames.push_back("oriY"); + structNames.push_back("oriZ"); + structNames.push_back("oriW"); + structNames.push_back("analogAxis"); + structNames.push_back("buttons0"); + structNames.push_back("buttons1"); + structNames.push_back("buttons2"); + structNames.push_back("buttons3"); + structNames.push_back("buttons4"); + structNames.push_back("buttons5"); + structNames.push_back("buttons6"); + m_structTypes = "IfIIIffffffffIIIIIII"; + + const char* fileNameC = fileName.c_str(); + m_logFileHandle = createMinitaurLogFile(fileNameC, structNames, m_structTypes); + + } + virtual void stop() + { + if (m_logFileHandle) + { + closeMinitaurLogFile(m_logFileHandle); + m_logFileHandle = 0; + } + } + virtual void logState(btScalar timeStep) + { + if (m_logFileHandle) + { + + int stepCount = m_loggingTimeStamp; + float timeStamp = m_loggingTimeStamp*timeStep; + + for (int i=0;i=10) + { + packedButtonShift=0; + packedButtonIndex++; + if (packedButtonIndex>=7) + { + btAssert(0); + break; + } + } + } + + for (int b=0;b<7;b++) + { + logData.m_values.push_back(packedButtons[b]); + } + + appendMinitaurLogData(m_logFileHandle, m_structTypes, logData); + + event.m_numButtonEvents = 0; + event.m_numMoveEvents = 0; + for (int b=0;b m_keyboardEvents; btMultiBodyFixedConstraint* m_gripperRigidbodyFixed; @@ -963,15 +1160,7 @@ struct PhysicsServerCommandProcessorInternalData m_pickedConstraint(0), m_pickingMultiBodyPoint2Point(0) { - for (int i=0;im_stateLoggersUniqueId++; + VRControllerStateLogger* logger = new VRControllerStateLogger(loggerUid,fileName); + m_data->m_stateLoggers.push_back(logger); + serverStatusOut.m_type = CMD_STATE_LOGGING_START_COMPLETED; + serverStatusOut.m_stateLoggingResultArgs.m_loggingUniqueId = loggerUid; + + } } if ((clientCmd.m_updateFlags & STATE_LOGGING_STOP_LOG) && clientCmd.m_stateLoggingArguments.m_loggingUniqueId>=0) { @@ -1969,14 +2169,16 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm serverStatusOut.m_sendVREvents.m_numVRControllerEvents = 0; for (int i=0;im_vrEvents[i].m_numButtonEvents + m_data->m_vrEvents[i].m_numMoveEvents) + b3VRControllerEvent& event = m_data->m_vrEvents1.m_vrEvents[i]; + + if (event.m_numButtonEvents + event.m_numMoveEvents) { - serverStatusOut.m_sendVREvents.m_controllerEvents[serverStatusOut.m_sendVREvents.m_numVRControllerEvents++] = m_data->m_vrEvents[i]; - m_data->m_vrEvents[i].m_numButtonEvents = 0; - m_data->m_vrEvents[i].m_numMoveEvents = 0; + serverStatusOut.m_sendVREvents.m_controllerEvents[serverStatusOut.m_sendVREvents.m_numVRControllerEvents++] = event; + event.m_numButtonEvents = 0; + event.m_numMoveEvents = 0; for (int b=0;bm_vrEvents[i].m_buttons[b] = 0; + event.m_buttons[b] = 0; } } } @@ -5247,41 +5449,13 @@ void PhysicsServerCommandProcessor::enableRealTimeSimulation(bool enableRealTime void PhysicsServerCommandProcessor::stepSimulationRealTime(double dtInSec, const struct b3VRControllerEvent* vrEvents, int numVREvents,const struct b3KeyboardEvent* keyEvents, int numKeyEvents) { - //update m_vrEvents - for (int i=0;im_vrEvents1.addNewVREvents(vrEvents,numVREvents); + for (int i=0;im_stateLoggers.size();i++) { - int controlledId = vrEvents[i].m_controllerId; - if (vrEvents[i].m_numMoveEvents) + if (m_data->m_stateLoggers[i]->m_loggingType==STATE_LOGGING_VR_CONTROLLERS) { - m_data->m_vrEvents[controlledId].m_analogAxis = vrEvents[i].m_analogAxis; - } - - if (vrEvents[i].m_numMoveEvents+vrEvents[i].m_numButtonEvents) - { - m_data->m_vrEvents[controlledId].m_controllerId = vrEvents[i].m_controllerId; - - m_data->m_vrEvents[controlledId].m_pos[0] = vrEvents[i].m_pos[0]; - m_data->m_vrEvents[controlledId].m_pos[1] = vrEvents[i].m_pos[1]; - m_data->m_vrEvents[controlledId].m_pos[2] = vrEvents[i].m_pos[2]; - - m_data->m_vrEvents[controlledId].m_orn[0] = vrEvents[i].m_orn[0]; - m_data->m_vrEvents[controlledId].m_orn[1] = vrEvents[i].m_orn[1]; - m_data->m_vrEvents[controlledId].m_orn[2] = vrEvents[i].m_orn[2]; - m_data->m_vrEvents[controlledId].m_orn[3] = vrEvents[i].m_orn[3]; - } - - m_data->m_vrEvents[controlledId].m_numButtonEvents += vrEvents[i].m_numButtonEvents; - m_data->m_vrEvents[controlledId].m_numMoveEvents += vrEvents[i].m_numMoveEvents; - for (int b=0;bm_vrEvents[controlledId].m_buttons[b] |= vrEvents[i].m_buttons[b]; - if (vrEvents[i].m_buttons[b] & eButtonIsDown) - { - m_data->m_vrEvents[controlledId].m_buttons[b] |= eButtonIsDown; - } else - { - m_data->m_vrEvents[controlledId].m_buttons[b] &= ~eButtonIsDown; - } + VRControllerStateLogger* vrLogger = (VRControllerStateLogger*) m_data->m_stateLoggers[i]; + vrLogger->m_vrEvents.addNewVREvents(vrEvents,numVREvents); } }