summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorerwincoumans <erwin.coumans@gmail.com>2019-03-17 16:13:48 -0700
committerGitHub <noreply@github.com>2019-03-17 16:13:48 -0700
commit2e81714e7ad5581e9bcc298c5346b299e7dd6a37 (patch)
tree33cc9a742d87990d08ed1bb609184c86a41b1a66
parent17d2b318bff5d528ede93e1b2f95bfbbe47e43ac (diff)
parent8fcb8d0694ef647d30aa8dbbf9a90f7da8ef8b8d (diff)
downloadbullet3-2e81714e7ad5581e9bcc298c5346b299e7dd6a37.tar.gz
Merge pull request #2161 from crewmatt/master
Adds a timestamp as a physics parameter.
-rw-r--r--examples/SharedMemory/PhysicsClientC_API.cpp2
-rw-r--r--examples/SharedMemory/PhysicsServerCommandProcessor.cpp11
-rw-r--r--examples/SharedMemory/SharedMemoryPublic.h1
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;