// -------------------------------------------------------------------------
void Object::setPosition(const btVector3 &pos)
{
- mRootNode->setPosition(pos[0], pos[1], pos[2]);
+ mRootNode->setPosition(pos[0], pos[1], pos[2]);
}
// -------------------------------------------------------------------------
void Object::setOrientation(const btQuaternion &quat)
{
- mRootNode->setOrientation(quat.getW(),quat.getX(), quat.getY(), quat.getZ());
+ mRootNode->setOrientation(quat.getW(),quat.getX(), quat.getY(), quat.getZ());
}
// -------------------------------------------------------------------------
void Object::setTransform(const btTransform& worldTrans)
{
+ //this sets the node's transformation based on the Bullet collider's world transformation
mRootNode->setPosition(worldTrans.getOrigin()[0], worldTrans.getOrigin()[1],worldTrans.getOrigin()[2]);
mRootNode->setOrientation(worldTrans.getRotation().getW(),worldTrans.getRotation().getX(), worldTrans.getRotation().getY(), worldTrans.getRotation().getZ());
}
mObject->setCollisionShape(shape->getBulletShape());
showDebugShape(mWorld->getShowDebugShapes());
- _notifyMoved();
+ _notifyMoved();
}
// -------------------------------------------------------------------------
//-----------------------------------------------------------------------
{
Vector3 pos = mRootNode->getPosition();
Quaternion quat = mRootNode->getOrientation();
- mObject->getWorldTransform().setOrigin(btVector3(pos.x, pos.y, pos.z));
- mObject->getWorldTransform().setRotation(btQuaternion(quat.x, quat.y, quat.z, quat.w));
+ btTransform transform;
+ transform.setOrigin(btVector3(pos.x, pos.y, pos.z));
+ transform.setRotation(btQuaternion(quat.x, quat.y, quat.z, quat.w));
+ mObject->setWorldTransform(transform);
}
//-----------------------------------------------------------------------
// -------------------------------------------------------------------------
RigidBody::~RigidBody()
{
- }
+ if (can_move == true)
+ mShapeNode->detachObject(this);
+ }
// -------------------------------------------------------------------------
void RigidBody::setShape(Ogre::SceneNode *node,
OgreBulletCollisions::CollisionShape *shape,
mState = new ObjectState(this);
+ can_move = true;
mRootNode = node;
- mShapeNode = mRootNode->createChildSceneNode(mName + "Node");
+ mShapeNode = mRootNode->createChildSceneNode(mName + "Node");
mShape = shape;
showDebugShape(mWorld->getShowDebugShapes());
body->setFriction(bodyFriction);
mObject = body;
- _notifyMoved();
+ _notifyMoved();
- addToWorld();
+ addToWorld();
}
// -------------------------------------------------------------------------
mRootNode = node;
- can_move = movable;
+ can_move = movable;
- if (can_move == true)
- mShapeNode = mRootNode->createChildSceneNode(mName + "Node");
+ if (can_move == true)
+ mShapeNode = mRootNode->createChildSceneNode(mName + "Node");
- mShape = shape;
+ mShape = shape;
showDebugShape(mWorld->getShowDebugShapes());
btRigidBody *body = new btRigidBody(0.0, mState, mShape->getBulletShape ());
body->setFriction(bodyFriction);
mObject = body;
- _notifyMoved();
+ _notifyMoved();
- addToWorld();
+ addToWorld();
}
// -------------------------------------------------------------------------
/*void RigidBody::setStaticShape(btScaledBvhTriangleMeshShape *shape,
object = new Object();
object->SetValues(this, sbs->object, "Camera", "Camera", true);
- MainCamera = camera;
- MainCamera->setNearClipDistance(0.1f);
- MainCamera->setFarClipDistance(0.0f);
- CameraNode = sbs->mSceneManager->getRootSceneNode()->createChildSceneNode("Camera");
- CameraNode->attachObject(MainCamera);
-
//init variables
CurrentFloor = 0;
StartFloor = 0;
RotationStopped = false;
MovementStopped = false;
+ //set up camera and scene nodes
+ MainCamera = camera;
+ MainCamera->setNearClipDistance(0.1f);
+ MainCamera->setFarClipDistance(0.0f);
+ MainCamera->setPosition(Ogre::Vector3(0, sbs->ToRemote((cfg_body_height + cfg_legs_height) / 2), 0));
+ CameraNode = sbs->mSceneManager->getRootSceneNode()->createChildSceneNode("Camera");
+ CameraNode->attachObject(MainCamera);
+
//set up physics parameters
- Ogre::Vector3 bounds = Ogre::Vector3(sbs->ToRemote(1.64 / 2), sbs->ToRemote(5 / 2), sbs->ToRemote(1.64 / 2));
+ Ogre::Vector3 bounds = Ogre::Vector3(sbs->ToRemote(cfg_body_width / 2), sbs->ToRemote((cfg_body_height + cfg_legs_height) / 2), sbs->ToRemote(cfg_body_depth / 2));
mShape = new OgreBulletCollisions::BoxCollisionShape(bounds);
mBody = new OgreBulletDynamics::RigidBody("Camera", sbs->mWorld);
mBody->setShape(CameraNode, mShape, 0.1, 0.5, 1);
{
//sets the camera to an absolute position in 3D space
CameraNode->setPosition(sbs->ToRemote(vector));
+ mBody->_notifyMoved();
}
void Camera::SetDirection(const Ogre::Vector3 &vector)