00001 #include "CameraManager.h" 00002 #include "Application.h" 00003 00004 CameraManager::CameraManager() 00005 { 00006 m_activeCamera = 0; 00007 00008 Camera* camera = new Camera; 00009 00010 Ogre::Camera* oCamera; 00011 Ogre::SceneNode* targetNode; 00012 Ogre::SceneNode* cameraNode; 00013 00014 targetNode = Application::getSingleton()->getViewerManager()->getRootSceneNode()->createChildSceneNode("ViewportCamTargetNode"); 00015 00016 targetNode->setInheritOrientation(false); 00017 targetNode->setFixedYawAxis(true); 00018 camera->setTargetNode(targetNode); 00019 00020 // Create the viewport camera 00021 oCamera = Application::getSingleton()->getViewerManager()->createCamera("ViewportCam"); 00022 00023 oCamera->setDirection(0.0,0.0,-1.0); 00024 oCamera->setNearClipDistance(1); 00025 oCamera->setFarClipDistance(1750); 00026 camera->setCamera(oCamera); 00027 00028 cameraNode = targetNode->createChildSceneNode("ViewportCamPositionNode"); 00029 Ogre::SceneNode* temp = oCamera->getParentSceneNode(); 00030 00031 camera->setSceneNode(cameraNode); 00032 camera->setZoomDist(30.0); 00033 camera->setZoomAmount(1.0); 00034 camera->setYaw(Ogre::Degree(99.0)); 00035 camera->setPitch(Ogre::Degree(-25.0)); 00036 camera->setTargetPosition(Ogre::Vector3(0,0,0)); 00037 camera->forceUpdate(); 00038 00039 addCamera(camera); 00040 00041 camera = new Camera; 00043 oCamera = Application::getSingleton()->getOverlayManager()->createCamera("OverlayCam"); 00044 oCamera->setPosition(Ogre::Vector3(0,0,30)); 00046 oCamera->lookAt(Ogre::Vector3(0,0,-1)); 00047 oCamera->setNearClipDistance(5); 00048 00049 camera->setCamera(oCamera); 00050 addCamera(camera); 00051 } 00052 00053 CameraManager::~CameraManager() 00054 { 00055 std::list<Camera*>::iterator iterator; 00056 00057 for (iterator = m_cameras.begin(); iterator != m_cameras.end(); ++iterator) 00058 { 00059 delete (*iterator); 00060 } 00061 } 00062 00063 void CameraManager::addCamera(Camera* _val) 00064 { 00065 m_cameras.push_back(_val); 00066 if (getActiveCamera() == 0) m_activeCamera = _val; 00067 } 00068 00069 Camera* CameraManager::getCamera(std::string _name) 00070 { 00071 std::list<Camera*>::iterator iterator; 00072 for (iterator = m_cameras.begin(); iterator != m_cameras.end(); ++iterator) 00073 { 00074 if ((*iterator)->getCamera()->getName() == _name) return (*iterator); 00075 } 00076 return 0; 00077 } 00078 00079 Camera* CameraManager::getCamera(int _id) 00080 { 00081 std::list<Camera*>::iterator iterator; 00082 for (iterator = m_cameras.begin(); iterator != m_cameras.end(); ++iterator) 00083 { 00084 if ((*iterator)->getID() == _id) return (*iterator); 00085 } 00086 return 0; 00087 } 00088 00089 Camera* CameraManager::getActiveCamera() 00090 { 00091 return m_activeCamera; 00092 } 00093 00094 void CameraManager::setActiveCamera(int _id) 00095 { 00096 m_activeCamera = getCamera(_id); 00097 } 00098 00099 void CameraManager::setActiveCamera(std::string _name) 00100 { 00101 m_activeCamera = getCamera(_name); 00102 } 00103 00104 void CameraManager::update() 00105 { 00106 /* 00107 std::list<Camera*>::iterator iterator; 00108 for (iterator = m_cameras.begin(); iterator != m_cameras.end(); ++iterator) 00109 { 00110 (*iterator)->move(); 00111 }*/ 00112 // We don't want to move the overlay camera! 00113 m_activeCamera->move(); 00114 }