Exemple #1
0
RigidBody* PhysicEngine::createAndAdjustRigidBody(std::string mesh,std::string name,float scale, Ogre::Vector3 position, Ogre::Quaternion rotation,
        Ogre::Vector3* scaledBoxTranslation, Ogre::Quaternion* boxRotation)
{
    std::string sid = (boost::format("%07.3f") % scale).str();
    std::string outputstring = mesh + sid;

    //get the shape from the .nif
    mShapeLoader->load(outputstring,"General");
    BulletShapeManager::getSingletonPtr()->load(outputstring,"General");
    BulletShapePtr shape = BulletShapeManager::getSingleton().getByName(outputstring,"General");
    shape->Shape->setLocalScaling( btVector3(scale,scale,scale));


    //create the motionState
    CMotionState* newMotionState = new CMotionState(this,name);

    //create the real body
    btRigidBody::btRigidBodyConstructionInfo CI = btRigidBody::btRigidBodyConstructionInfo(0,newMotionState,shape->Shape);
    RigidBody* body = new RigidBody(CI,name);
    body->mCollide = shape->mCollide;
    body->mIgnore = shape->mIgnore;

    if(scaledBoxTranslation != 0)
        *scaledBoxTranslation = shape->boxTranslation * scale;
    if(boxRotation != 0)
        *boxRotation = shape->boxRotation;

    adjustRigidBody(body, position, rotation, shape->boxTranslation * scale, shape->boxRotation);

    return body;

}
Exemple #2
0
void PhysicEngine::boxAdjustExternal(std::string mesh, RigidBody* body, float scale, Ogre::Vector3 position, Ogre::Quaternion rotation) {
    std::string sid = (boost::format("%07.3f") % scale).str();
    std::string outputstring = mesh + sid;
    //std::cout << "The string" << outputstring << "\n";

    //get the shape from the .nif
    mShapeLoader->load(outputstring,"General");
    BulletShapeManager::getSingletonPtr()->load(outputstring,"General");
    BulletShapePtr shape = BulletShapeManager::getSingleton().getByName(outputstring,"General");

    adjustRigidBody(body, position, rotation, shape->boxTranslation * scale, shape->boxRotation);
}
Exemple #3
0
    RigidBody* PhysicEngine::createAndAdjustRigidBody(const std::string &mesh, const std::string &name,
        float scale, const Ogre::Vector3 &position, const Ogre::Quaternion &rotation,
        Ogre::Vector3* scaledBoxTranslation, Ogre::Quaternion* boxRotation, bool raycasting, bool placeable)
    {
        std::string sid = (boost::format("%07.3f") % scale).str();
        std::string outputstring = mesh + sid;

        //get the shape from the .nif
        mShapeLoader->load(outputstring,"General");
        BulletShapeManager::getSingletonPtr()->load(outputstring,"General");
        BulletShapePtr shape = BulletShapeManager::getSingleton().getByName(outputstring,"General");

        if (placeable && !raycasting && shape->mCollisionShape && !shape->mHasCollisionNode)
            return NULL;

        if (!shape->mCollisionShape && !raycasting)
            return NULL;
        if (!shape->mRaycastingShape && raycasting)
            return NULL;

        if (!raycasting)
            shape->mCollisionShape->setLocalScaling( btVector3(scale,scale,scale));
        else
            shape->mRaycastingShape->setLocalScaling( btVector3(scale,scale,scale));

        //create the real body
        btRigidBody::btRigidBodyConstructionInfo CI = btRigidBody::btRigidBodyConstructionInfo
                (0,0, raycasting ? shape->mRaycastingShape : shape->mCollisionShape);
        RigidBody* body = new RigidBody(CI,name);
        body->mPlaceable = placeable;

        if(scaledBoxTranslation != 0)
            *scaledBoxTranslation = shape->mBoxTranslation * scale;
        if(boxRotation != 0)
            *boxRotation = shape->mBoxRotation;

        adjustRigidBody(body, position, rotation, shape->mBoxTranslation * scale, shape->mBoxRotation);

        return body;

    }