本文整理汇总了C++中Physics::addSystemThreadListener方法的典型用法代码示例。如果您正苦于以下问题:C++ Physics::addSystemThreadListener方法的具体用法?C++ Physics::addSystemThreadListener怎么用?C++ Physics::addSystemThreadListener使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Physics
的用法示例。
在下文中一共展示了Physics::addSystemThreadListener方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: initialize
bool CursorSpringConnector::initialize() {
OopsObjectID cursorRigidBodyID;
OopsObjectID cursorJointID;
SimplePhysicsEntity* simpleEntity;
ArticulatedPhysicsEntity* articulatedEntity;
TransformationData cursorTrans, rigidBodyTrans;
simpleEntity = dynamic_cast<SimplePhysicsEntity*>(entity);
articulatedEntity = dynamic_cast<ArticulatedPhysicsEntity*>(entity);
if (simpleEntity)
rigidBody = simpleEntity->rigidBody;
else if (articulatedEntity)
rigidBody = articulatedEntity->articulatedBody->getMainBody();
else
{
printd(ERROR, "CursorSpringConnector::initialize(): unsupported PhysicsEntity-ClassType found!\n");
return false;
} // else
rigidBodyId = rigidBody->getID();
// Access to cursorTransformation does not have to be locked yet until we
// did not register as SystemThreadListener
// cursorToBodyOffset = cursorTrans^(-1) * rigidBodyTrans
cursorTrans = cursorTransformation;
rigidBodyTrans = rigidBody->getTransformation();
invert(cursorTrans);
multiply(cursorToBodyOffset, cursorTrans, rigidBodyTrans);
// rigidBodyTrans * bodyToCursorOffset = cursorTrans
// bodyToCursorOffset = rigidBodyTrans^(-1) * cursorTrans
cursorTrans = cursorTransformation;
invert(rigidBodyTrans);
multiply(bodyToCursorOffset, rigidBodyTrans, cursorTrans);
oldCursorTransformation.position = cursorTrans.position;
oldCursorTransformation.orientation = cursorTrans.orientation;
Physics* physicsModule = ((Physics*)SystemCore::getModuleByName("Physics"));
physicsModule->addSimulationStepListener(this);
physicsModule->addSystemThreadListener(this);
if (connectionMode == JOINT_MODE)
{
cursorBody = new oops::RigidBody(NULL);
cursorBody->setGravityMode(false);
cursorBody->setMass(std::numeric_limits<float>::max());
cursorBody->setTransformation(cursorTrans);
cursorRigidBodyID = OopsObjectID(false, CURSORSPRINGCONNECTOR_CLASSID, 0, user->getId());
cursorBody->setID(cursorRigidBodyID.get());
cursorJointID = OopsObjectID(true, CURSORSPRINGCONNECTOR_CLASSID, 0, user->getId());
connectionJoint = new oops::SpringDamperJoint(cursorJointID.get(), cursorBody, rigidBody);
connectionJoint->setLinearConstants(linearSpringConstant, linearDampingConstant);
connectionJoint->setAngularConstants(angularSpringConstant, angularDampingConstant);
} // if
return true;
}