change deformable teleport to absolute pose

This commit is contained in:
Xuchen Han
2020-03-12 14:18:16 -07:00
parent 6e97302610
commit 4b35af3830
5 changed files with 134 additions and 60 deletions

View File

@@ -9137,33 +9137,33 @@ bool PhysicsServerCommandProcessor::processChangeDynamicsInfoCommand(const struc
}
}
#ifndef SKIP_SOFT_BODY_MULTI_BODY_DYNAMICS_WORLD
if (body && body->m_softBody)
{
btSoftBody* psb = body->m_softBody;
if (psb)
{
if (clientCmd.m_updateFlags & CHANGE_DYNAMICS_INFO_SET_ACTIVATION_STATE)
{
if (clientCmd.m_changeDynamicsInfoArgs.m_activationState & eActivationStateEnableSleeping)
{
psb->forceActivationState(ACTIVE_TAG);
}
if (clientCmd.m_changeDynamicsInfoArgs.m_activationState & eActivationStateDisableSleeping)
{
psb->forceActivationState(DISABLE_DEACTIVATION);
}
if (clientCmd.m_changeDynamicsInfoArgs.m_activationState & eActivationStateWakeUp)
{
psb->forceActivationState(ACTIVE_TAG);
psb->setDeactivationTime(0.0);
}
if (clientCmd.m_changeDynamicsInfoArgs.m_activationState & eActivationStateSleep)
{
psb->forceActivationState(ISLAND_SLEEPING);
}
}
}
}
if (body && body->m_softBody)
{
btSoftBody* psb = body->m_softBody;
if (psb)
{
if (clientCmd.m_updateFlags & CHANGE_DYNAMICS_INFO_SET_ACTIVATION_STATE)
{
if (clientCmd.m_changeDynamicsInfoArgs.m_activationState & eActivationStateEnableSleeping)
{
psb->forceActivationState(ACTIVE_TAG);
}
if (clientCmd.m_changeDynamicsInfoArgs.m_activationState & eActivationStateDisableSleeping)
{
psb->forceActivationState(DISABLE_DEACTIVATION);
}
if (clientCmd.m_changeDynamicsInfoArgs.m_activationState & eActivationStateWakeUp)
{
psb->forceActivationState(ACTIVE_TAG);
psb->setDeactivationTime(0.0);
}
if (clientCmd.m_changeDynamicsInfoArgs.m_activationState & eActivationStateSleep)
{
psb->forceActivationState(ISLAND_SLEEPING);
}
}
}
}
#endif
SharedMemoryStatus& serverCmd = serverStatusOut;
@@ -9844,31 +9844,31 @@ bool PhysicsServerCommandProcessor::processInitPoseCommand(const struct SharedMe
}
}
#ifndef SKIP_SOFT_BODY_MULTI_BODY_DYNAMICS_WORLD
if (body && body->m_softBody)
{
if (clientCmd.m_updateFlags & INIT_POSE_HAS_BASE_LINEAR_VELOCITY)
{
body->m_softBody->setLinearVelocity(baseLinVel);
}
if (clientCmd.m_updateFlags & INIT_POSE_HAS_BASE_ANGULAR_VELOCITY)
{
body->m_softBody->setAngularVelocity(baseAngVel);
}
if (clientCmd.m_updateFlags & INIT_POSE_HAS_INITIAL_POSITION)
{
btTransform tr;
tr.setIdentity();
tr.setOrigin(basePos);
body->m_softBody->transform(tr);
}
if (clientCmd.m_updateFlags & INIT_POSE_HAS_INITIAL_ORIENTATION)
{
btTransform tr;
tr.setIdentity();
tr.setRotation(baseOrn);
body->m_softBody->transform(tr);
}
}
if (body && body->m_softBody)
{
if (clientCmd.m_updateFlags & INIT_POSE_HAS_BASE_LINEAR_VELOCITY)
{
body->m_softBody->setLinearVelocity(baseLinVel);
}
if (clientCmd.m_updateFlags & INIT_POSE_HAS_BASE_ANGULAR_VELOCITY)
{
body->m_softBody->setAngularVelocity(baseAngVel);
}
if (clientCmd.m_updateFlags & INIT_POSE_HAS_INITIAL_POSITION || clientCmd.m_updateFlags & INIT_POSE_HAS_INITIAL_ORIENTATION)
{
btTransform tr;
tr.setIdentity();
if (clientCmd.m_updateFlags & INIT_POSE_HAS_INITIAL_POSITION)
{
tr.setOrigin(basePos);
}
if (clientCmd.m_updateFlags & INIT_POSE_HAS_INITIAL_ORIENTATION)
{
tr.setRotation(baseOrn);
}
body->m_softBody->transformTo(tr);
}
}
#endif
syncPhysicsToGraphics2();