Apply patch to apply force at softbody nodes, thanks to Robert Lee, see

https://github.com/bulletphysics/bullet3/issues/2699#issuecomment-610734583
This commit is contained in:
Erwin Coumans
2020-06-04 00:09:11 -07:00
parent c09007e005
commit e82a4ecc6d
@@ -11005,6 +11005,26 @@ bool PhysicsServerCommandProcessor::processApplyExternalForceCommand(const struc
rb->applyTorque(torqueWorld);
}
}
if (body && body->m_softBody)
{
btSoftBody* sb = body->m_softBody;
int link = clientCmd.m_externalForceArguments.m_linkIds[i];
if ((clientCmd.m_externalForceArguments.m_forceFlags[i] & EF_FORCE) != 0)
{
btVector3 forceLocal(clientCmd.m_externalForceArguments.m_forcesAndTorques[i * 3 + 0],
clientCmd.m_externalForceArguments.m_forcesAndTorques[i * 3 + 1],
clientCmd.m_externalForceArguments.m_forcesAndTorques[i * 3 + 2]);
btVector3 positionLocal(
clientCmd.m_externalForceArguments.m_positions[i * 3 + 0],
clientCmd.m_externalForceArguments.m_positions[i * 3 + 1],
clientCmd.m_externalForceArguments.m_positions[i * 3 + 2]);
btVector3 forceWorld = isLinkFrame ? forceLocal : sb->getWorldTransform().getBasis() * forceLocal;
btVector3 relPosWorld = isLinkFrame ? positionLocal : sb->getWorldTransform().getBasis() * positionLocal;
sb->addForce(forceWorld, link);
}
}
}
SharedMemoryStatus& serverCmd = serverStatusOut;