Revision: 2462 http://rigsofrods.svn.sourceforge.net/rigsofrods/?rev=2462&view=rev Author: rorthomas Date: 2012-03-15 13:18:01 +0000 (Thu, 15 Mar 2012) Log Message: ----------- work++ on new camera system
Modified Paths: -------------- trunk/source/main/gameplay/RoRFrameListener.cpp trunk/source/main/gameplay/RoRFrameListener.h trunk/source/main/gameplay/Savegame.cpp trunk/source/main/gameplay/SceneMouse.cpp trunk/source/main/gameplay/SceneMouse.h trunk/source/main/gfx/PreviewRenderer.cpp trunk/source/main/gfx/camera/CameraBehavior.h trunk/source/main/gfx/camera/CameraManager.cpp trunk/source/main/gfx/camera/CameraManager.h Modified: trunk/source/main/gameplay/RoRFrameListener.cpp =================================================================== --- trunk/source/main/gameplay/RoRFrameListener.cpp 2012-03-15 09:20:58 UTC (rev 2461) +++ trunk/source/main/gameplay/RoRFrameListener.cpp 2012-03-15 13:18:01 UTC (rev 2462) @@ -37,6 +37,8 @@ #include "SceneMouse.h" #include "DashBoardManager.h" +#include "CameraManager.h" + #include "RigsOfRods.h" #include "CharacterFactory.h" @@ -780,7 +782,7 @@ #ifdef USE_MYGUI // init GUI - new SceneMouse(scm, this); + new SceneMouse(scm); new GUIManager(root, scm, win); // create console, must be done early Console::getSingleton(); @@ -802,7 +804,6 @@ //ScriptEngine::getSingleton().exploreScripts(); #endif - enforceCameraFOVUpdate=true; gameStartTime = getTimeStamp(); loadedTerrain="none"; terrainUID=""; @@ -1935,7 +1936,7 @@ if(loading_state==ALL_LOADED && net) CharacterFactory::getSingleton().updateCharacters(dt); else if(loading_state==ALL_LOADED && !net) - person->update(dt, (cameramode == CAMERA_FREE)); + person->update(dt, (CAMERA_MODE == CAMERA_FREE)); if(INPUTENGINE.getEventBoolValueBounce(EV_COMMON_QUIT_GAME)) { @@ -1979,7 +1980,7 @@ as->addData("MP_ServerName", SSETTING("Server name", "")); as->addData("MP_ServerPort", SSETTING("Server port", "")); as->addData("MP_NetworkEnabled", SSETTING("Network enable", "No")); - as->addData("Camera_Mode", TOSTRING(cameramode)); + as->addData("Camera_Mode", TOSTRING(CAMERA_MODE)); as->addData("Camera_Position", TOSTRING(mCamera->getPosition())); const RenderTarget::FrameStats& stats = mWindow->getStatistics(); @@ -2101,7 +2102,7 @@ { bool enablegrab = true; - if (cameramode != CAMERA_FREE) + if (CAMERA_MODE != CAMERA_FREE) { if (!curr_truck) { @@ -2109,26 +2110,7 @@ { person->setPhysicsEnabled(true); } - //camera mode - if (INPUTENGINE.getEventBoolValueBounce(EV_CAMERA_CHANGE) && cameramode != CAMERA_FREE && cameramode != CAMERA_FREE_FIXED) - { - if (cameramode==CAMERA_INT) - { - //end of internal cam - camRotX=pushcamRotX; - camRotY=pushcamRotY; - } - cameramode++; - if (cameramode==CAMERA_INT) - { - //start of internal cam - pushcamRotX=camRotX; - pushcamRotY=camRotY; - camRotX=0; - camRotY=DEFAULT_INTERNAL_CAM_PITCH; - } - if (cameramode==CAMERA_END) cameramode=0; - } + } else //we are in a vehicle { @@ -2927,52 +2909,7 @@ { curr_truck->beaconsToggle(); } - //camera mode - if (INPUTENGINE.getEventBoolValueBounce(EV_CAMERA_CHANGE) && cameramode != CAMERA_FREE && cameramode != CAMERA_FREE_FIXED) - { - if (cameramode==CAMERA_INT && curr_truck->currentcamera < curr_truck->freecinecamera-1) - { - curr_truck->currentcamera++; - curr_truck->changedCamera(); - } - else - { - if (cameramode==CAMERA_INT) - { - //end of internal cam - camRotX=pushcamRotX; - camRotY=pushcamRotY; - curr_truck->prepareInside(false); - if(ow) ow->showDashboardOverlays(true, curr_truck); - curr_truck->currentcamera=-1; - //if(bigMap) bigMap->setVisibility(true); - curr_truck->changedCamera(); - } - cameramode++; - if (cameramode==CAMERA_INT) - { - //start of internal cam - pushcamRotX=camRotX; - pushcamRotY=camRotY; - camRotX=0; - camRotY=DEFAULT_INTERNAL_CAM_PITCH; - curr_truck->prepareInside(true); - //if(bigMap) bigMap->setVisibility(false); - // airplane dashboard in the plane visible - if(ow) - { - if(curr_truck->driveable == AIRPLANE) - ow->showDashboardOverlays(true, curr_truck); - else - ow->showDashboardOverlays(false, curr_truck); - } - curr_truck->currentcamera=0; - curr_truck->changedCamera(); - } - if (cameramode==CAMERA_END) cameramode = CAMERA_EXT; - } - } //camera mode if (INPUTENGINE.getEventBoolValue(EV_COMMON_PRESSURE_LESS) && curr_truck) { @@ -3063,7 +3000,7 @@ if(mapMode==0) { bigMap->setVisibility(true); - if(cameramode!=CAMERA_INT) + if(CAMERA_MODE != CAMERA_INT) { //make it small again bigMap->updateRenderMetrics(mWindow); @@ -5143,9 +5080,9 @@ void RoRFrameListener::changedCurrentTruck(Beam *previousTruck, Beam *currentTruck) { - if (cameramode==CAMERA_FREE) return; + if (CAMERA_MODE == CAMERA_FREE) return; - enforceCameraFOVUpdate = true; + CameraManager::getSingleton().triggerFOVUpdate(); // hide any old dashes if(previousTruck && previousTruck->dash) @@ -5226,10 +5163,6 @@ } //make trucks synchronous //lastangle=0; - camRotX=0; - camRotY=Degree(12); - camDist=20; - TRIGGER_EVENT(SE_TRUCK_EXIT, previousTruck?previousTruck->trucknum:-1); } else @@ -5308,6 +5241,7 @@ } //lastangle=0; +#if 0 camRotX=0; camRotY=Degree(12); camDist=20; @@ -5318,7 +5252,7 @@ camRotY=DEFAULT_INTERNAL_CAM_PITCH; //if(bigMap) bigMap->setVisibility(false); } - +#endif // 0 TRIGGER_EVENT(SE_TRUCK_ENTER, currentTruck?currentTruck->trucknum:-1); } } @@ -5426,7 +5360,7 @@ } - moveCamera(dt); //antishaking + CameraManager::getSingleton().update(dt); //antishaking // update mirrors after moving the camera as we use the camera position in mirrors updateTruckMirrors(dt); @@ -5703,7 +5637,7 @@ } else { - if(curr_truck && cameramode!=CAMERA_INT) + if(curr_truck && CAMERA_MODE != CAMERA_INT) { if(ow) ow->showDashboardOverlays(true, curr_truck); //if(bigMap) bigMap->setVisibility(true); @@ -5881,8 +5815,8 @@ } // store camera settings - Radian camRotX_saved = camRotX; - Radian camRotY_saved = camRotY; + //Radian camRotX_saved = camRotX; + //Radian camRotY_saved = camRotY; // store current trucks node positions Vector3 *nodeStorage = (Vector3 *)malloc(sizeof(Vector3) * curr_truck->free_node + 10); @@ -5929,8 +5863,8 @@ // restore camera position - camRotX = camRotX_saved; - camRotY = camRotY_saved; + //camRotX = camRotX_saved; + //camRotY = camRotY_saved; } @@ -6005,4 +5939,4 @@ overlay->add2D(panel); overlay->show(); #endif // USE_SKIA -} \ No newline at end of file +} Modified: trunk/source/main/gameplay/RoRFrameListener.h =================================================================== --- trunk/source/main/gameplay/RoRFrameListener.h 2012-03-15 09:20:58 UTC (rev 2461) +++ trunk/source/main/gameplay/RoRFrameListener.h 2012-03-15 13:18:01 UTC (rev 2462) @@ -78,8 +78,6 @@ #define EVENT_AIRPLANE 4 #define EVENT_DELETE 5 -#define DEFAULT_INTERNAL_CAM_PITCH Degree(-15) - #define MAX_PLAYLIST_ENTRIES 20 #ifdef USE_PAGED @@ -319,7 +317,6 @@ void setNetQuality(int q); int getNetQuality(bool ack=false); bool getNetQualityChanged(); - bool enforceCameraFOVUpdate; pthread_mutex_t mutex_data; bool freeTruckPosition; Modified: trunk/source/main/gameplay/Savegame.cpp =================================================================== --- trunk/source/main/gameplay/Savegame.cpp 2012-03-15 09:20:58 UTC (rev 2461) +++ trunk/source/main/gameplay/Savegame.cpp 2012-03-15 13:18:01 UTC (rev 2462) @@ -32,6 +32,8 @@ #include "RoRFrameListener.h" #include "OverlayWrapper.h" +#include "CameraManager.h" + using namespace Ogre; const char *Savegame::current_version = "ROR_SAVEGAME_v2"; @@ -97,22 +99,23 @@ memcpy(&h.cam_pos, pos.ptr(), sizeof(float) * 3); } - h.camRotX = RoRFrameListener::eflsingleton->camRotX.valueRadians(); - h.camRotY = RoRFrameListener::eflsingleton->camRotY.valueRadians(); - h.camDist = RoRFrameListener::eflsingleton->camDist; + // TODO: FIX savegame camera integration + //h.camRotX = RoRFrameListener::eflsingleton->camRotX.valueRadians(); + //h.camRotY = RoRFrameListener::eflsingleton->camRotY.valueRadians(); + //h.camDist = RoRFrameListener::eflsingleton->camDist; - memcpy(&h.cam_ideal_pos, RoRFrameListener::eflsingleton->camIdealPosition.ptr(), sizeof(float) * 3); + //memcpy(&h.cam_ideal_pos, RoRFrameListener::eflsingleton->camIdealPosition.ptr(), sizeof(float) * 3); - h.pushcamRotX = RoRFrameListener::eflsingleton->pushcamRotX.valueRadians(); - h.pushcamRotY = RoRFrameListener::eflsingleton->pushcamRotY.valueRadians(); - h.mMoveScale = RoRFrameListener::eflsingleton->mMoveScale; - h.mRotScale = RoRFrameListener::eflsingleton->mRotScale.valueRadians(); + //h.pushcamRotX = RoRFrameListener::eflsingleton->pushcamRotX.valueRadians(); + //h.pushcamRotY = RoRFrameListener::eflsingleton->pushcamRotY.valueRadians(); + //h.mMoveScale = RoRFrameListener::eflsingleton->mMoveScale; + //h.mRotScale = RoRFrameListener::eflsingleton->mRotScale.valueRadians(); - memcpy(&h.lastPosition, RoRFrameListener::eflsingleton->lastPosition.ptr(), sizeof(float) * 3); + //memcpy(&h.lastPosition, RoRFrameListener::eflsingleton->lastPosition.ptr(), sizeof(float) * 3); - h.cameramode = RoRFrameListener::eflsingleton->cameramode; - h.lastcameramode = RoRFrameListener::eflsingleton->lastcameramode; + //h.cameramode = RoRFrameListener::eflsingleton->cameramode; + //h.lastcameramode = RoRFrameListener::eflsingleton->lastcameramode; } // write header to file @@ -263,6 +266,9 @@ { RoRFrameListener::eflsingleton->person->setPosition(Vector3(h.player_pos)); } + + // TODO: FIX savegame camera integration + /* if(RoRFrameListener::eflsingleton->getCamera()) { RoRFrameListener::eflsingleton->getCamera()->setPosition(Vector3(h.cam_pos)); @@ -283,6 +289,7 @@ RoRFrameListener::eflsingleton->cameramode = h.cameramode; RoRFrameListener::eflsingleton->lastcameramode = h.lastcameramode; + */ } // iterate the trucks Modified: trunk/source/main/gameplay/SceneMouse.cpp =================================================================== --- trunk/source/main/gameplay/SceneMouse.cpp 2012-03-15 09:20:58 UTC (rev 2461) +++ trunk/source/main/gameplay/SceneMouse.cpp 2012-03-15 13:18:01 UTC (rev 2462) @@ -23,15 +23,16 @@ #include "BeamFactory.h" #include <Ogre.h> +#include "CameraManager.h" + #ifdef USE_MYGUI # include <MyGUI.h> #endif //USE_MYGUI using namespace Ogre; -SceneMouse::SceneMouse(Ogre::SceneManager *scm, RoRFrameListener *rfl) : +SceneMouse::SceneMouse(Ogre::SceneManager *scm) : scm(scm) - , rfl(rfl) { setSingleton(this); mouseGrabForce = 30000.0f; @@ -89,6 +90,10 @@ { const OIS::MouseState ms = _arg.state; + // check if handled by the camera + if(CameraManager::getSingleton().mouseMoved(_arg)) + return true; + // experimental mouse hack if(ms.buttonDown(OIS::MB_Left) && mouseGrabState == 0) { @@ -157,7 +162,8 @@ // not fixed return false; } - + + /* if(ms.buttonDown(OIS::MB_Right)) { rfl->camRotX += Degree( (float)ms.X.rel * 0.13f); @@ -176,6 +182,8 @@ #endif // USE_MYGUI return true; } + */ + return false; } @@ -225,7 +233,7 @@ Ray SceneMouse::getMouseRay() { - Camera *cam = rfl->getCamera(); + Camera *cam = MAIN_CAMERA;//CameraManager::getSingleton()->getCamera(); Viewport *vp = cam->getViewport(); return cam->getCameraToViewportRay((float)lastMouseX/(float)vp->getActualWidth(),(float)lastMouseY/(float)vp->getActualHeight()); } Modified: trunk/source/main/gameplay/SceneMouse.h =================================================================== --- trunk/source/main/gameplay/SceneMouse.h 2012-03-15 09:20:58 UTC (rev 2461) +++ trunk/source/main/gameplay/SceneMouse.h 2012-03-15 13:18:01 UTC (rev 2462) @@ -33,7 +33,7 @@ { friend class RoRSingletonNoCreation<SceneMouse>; public: - SceneMouse(Ogre::SceneManager *scm, RoRFrameListener *rfl); + SceneMouse(Ogre::SceneManager *scm); ~SceneMouse(); bool mouseMoved(const OIS::MouseEvent& _arg); @@ -48,7 +48,6 @@ protected: Ogre::SceneManager *scm; - RoRFrameListener *rfl; Ogre::ManualObject *pickLine; Ogre::SceneNode *pickLineNode; float mouseGrabForce; Modified: trunk/source/main/gfx/PreviewRenderer.cpp =================================================================== --- trunk/source/main/gfx/PreviewRenderer.cpp 2012-03-15 09:20:58 UTC (rev 2461) +++ trunk/source/main/gfx/PreviewRenderer.cpp 2012-03-15 13:18:01 UTC (rev 2462) @@ -31,6 +31,8 @@ #include "BeamEngine.h" #include "utils.h" +#include "CameraManager.h" + PreviewRenderer::PreviewRenderer() { fn = SSETTING("OPT_IMGPATH", ""); @@ -114,7 +116,7 @@ SceneNode *camNode = sceneMgr->getRootSceneNode()->createChildSceneNode(); - Camera *cam = RoRFrameListener::eflsingleton->getCamera(); + Camera *cam = MAIN_CAMERA; //RoRFrameListener::eflsingleton->getCamera(); cam->setLodBias(1000.0f); cam->setAspectRatio(1.0f); Modified: trunk/source/main/gfx/camera/CameraBehavior.h =================================================================== --- trunk/source/main/gfx/camera/CameraBehavior.h 2012-03-15 09:20:58 UTC (rev 2461) +++ trunk/source/main/gfx/camera/CameraBehavior.h 2012-03-15 13:18:01 UTC (rev 2462) @@ -24,7 +24,15 @@ class CameraBehavior { +public: void update(float dt); + + bool mouseMoved(const OIS::MouseEvent& _arg); + bool mousePressed(const OIS::MouseEvent& _arg, OIS::MouseButtonID _id); + bool mouseReleased(const OIS::MouseEvent& _arg, OIS::MouseButtonID _id); + + void activate(); + void deactivate(); }; #endif // CAMERAMANAGER_H__ Modified: trunk/source/main/gfx/camera/CameraManager.cpp =================================================================== --- trunk/source/main/gfx/camera/CameraManager.cpp 2012-03-15 09:20:58 UTC (rev 2461) +++ trunk/source/main/gfx/camera/CameraManager.cpp 2012-03-15 13:18:01 UTC (rev 2462) @@ -25,9 +25,14 @@ #include "Settings.h" #include "Console.h" #include "language.h" +#include "BeamFactory.h" +#include "CameraBehaviorFree.h" + using namespace Ogre; +#define DEFAULT_INTERNAL_CAM_PITCH Degree(-15) + CameraManager::CameraManager(Ogre::SceneManager *scm, Ogre::Camera *cam) : mSceneMgr(scm) , mCamera(cam) @@ -52,6 +57,7 @@ mDOF=0; mRotateSpeed = 100; mMoveSpeed = 50; + enforceCameraFOVUpdate=true; // DOF? bool useDOF = (BSETTING("DOF", false)); @@ -61,6 +67,8 @@ mDOF->setEnabled(true); } + + } CameraManager::~CameraManager() @@ -68,8 +76,81 @@ } +void CameraManager::createGlobalBehaviors() +{ + globalBehaviors["free"] = new CameraBehaviorFree(); +} + void CameraManager::updateInput() { + Beam *curr_truck = BeamFactory::getSingleton().getCurrentTruck(); + + //camera mode + if (cameramode != CAMERA_FREE && INPUTENGINE.getEventBoolValueBounce(EV_CAMERA_CHANGE) && cameramode != CAMERA_FREE_FIXED) + { + if (cameramode==CAMERA_INT) + { + //end of internal cam + camRotX=pushcamRotX; + camRotY=pushcamRotY; + } + cameramode++; + if (cameramode==CAMERA_INT) + { + //start of internal cam + pushcamRotX=camRotX; + pushcamRotY=camRotY; + camRotX=0; + camRotY=DEFAULT_INTERNAL_CAM_PITCH; + } + if (cameramode==CAMERA_END) cameramode=0; + } + //camera mode + if (curr_truck && INPUTENGINE.getEventBoolValueBounce(EV_CAMERA_CHANGE) && cameramode != CAMERA_FREE && cameramode != CAMERA_FREE_FIXED) + { + if (cameramode==CAMERA_INT && curr_truck->currentcamera < curr_truck->freecinecamera-1) + { + curr_truck->currentcamera++; + curr_truck->changedCamera(); + } + else + { + if (cameramode==CAMERA_INT) + { + //end of internal cam + camRotX=pushcamRotX; + camRotY=pushcamRotY; + curr_truck->prepareInside(false); + if(ow) ow->showDashboardOverlays(true, curr_truck); + curr_truck->currentcamera=-1; + //if(bigMap) bigMap->setVisibility(true); + curr_truck->changedCamera(); + } + cameramode++; + if (cameramode==CAMERA_INT) + { + //start of internal cam + pushcamRotX=camRotX; + pushcamRotY=camRotY; + camRotX=0; + camRotY=DEFAULT_INTERNAL_CAM_PITCH; + curr_truck->prepareInside(true); + //if(bigMap) bigMap->setVisibility(false); + // airplane dashboard in the plane visible + if(ow) + { + if(curr_truck->driveable == AIRPLANE) + ow->showDashboardOverlays(true, curr_truck); + else + ow->showDashboardOverlays(false, curr_truck); + } + curr_truck->currentcamera=0; + curr_truck->changedCamera(); + } + + if (cameramode==CAMERA_END) cameramode = CAMERA_EXT; + } + } // camera FOV settings if (INPUTENGINE.getEventBoolValueBounce(EV_COMMON_FOV_LESS)) { @@ -136,27 +217,7 @@ if (INPUTENGINE.getEventBoolValueBounce(EV_CAMERA_FREE_MODE)) { - static int storedcameramode = -1; - if(cameramode == CAMERA_FREE || cameramode == CAMERA_FREE_FIXED) - { - // change back to normal camera - if(mDOF) mDOF->setFocusMode(DOFManager::Manual); - cameramode = storedcameramode; - LOG("exiting free camera mode"); -#ifdef USE_MYGUI - Console::getSingleton().putMessage(Console::CONSOLE_MSGTYPE_INFO, Console::CONSOLE_SYSTEM_NOTICE, _L("normal camera"), "camera.png", 3000); -#endif // USE_MYGUI - } else if(cameramode != CAMERA_FREE && cameramode != CAMERA_FREE_FIXED ) - { - // enter free camera mode - if(mDOF) mDOF->setFocusMode(DOFManager::Auto); - storedcameramode = cameramode; - cameramode = CAMERA_FREE; - LOG("entering free camera mode"); -#ifdef USE_MYGUI - Console::getSingleton().putMessage(Console::CONSOLE_MSGTYPE_INFO, Console::CONSOLE_SYSTEM_NOTICE, _L("free camera"), "camera_go.png", 3000); -#endif // USE_MYGUI - } + currentBehavior = globalBehaviors["free"]; } } @@ -174,9 +235,9 @@ else { // Move about 100 units per second, - mMoveScale = mMoveSpeed * evt.timeSinceLastFrame; + mMoveScale = mMoveSpeed * dt; // Take about 10 seconds for full rotation - mRotScale = mRotateSpeed * evt.timeSinceLastFrame; + mRotScale = mRotateSpeed * dt; } @@ -194,70 +255,6 @@ enforceCameraFOVUpdate = false; lastcameramode = cameramode; - if (cameramode==CAMERA_FREE) - { - // this is a workaround for the free camera mode :) - Real mMoveScale = 0.1; - Ogre::Degree mRotScale(0.1f); - Ogre::Degree mRotX(0); - Ogre::Degree mRotY(0); - Vector3 mTranslateVector = Vector3::ZERO; - - if(INPUTENGINE.isKeyDown(OIS::KC_LSHIFT) || INPUTENGINE.isKeyDown(OIS::KC_RSHIFT)) - { - mRotScale *= 3; - mMoveScale *= 3; - } - - if(INPUTENGINE.isKeyDown(OIS::KC_LCONTROL)) - { - mRotScale *= 30; - mMoveScale *= 30; - } - - if(INPUTENGINE.isKeyDown(OIS::KC_LMENU)) - { - mRotScale *= 0.05; - mMoveScale *= 0.05; - } - - - if(INPUTENGINE.getEventBoolValue(EV_CHARACTER_SIDESTEP_LEFT)) - mTranslateVector.x = -mMoveScale; // Move camera left - - if(INPUTENGINE.getEventBoolValue(EV_CHARACTER_SIDESTEP_RIGHT)) - mTranslateVector.x = mMoveScale; // Move camera RIGHT - - if(INPUTENGINE.getEventBoolValue(EV_CHARACTER_FORWARD)) - mTranslateVector.z = -mMoveScale; // Move camera forward - - if(INPUTENGINE.getEventBoolValue(EV_CHARACTER_BACKWARDS)) - mTranslateVector.z = mMoveScale; // Move camera backward - - if(INPUTENGINE.getEventBoolValue(EV_CHARACTER_ROT_UP)) - mRotY += mRotScale; - - if(INPUTENGINE.getEventBoolValue(EV_CHARACTER_ROT_DOWN)) - mRotY += -mRotScale; - - if(INPUTENGINE.getEventBoolValue(EV_CHARACTER_UP)) - mTranslateVector.y = mMoveScale; // Move camera up - - if(INPUTENGINE.getEventBoolValue(EV_CHARACTER_DOWN)) - mTranslateVector.y = -mMoveScale; // Move camera down - - if(INPUTENGINE.getEventBoolValue(EV_CHARACTER_RIGHT)) - mRotX += -mRotScale; - - if(INPUTENGINE.getEventBoolValue(EV_CHARACTER_LEFT)) - mRotX += mRotScale; - - mCamera->yaw(mRotX); - mCamera->pitch(mRotY); - - Vector3 trans = mCamera->getOrientation() * mTranslateVector; - setCameraPositionWithCollision(mCamera->getPosition() + trans); - } if (!curr_truck) { //perso mode @@ -649,4 +646,27 @@ // no collision of camera, normal mode mCamera->setPosition(newPos); return true; -} \ No newline at end of file +} + +bool CameraManager::mouseMoved(const OIS::MouseEvent& _arg) +{ + if(!currentBehavior) return false; + return currentBehavior->mouseMoved(_arg); +} + +bool CameraManager::mousePressed(const OIS::MouseEvent& _arg, OIS::MouseButtonID _id) +{ + if(!currentBehavior) return false; + return currentBehavior->mousePressed(_arg, _id); +} + +bool CameraManager::mouseReleased(const OIS::MouseEvent& _arg, OIS::MouseButtonID _id) +{ + if(!currentBehavior) return false; + return currentBehavior->mouseReleased(_arg, _id); +} + +void triggerFOVUpdate() +{ + enforceCameraFOVUpdate = true; +} Modified: trunk/source/main/gfx/camera/CameraManager.h =================================================================== --- trunk/source/main/gfx/camera/CameraManager.h 2012-03-15 09:20:58 UTC (rev 2461) +++ trunk/source/main/gfx/camera/CameraManager.h 2012-03-15 13:18:01 UTC (rev 2462) @@ -26,11 +26,16 @@ #include "OIS.h" #include "Singleton.h" +#include <map> + +#include "CameraBehavior.h" + #define MAIN_CAMERA CameraManager::getSingleton().getCamera() #define CAMERA_MODE CameraManager::getSingleton().getCameraMode() class CameraManager : public RoRSingletonNoCreation < CameraManager > { + friend class SceneMouse; protected: Ogre::SceneManager *mSceneMgr; Ogre::Camera *mCamera; @@ -47,10 +52,19 @@ int externalCameraMode; int mSceneDetailIndex; // Real dirSpeed; - Real mMoveSpeed; - Degree mRotateSpeed; + float mMoveSpeed; + Ogre::Degree mRotateSpeed; DOFManager *mDOF; + bool enforceCameraFOVUpdate; + CameraBehavior *currentBehavior; + + std::map <Ogre::String , CameraBehavior *> globalBehaviors; + + bool mouseMoved(const OIS::MouseEvent& _arg); + bool mousePressed(const OIS::MouseEvent& _arg, OIS::MouseButtonID _id); + bool mouseReleased(const OIS::MouseEvent& _arg, OIS::MouseButtonID _id); + public: CameraManager(Ogre::SceneManager *scm, Ogre::Camera *cam); ~CameraManager(); @@ -74,8 +88,10 @@ Ogre::Camera *getCamera() { return mCamera; }; int getCameraMode() { return cameramode; }; - bool mouseMoved(const OIS::MouseEvent& _arg); + + void createGlobalBehaviors(); + void triggerFOVUpdate(); }; #endif // CAMERAMANAGER_H__ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ This SF email is sponsosred by: Try Windows Azure free for 90 days Click Here http://p.sf.net/sfu/sfd2d-msazure _______________________________________________ Rigsofrods-devel mailing list Rigsofrods-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rigsofrods-devel