本文整理汇总了C++中NewtonBodyGetUserData函数的典型用法代码示例。如果您正苦于以下问题:C++ NewtonBodyGetUserData函数的具体用法?C++ NewtonBodyGetUserData怎么用?C++ NewtonBodyGetUserData使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewtonBodyGetUserData函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: NewtonBodyGetUserData
//-----------------------------------------------------------------------
int cPhysicsMaterialNewton::BeginContactCallback(const NewtonMaterial* material,
const NewtonBody* apBody1, const NewtonBody* apBody2,
int alThreadIndex)
{
iPhysicsBody* pContactBody1 = (cPhysicsBodyNewton*) NewtonBodyGetUserData(apBody1);
iPhysicsBody* pContactBody2 = (cPhysicsBodyNewton*) NewtonBodyGetUserData(apBody2);
if(pContactBody1->GetCollide()==false) return 0;
if(pContactBody2->GetCollide()==false) return 0;
if(pContactBody1->IsActive()==false) return 0;
if(pContactBody2->IsActive()==false) return 0;
if(pContactBody1->IsRagDoll() && pContactBody2->GetCollideRagDoll()==false) return 0;
if(pContactBody2->IsRagDoll() && pContactBody1->GetCollideRagDoll()==false) return 0;
if(pContactBody1->IsCharacter() && pContactBody2->GetCollideCharacter()==false) return 0;
if(pContactBody2->IsCharacter() && pContactBody1->GetCollideCharacter()==false) return 0;
//Log("----- Begin contact between body '%s' and '%s'.\n",mpContactBody1->GetName().c_str(),
// mpContactBody2->GetName().c_str());
if(pContactBody1->OnBeginCollision(pContactBody2) == false) return 0;
if(pContactBody2->OnBeginCollision(pContactBody1) == false) return 0;
return 1;
}
示例2: GenericContactProcessCompatible
void GenericContactProcessCompatible(const void* const newtonContactJoint, float64 timestep, int threadIndex)
{
con_assert(newtonContactJoint != nullptr, "zero pointer")
NewtonBody* body0 = NewtonJointGetBody0(static_cast<const NewtonJoint*>(newtonContactJoint));
NewtonBody* body1 = NewtonJointGetBody1(static_cast<const NewtonJoint*>(newtonContactJoint));
con_assert(body0 != nullptr && body1 != nullptr, "zero pointers")
if (body0 != nullptr && body1 != nullptr)
{
iPhysicsBody* physicsBody0 = static_cast<iPhysicsBody*>(NewtonBodyGetUserData(static_cast<const NewtonBody*>(body0)));
iPhysicsBody* physicsBody1 = static_cast<iPhysicsBody*>(NewtonBodyGetUserData(static_cast<const NewtonBody*>(body1)));
con_assert(physicsBody0 != nullptr && physicsBody1 != nullptr, "zero pointers");
void* contact = NewtonContactJointGetFirstContact(static_cast<const NewtonJoint*>(newtonContactJoint));
NewtonMaterial* materialCombo = NewtonContactGetMaterial(contact);
iPhysicsMaterialCombo* physicsMaterialCombo = static_cast<iPhysicsMaterialCombo*>(NewtonMaterialGetMaterialPairUserData(materialCombo));
if (physicsMaterialCombo != nullptr && physicsBody0 != nullptr && physicsBody1 != nullptr)
{
physicsMaterialCombo->contact(physicsBody0, physicsBody1);
}
}
}
示例3: dAssert
int dNewton::OnBodiesAABBOverlap (const NewtonMaterial* const material, const NewtonBody* const body0, const NewtonBody* const body1, int threadIndex)
{
dAssert (NewtonBodyGetWorld (body0) == NewtonBodyGetWorld (body1));
dNewton* const world = (dNewton*) NewtonWorldGetUserData(NewtonBodyGetWorld (body0));
dNewtonBody* const dBody0 = (dNewtonBody*) NewtonBodyGetUserData (body0);
dNewtonBody* const dBody1 = (dNewtonBody*) NewtonBodyGetUserData (body1);
return world->OnBodiesAABBOverlap(dBody0, dBody1, threadIndex);
}
示例4: collisionCallback_onAABBOverlap
int _CDECL MaterialPair::collisionCallback_onAABBOverlap( const NewtonMaterial* material, const NewtonBody* newtonBody0, const NewtonBody* newtonBody1, int threadIndex )
{
MaterialPair* me;
me = (MaterialPair*)NewtonMaterialGetMaterialPairUserData( material );
Body* body0 = (OgreNewt::Body*)NewtonBodyGetUserData( newtonBody0 );
Body* body1 = (OgreNewt::Body*)NewtonBodyGetUserData( newtonBody1 );
return me->m_contactcallback->onAABBOverlap( body0, body1, threadIndex );
}
示例5:
int PhysWorld3D::OnAABBOverlap(const NewtonMaterial* const material, const NewtonBody* const body0, const NewtonBody* const body1, int threadIndex)
{
RigidBody3D* bodyA = static_cast<RigidBody3D*>(NewtonBodyGetUserData(body0));
RigidBody3D* bodyB = static_cast<RigidBody3D*>(NewtonBodyGetUserData(body1));
assert(bodyA && bodyB);
Callback* callbackData = static_cast<Callback*>(NewtonMaterialGetMaterialPairUserData(material));
assert(callbackData);
assert(callbackData->aabbOverlapCallback);
return callbackData->aabbOverlapCallback(*bodyA, *bodyB);
}
示例6: contactBegin
int _CDECL ContactCallback::contactBegin( const NewtonMaterial* material, const NewtonBody* body0, const NewtonBody* body1 )
{
ContactCallback* me;
me = (ContactCallback*)NewtonMaterialGetMaterialPairUserData( material );
me->m_material = (NewtonMaterial*)material;
//save the bodies...
me->m_body0 = (OgreNewt::Body*)NewtonBodyGetUserData( body0 );
me->m_body1 = (OgreNewt::Body*)NewtonBodyGetUserData( body1 );
return me->userBegin();
}
示例7: PostUpdate
void PostUpdate(dFloat timestep, int threadIndex)
{
int count = 1;
void* nodes[32];
dMatrix parentMatrix[32];
nodes[0] = NewtonInverseDynamicsGetRoot(m_kinematicSolver);
parentMatrix[0] = dGetIdentityMatrix();
NewtonWorld* const world = GetManager()->GetWorld();
DemoEntityManager* const scene = (DemoEntityManager*)NewtonWorldGetUserData(world);
while (count) {
dMatrix matrix;
count --;
void* const rootNode = nodes[count];
NewtonBody* const body = NewtonInverseDynamicsGetBody(m_kinematicSolver, rootNode);
NewtonBodyGetMatrix (body, &matrix[0][0]);
dMatrix localMatrix (matrix * parentMatrix[count]);
DemoEntity* const ent = (DemoEntity*)NewtonBodyGetUserData(body);
dQuaternion rot(localMatrix);
ent->SetMatrix(*scene, rot, localMatrix.m_posit);
matrix = matrix.Inverse();
for (void* node = NewtonInverseDynamicsGetFirstChildNode(m_kinematicSolver, rootNode); node; node = NewtonInverseDynamicsGetNextChildNode(m_kinematicSolver, node)) {
nodes[count] = node;
parentMatrix[count] = matrix;
count ++;
}
}
}
示例8: __setTransformCallback
void Body::__setTransformCallback(const NewtonBody* body, const dFloat* matrix, int threadIndex)
{
//std::cout << "\ttransform " << threadIndex << " " << body << std::endl;
Body* _body = (Body*)NewtonBodyGetUserData(body);
_body->m_matrix = Mat4f(matrix);
//std::cout << "\ttransform end " << threadIndex << " " << body << std::endl;
}
示例9: EventCallback
virtual void EventCallback (const CustomTriggerController* const me, TriggerEventType event, NewtonBody* const visitor) const
{
// send this message to the entity
DemoEntity* const entity = (DemoEntity*) NewtonBodyGetUserData(visitor);
if (entity) {
// map the event massage
int message = -1;
switch (event)
{
case m_enterTrigger:
message = ENTER_TRIGGER;
break;
case m_exitTrigger:
message = EXIT_TRIGGER;
break;
case m_inTrigger:
message = INSIDE_TRIGGER;
break;
}
// pass the controller pointer as the user data of this massage
entity->MessageHandler(me->GetBody(), message, (void*)me);
}
}
示例10: NewtonBodyGetMassMatrix
void CProjectile::OnHit( const NewtonBody* body, vector3df vImpactVel, f32 fImpactMass )
{
dFloat mass;
dFloat Ixx;
dFloat Iyy;
dFloat Izz;
NewtonBodyGetMassMatrix( body, &mass, &Ixx, &Iyy, &Izz );
if ( mass != 0.0f )
{
CNewtonNode* newtonNode = 0;
newtonNode = ( CNewtonNode * )NewtonBodyGetUserData( body );
if ( newtonNode )
{
OnHitNewtonNode( newtonNode, vImpactVel, fImpactMass );
}
vector3df vImpulse = vImpactVel* fImpactMass* fImpactMass* fImpactMass * 0.00001f; //TEMP: 0.00
NewtonAddBodyImpulse( body, &vImpulse.X, &Pos.X );
}
else
{
OnHitLevel( vImpactVel, fImpactMass );
}
}
示例11: OnReconstructMainMeshCallBack
static void OnReconstructMainMeshCallBack (NewtonBody* const body, NewtonFracturedCompoundMeshPart* const mainMesh, const NewtonCollision* const fracturedCompoundCollision)
{
DemoEntity* const entity = (DemoEntity*)NewtonBodyGetUserData(body);
DemoMesh* const visualMesh = (DemoMesh*)entity->GetMesh();
dAssert (visualMesh->IsType(DemoMesh::GetRttiType()));
dAssert (NewtonCollisionGetType(fracturedCompoundCollision) == SERIALIZE_ID_FRACTURED_COMPOUND);
DemoEntityManager* const scene = (DemoEntityManager*)NewtonWorldGetUserData(NewtonBodyGetWorld(body));
dAssert (scene);
visualMesh->RemoveAll();
for (void* segment = NewtonFracturedCompoundMeshPartGetFirstSegment(mainMesh); segment; segment = NewtonFracturedCompoundMeshPartGetNextSegment (segment)) {
DemoSubMesh* const subMesh = visualMesh->AddSubMesh();
int material = NewtonFracturedCompoundMeshPartGetMaterial (segment);
int indexCount = NewtonFracturedCompoundMeshPartGetIndexCount (segment);
subMesh->m_textureHandle = AddTextureRef ((GLuint)material);
subMesh->m_shader = scene->GetShaderCache().m_diffuseEffect;
subMesh->AllocIndexData (indexCount);
subMesh->m_indexCount = NewtonFracturedCompoundMeshPartGetIndexStream (fracturedCompoundCollision, mainMesh, segment, (int*)subMesh->m_indexes);
}
visualMesh->OptimizeForRender();
}
示例12: newtonRaycastPreFilter
unsigned _CDECL Raycast::newtonRaycastPreFilter(const NewtonBody *body, const NewtonCollision *collision, void* userData)
{
// get our object!
Raycast* me = (Raycast*)userData;
Body* bod = (Body*)NewtonBodyGetUserData( body );
const World* world = bod->getWorld();
me->m_treecollisioncallback_bodyalreadyadded = false;
me->m_treecollisioncallback_lastbody = bod;
if (me->userPreFilterCallback( bod ))
return 1;
else
{
if( world->getDebugger().isRaycastRecording() && world->getDebugger().isRaycastRecordingHitBodies() )
{
world->getDebugger().addDiscardedBody(bod);
}
return 0;
}
}
示例13: newtonRaycastFilter
float _CDECL Raycast::newtonRaycastFilter(const NewtonBody* body, const float* hitNormal, int collisionID, void* userData, float intersectParam)
{
// get our object!
Raycast* me = (Raycast*)userData;
Body* bod = (Body*)NewtonBodyGetUserData( body );
const World* world = bod->getWorld();
Ogre::Vector3 normal = Ogre::Vector3( hitNormal[0], hitNormal[1], hitNormal[2] );
if( me->m_treecollisioncallback_bodyalreadyadded )
return intersectParam;
if( world->getDebugger().isRaycastRecording() && world->getDebugger().isRaycastRecordingHitBodies() )
{
world->getDebugger().addHitBody(bod);
}
if (me->userCallback( bod, intersectParam, normal, collisionID ))
return intersectParam;
else
return 1.1;
}
示例14: NewtonBodyGetUserData
void dNewtonTriggerManager::EventCallback (const dCustomTriggerController* const trigger, dTriggerEventType event, NewtonBody* const guess) const
{
dNewtonTrigger* const callback = (dNewtonTrigger*) trigger->GetUserData();
dNewtonBody* const guessBody = (dNewtonBody*) NewtonBodyGetUserData(guess);
switch (event)
{
case m_enterTrigger:
{
callback->OnEnter(guessBody);
break;
}
case m_exitTrigger:
{
callback->OnExit(guessBody);
break;
}
case m_inTrigger:
{
callback->OnInside(guessBody);
break;
}
}
}
示例15: MagneticField
static void MagneticField (const NewtonJoint* contactJoint, dFloat timestep, int threadIndex)
{
dFloat magnetStregnth;
const NewtonBody* body0;
const NewtonBody* body1;
const NewtonBody* magneticField;
const NewtonBody* magneticPiece;
body0 = NewtonJointGetBody0 (contactJoint);
body1 = NewtonJointGetBody1 (contactJoint);
// get the magnetic field body
magneticPiece = body0;
magneticField = body1;
if (NewtonCollisionIsTriggerVolume (NewtonBodyGetCollision(body0))) {
magneticPiece = body1;
magneticField = body0;
}
_ASSERTE (NewtonCollisionIsTriggerVolume (NewtonBodyGetCollision(magneticField)));
// calculate the magnetic force field
dMatrix center;
dMatrix location;
NewtonBodyGetMatrix (magneticField, ¢er[0][0]);
NewtonBodyGetMatrix (magneticPiece, &location[0][0]);
Magnet* magnet;
magnet = (Magnet*)NewtonBodyGetUserData(magneticField);
magnetStregnth = magnet->m_magnetStregnth;
// calculate the magnetic force;
dFloat den;
dVector force (center.m_posit - location.m_posit);
den = force % force;
den = magnetStregnth / (den * dSqrt (den) + 0.1f);
force = force.Scale (den);
// because we are modifiing one of the bodies membber in the call back, there uis a chace that
// another materail can be operations on the same object at the same time of aother thread
// therfore we need to make the assigmnet in a critical section.
NewtonWorldCriticalSectionLock (NewtonBodyGetWorld (magneticPiece));
// add the magner force
NewtonBodyAddForce (magneticPiece, &force[0]);
force = force.Scale (-1.0f);
NewtonBodyAddForce (magnet->m_magneticCore, &force[0]);
// also if the body is sleeping fore it to wake up for this frame
NewtonBodySetFreezeState (magneticPiece, 0);
NewtonBodySetFreezeState (magnet->m_magneticCore, 0);
// unlock the critical section
NewtonWorldCriticalSectionUnlock (NewtonBodyGetWorld (magneticPiece));
}