diff options
author | erwincoumans <erwin.coumans@gmail.com> | 2019-03-17 16:13:48 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-17 16:13:48 -0700 |
commit | 2e81714e7ad5581e9bcc298c5346b299e7dd6a37 (patch) | |
tree | 33cc9a742d87990d08ed1bb609184c86a41b1a66 | |
parent | 17d2b318bff5d528ede93e1b2f95bfbbe47e43ac (diff) | |
parent | 8fcb8d0694ef647d30aa8dbbf9a90f7da8ef8b8d (diff) | |
download | bullet3-2e81714e7ad5581e9bcc298c5346b299e7dd6a37.tar.gz |
Merge pull request #2161 from crewmatt/master
Adds a timestamp as a physics parameter.
-rw-r--r-- | examples/SharedMemory/PhysicsClientC_API.cpp | 2 | ||||
-rw-r--r-- | examples/SharedMemory/PhysicsServerCommandProcessor.cpp | 11 | ||||
-rw-r--r-- | examples/SharedMemory/SharedMemoryPublic.h | 1 |
3 files changed, 11 insertions, 3 deletions
diff --git a/examples/SharedMemory/PhysicsClientC_API.cpp b/examples/SharedMemory/PhysicsClientC_API.cpp index 8eaac0a6f..945ddc552 100644 --- a/examples/SharedMemory/PhysicsClientC_API.cpp +++ b/examples/SharedMemory/PhysicsClientC_API.cpp @@ -1082,7 +1082,7 @@ B3_SHARED_API int b3GetLinkState(b3PhysicsClientHandle physClient, b3SharedMemor int numLinks = status->m_sendActualStateArgs.m_numLinks; b3Assert(linkIndex < numLinks); - if ((bodyIndex >= 0) && (linkIndex >= 0) && linkIndex < numLinks) + if (status->m_sendActualStateArgs.m_stateDetails != NULL && (bodyIndex >= 0) && (linkIndex >= 0) && linkIndex < numLinks) { b3Transform wlf, com, inertial; diff --git a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp index e04686e81..0778d57df 100644 --- a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp +++ b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp @@ -1613,6 +1613,7 @@ struct PhysicsServerCommandProcessorInternalData btScalar m_physicsDeltaTime; btScalar m_numSimulationSubSteps; + btScalar m_simulationTimestamp; btAlignedObjectArray<btMultiBodyJointFeedback*> m_multiBodyJointFeedbacks; b3HashMap<btHashPtr, btInverseDynamics::MultiBodyTree*> m_inverseDynamicsBodies; b3HashMap<btHashPtr, IKTrajectoryHelper*> m_inverseKinematicsHelpers; @@ -7608,10 +7609,12 @@ bool PhysicsServerCommandProcessor::processForwardDynamicsCommand(const struct S if (m_data->m_numSimulationSubSteps > 0) { numSteps = m_data->m_dynamicsWorld->stepSimulation(deltaTimeScaled, m_data->m_numSimulationSubSteps, m_data->m_physicsDeltaTime / m_data->m_numSimulationSubSteps); + m_data->m_simulationTimestamp += deltaTimeScaled; } else { numSteps = m_data->m_dynamicsWorld->stepSimulation(deltaTimeScaled, 0); + m_data->m_simulationTimestamp += deltaTimeScaled; } if (numSteps > 0) @@ -8161,6 +8164,7 @@ bool PhysicsServerCommandProcessor::processRequestPhysicsSimulationParametersCom serverCmd.m_simulationParameterResultArgs.m_allowedCcdPenetration = m_data->m_dynamicsWorld->getDispatchInfo().m_allowedCcdPenetration; serverCmd.m_simulationParameterResultArgs.m_collisionFilterMode = m_data->m_broadphaseCollisionFilterCallback->m_filterMode; serverCmd.m_simulationParameterResultArgs.m_deltaTime = m_data->m_physicsDeltaTime; + serverCmd.m_simulationParameterResultArgs.m_simulationTimestamp = m_data->m_simulationTimestamp; serverCmd.m_simulationParameterResultArgs.m_contactBreakingThreshold = gContactBreakingThreshold; serverCmd.m_simulationParameterResultArgs.m_contactSlop = m_data->m_dynamicsWorld->getSolverInfo().m_linearSlop; serverCmd.m_simulationParameterResultArgs.m_enableSAT = m_data->m_dynamicsWorld->getDispatchInfo().m_enableSatConvex; @@ -11718,7 +11722,9 @@ void PhysicsServerCommandProcessor::stepSimulationRealTime(double dtInSec, const gSubStep = m_data->m_physicsDeltaTime; } - int numSteps = m_data->m_dynamicsWorld->stepSimulation(dtInSec * simTimeScalingFactor, maxSteps, gSubStep); + btScalar deltaTimeScaled = dtInSec * simTimeScalingFactor; + int numSteps = m_data->m_dynamicsWorld->stepSimulation(deltaTimeScaled, maxSteps, gSubStep); + m_data->m_simulationTimestamp += deltaTimeScaled; gDroppedSimulationSteps += numSteps > maxSteps ? numSteps - maxSteps : 0; if (numSteps) @@ -11797,7 +11803,8 @@ void PhysicsServerCommandProcessor::resetSimulation() { //clean up all data - m_data->m_cachedVUrdfisualShapes.clear(); + m_data->m_simulationTimestamp = 0; + m_data->m_cachedVUrdfisualShapes.clear(); #ifndef SKIP_SOFT_BODY_MULTI_BODY_DYNAMICS_WORLD if (m_data && m_data->m_dynamicsWorld) diff --git a/examples/SharedMemory/SharedMemoryPublic.h b/examples/SharedMemory/SharedMemoryPublic.h index 53d29c732..28e62700f 100644 --- a/examples/SharedMemory/SharedMemoryPublic.h +++ b/examples/SharedMemory/SharedMemoryPublic.h @@ -900,6 +900,7 @@ struct b3PluginArguments struct b3PhysicsSimulationParameters { double m_deltaTime; + double m_simulationTimestamp; // Output only timestamp of simulation. double m_gravityAcceleration[3]; int m_numSimulationSubSteps; int m_numSolverIterations; |