void ETHDestructionListener::SayGoodbye(b2Joint* joint) { ETHEntity *jointOwner = static_cast<ETHEntity*>(joint->GetUserData()); // Set joint pointer to NULL for safety jointOwner->AddRef(); ETHPhysicsEntityControllerPtr ownerController = boost::dynamic_pointer_cast<ETHPhysicsEntityController>(jointOwner->GetController()); assert(ownerController); ownerController->KillJoint(joint); jointOwner->Release(); }
void ETHScriptWrapper::ResolveEntityJoints(ETHEntity* pEntity) { ETHPhysicsEntityControllerPtr controller = boost::dynamic_pointer_cast<ETHPhysicsEntityController>(pEntity->GetController()); if (controller) { ETHBucketManager& bucketManager = m_pScene->GetBucketManager(); const Vector2& currentBucket = pEntity->GetCurrentBucket(bucketManager); ETHEntityArray entitiesAround; bucketManager.GetEntitiesAroundBucket(currentBucket, entitiesAround); controller->ResolveJoints(entitiesAround, *pEntity->GetProperties(), m_pScene->GetSimulator()); } }
void ETHPhysicsSimulator::ResolveJoints(ETHEntityArray& entities) { const unsigned int numEntities = entities.size(); for (unsigned int t = 0; t < numEntities; t++) { ETHPhysicsEntityControllerPtr controller = boost::dynamic_pointer_cast<ETHPhysicsEntityController>(entities[t]->GetController()); if (controller) { controller->ResolveJoints(entities, *entities[t]->GetProperties(), *this); } } }