if (mRootNode)
{
showDebugShape(false);
- //mShapeNode->detachObject (this);
- //mRootNode->removeAndDestroyChild (mShapeNode->getName ());
+ mShapeNode->detachObject (this);
+ mRootNode->removeAndDestroyChild (mShapeNode->getName ());
//mRootNode->getParentSceneNode ()->removeAndDestroyChild (mRootNode->getName ());
}
mShape = shape;
mRootNode = mWorld->getSceneManager()->getRootSceneNode()->createChildSceneNode(mName);
- //mShapeNode = mRootNode->createChildSceneNode(mName + "Shape");
- //mShapeNode->attachObject(this);
+ mShapeNode = mRootNode->createChildSceneNode(mName + "Shape");
+ mShapeNode->attachObject(this);
mObject->setCollisionShape(shape->getBulletShape());
showDebugShape(mWorld->getShowDebugShapes());
mState = new ObjectState(this);
mRootNode = node;
- //mShapeNode = mRootNode->createChildSceneNode(mName + "Node");
- //mShapeNode->attachObject(this);
+ mShapeNode = mRootNode->createChildSceneNode(mName + "Node");
+ mShapeNode->attachObject(this);
mShape = shape;
showDebugShape(mWorld->getShowDebugShapes());
mRootNode = node;
- //mShapeNode = mRootNode->createChildSceneNode(mName + "Node");
- //mShapeNode->attachObject(this);
+ mShapeNode = mRootNode->createChildSceneNode(mName + "Node");
+ mShapeNode->attachObject(this);
mShape = shape;
showDebugShape(mWorld->getShowDebugShapes());
mShape = new OgreBulletCollisions::BoxCollisionShape(bounds);
mBody = new OgreBulletDynamics::RigidBody("Camera", sbs->mWorld);
mBody->setShape(CameraNode, mShape, 0.1, 0.5, 1);
- mBody->setSleepingThresholds(0, 0);
- mBody->setAngularFactor(0, 0, 0);
- //mBody->setStaticShape(mShape, 0.1, 0.5);
+ mBody->setSleepingThresholds(0, 0); //prevent object from deactivating
+ mBody->setAngularFactor(0, 0, 0); //prevent other objects from affecting this object's rotation
EnableCollisions(sbs->GetConfigBool("Skyscraper.SBS.Camera.EnableCollisions", true));
}
bool Camera::Move(Ogre::Vector3 vector, float speed)
{
//moves the camera in a relative amount specified by a vector
- //SetPosition(Ogre::Vector3(GetPosition().x + (vector.x * speed), GetPosition().y + (vector.y * speed), GetPosition().z + (vector.z * speed)));
//CameraNode->translate(sbs->ToRemote(vector * speed), Ogre::Node::TS_LOCAL);
//multiply vector with object's orientation, and flip X axis
vector = mBody->getWorldOrientation() * vector * Ogre::Vector3(-1, 1, 1);
- //vector.x *= CameraNode->getLocalAxes()[2][0];
- //vector.y *= CameraNode->getLocalAxes()[2][1];
- //vector.z *= CameraNode->getLocalAxes()[2][2];
if (vector != Ogre::Vector3::ZERO)
- {
mBody->setLinearVelocity(sbs->ToRemote(vector));
- /*if (vector.y == 0)
- mBody->setLinearVelocity((mBody->getLinearVelocity() * Ogre::Vector3(0, 1, 0)) + sbs->ToRemote(vector));
- else
- mBody->setLinearVelocity((mBody->getLinearVelocity() * Ogre::Vector3(1, 0, 1)) + sbs->ToRemote(vector));
- */
- }
+
return true;
}
void Camera::RotateLocal(const Ogre::Vector3 &vector, float speed)
{
//rotates the camera in a relative amount in local camera space
+
mBody->setAngularVelocity(Ogre::Vector3(0, -vector.y, 0));
CameraNode->pitch(Ogre::Degree(vector.x * speed), Ogre::Node::TS_LOCAL);
//CameraNode->yaw(Ogre::Degree(-vector.y * speed), Ogre::Node::TS_WORLD);
running_time = (GetRunTime() / 1000.0) - start_time;
//update physics
- mWorld->stepSimulation(GetElapsedTime());
+ float step = float(GetElapsedTime()) / 1000.0;
+ mWorld->stepSimulation(step, 1);
//limit the elapsed value to prevent major slowdowns during debugging
if (elapsed > 0.5)
soundsys->set3DSettings(1.0, 3.28, 1.0);
//set up physics
- mWorld = new OgreBulletDynamics::DynamicsWorld(mSceneManager, Ogre::AxisAlignedBox(Ogre::Vector3(-10000, -10000, -10000), Ogre::Vector3(10000, 10000, 10000)), Ogre::Vector3(0, 0, 0), true, false, 32768);
+ mWorld = new OgreBulletDynamics::DynamicsWorld(mSceneManager, Ogre::AxisAlignedBox(Ogre::Vector3(-10000, -10000, -10000), Ogre::Vector3(10000, 10000, 10000)), Ogre::Vector3(0, 0, 0), true, false, 32766);
/*debugDrawer = new OgreBulletCollisions::DebugDrawer();
debugDrawer->setDrawWireframe(true);