//----------------------------------------------------------------------------------- void CameraController::update( float timeSinceLast ) { Ogre::Camera *camera = mGraphicsSystem->getCamera(); if( mCameraYaw || mCameraPitch ) { if( mUseSceneNode ) { Ogre::Node *cameraNode = camera->getParentNode(); // Update now as yaw needs the derived orientation. cameraNode->_getFullTransformUpdated(); cameraNode->yaw( Ogre::Radian( mCameraYaw ), Ogre::Node::TS_WORLD ); cameraNode->pitch( Ogre::Radian( mCameraPitch ) ); } else { camera->yaw( Ogre::Radian( mCameraYaw ) ); camera->pitch( Ogre::Radian( mCameraPitch ) ); } mCameraYaw = 0.0f; mCameraPitch = 0.0f; } int camMovementZ = mWASD[2] - mWASD[0]; int camMovementX = mWASD[3] - mWASD[1]; int slideUpDown = mSlideUpDown[0] - mSlideUpDown[1]; if( camMovementZ || camMovementX || slideUpDown ) { Ogre::Vector3 camMovementDir( camMovementX, slideUpDown, camMovementZ ); camMovementDir.normalise(); camMovementDir *= timeSinceLast * 10.0f * (1 + mSpeedMofifier * 5); if( mUseSceneNode ) { Ogre::Node *cameraNode = camera->getParentNode(); cameraNode->translate( camMovementDir, Ogre::Node::TS_LOCAL ); } else { camera->moveRelative( camMovementDir ); } } }
//----------------------------------------------------------------------------------------- void CollisionCameraController::update(float timeSinceLast) { Ogre::Camera* camera = mGraphicsSystem->getCamera(); Ogre::Node* cameraNode = camera->getParentNode(); { btTransform transform = mGhostObject->getWorldTransform(); btQuaternion q = transform.getRotation(); q *= btQuaternion(btVector3(0, 1, 0), mCameraYaw); mGhostObject->getWorldTransform().setRotation(q); } camera->pitch(Ogre::Radian(mCameraPitch)); mCameraYaw = 0.0f; mCameraPitch = 0.0f; int camMovementZ = mKeymapState[Backward].second - mKeymapState[Forward].second; int camMovementX = mKeymapState[Rightward].second - mKeymapState[Leftward].second; int slideUpDown = mKeymapState[Up].second - mKeymapState[Down].second; Ogre::Vector3 camMovementDir(camMovementX, slideUpDown, camMovementZ); camMovementDir.normalise(); camMovementDir *= timeSinceLast * mCameraBaseSpeed * (1 + mSpeedModifier * mCameraSpeedBoost); if (camMovementDir.y > 0) { mCharacter->jump(); camMovementDir.y = 0; } mCharacter->setWalkDirection(Collision::Converter::to(Collision::Converter::to(mGhostObject->getWorldTransform().getRotation()) * camMovementDir)); { Ogre::Node* cameraNode = camera->getParentNode(); Ogre::Quaternion q; q = q * (Collision::Converter::to(mGhostObject->getWorldTransform().getRotation())); q = q * Ogre::Quaternion(cameraNode->getOrientation().getPitch(), Ogre::Vector3(1, 0, 0)); cameraNode->setOrientation(q); cameraNode->setPosition(Collision::Converter::to(mGhostObject->getWorldTransform().getOrigin() /* + btVector3(0,1.8,0)*/)); } }