Revision: 2783
          http://rigsofrods.svn.sourceforge.net/rigsofrods/?rev=2783&view=rev
Author:   ulteq
Date:     2012-06-06 18:34:34 +0000 (Wed, 06 Jun 2012)
Log Message:
-----------
-Codechange: new interfaces for Manager / Behavior systems
+CameraManager no longer singleton
+CameraManager ported to the new interfaces

Modified Paths:
--------------
    trunk/source/main/GlobalEnvironment.h
    trunk/source/main/gameplay/Character.cpp
    trunk/source/main/gameplay/RoRFrameListener.cpp
    trunk/source/main/gameplay/SceneMouse.cpp
    trunk/source/main/gfx/PreviewRenderer.cpp
    trunk/source/main/gfx/camera/CameraBehaviorCharacter.cpp
    trunk/source/main/gfx/camera/CameraBehaviorCharacter.h
    trunk/source/main/gfx/camera/CameraBehaviorFixed.cpp
    trunk/source/main/gfx/camera/CameraBehaviorFixed.h
    trunk/source/main/gfx/camera/CameraBehaviorFree.cpp
    trunk/source/main/gfx/camera/CameraBehaviorFree.h
    trunk/source/main/gfx/camera/CameraBehaviorIsometric.cpp
    trunk/source/main/gfx/camera/CameraBehaviorIsometric.h
    trunk/source/main/gfx/camera/CameraBehaviorOrbit.cpp
    trunk/source/main/gfx/camera/CameraBehaviorOrbit.h
    trunk/source/main/gfx/camera/CameraBehaviorStatic.cpp
    trunk/source/main/gfx/camera/CameraBehaviorStatic.h
    trunk/source/main/gfx/camera/CameraBehaviorVehicle.cpp
    trunk/source/main/gfx/camera/CameraBehaviorVehicle.h
    trunk/source/main/gfx/camera/CameraBehaviorVehicleCineCam.cpp
    trunk/source/main/gfx/camera/CameraBehaviorVehicleCineCam.h
    trunk/source/main/gfx/camera/CameraBehaviorVehicleSpline.cpp
    trunk/source/main/gfx/camera/CameraBehaviorVehicleSpline.h
    trunk/source/main/gfx/camera/CameraManager.cpp
    trunk/source/main/gfx/camera/CameraManager.h
    trunk/source/main/gui/GUIMenu.cpp
    trunk/source/main/physics/Beam.cpp

Added Paths:
-----------
    trunk/source/main/utils/IBehavior.h
    trunk/source/main/utils/IManager.h

Removed Paths:
-------------
    trunk/source/main/gfx/camera/ICameraBehavior.h

Modified: trunk/source/main/GlobalEnvironment.h
===================================================================
--- trunk/source/main/GlobalEnvironment.h       2012-06-05 22:23:57 UTC (rev 
2782)
+++ trunk/source/main/GlobalEnvironment.h       2012-06-06 18:34:34 UTC (rev 
2783)
@@ -20,34 +20,36 @@
 #ifndef __GlobalEnvironment_H_
 #define __GlobalEnvironment_H_
 
-class RoRFrameListener;
-class TerrainManager;
+class CameraManager;
+class Character;
 class Collisions;
 class IHeightFinder;
-class Water;
+class MapControl;
 class Network;
-class MapControl;
-class Character;
+class RoRFrameListener;
 class SkyManager;
+class TerrainManager;
+class Water;
 
 class GlobalEnvironment
 {
 public:
 
        GlobalEnvironment() :
-                 collisions(0)
+                 cameraManager(0)
                , embeddedMode(false)
                , frameListener(0)
+               , mainCamera(0)
                , network(0)
-               , mainCamera(0)
+               , ogreRoot(0)
+               , player(0)
                , renderWindow(0)
                , sceneManager(0)
-               , viewPort(0)
-               , player(0)
                , sky(0)
                , surveyMap(0)
                , terrainManager(0)
-               , ogreRoot(0)
+               , viewPort(0)
+           , collisions(0)
        {
        }
 
@@ -57,6 +59,7 @@
        Ogre::SceneManager *sceneManager;
        Ogre::Viewport *viewPort;
 
+       CameraManager *cameraManager;
        Character *player;
        Collisions *collisions;
        MapControl *surveyMap;

Modified: trunk/source/main/gameplay/Character.cpp
===================================================================
--- trunk/source/main/gameplay/Character.cpp    2012-06-05 22:23:57 UTC (rev 
2782)
+++ trunk/source/main/gameplay/Character.cpp    2012-06-06 18:34:34 UTC (rev 
2783)
@@ -276,7 +276,7 @@
        {
                // disable character movement when using the free camera mode 
or when the menu is opened
                // TODO: check for menu being opened
-               if (CameraManager::singletonExists() && 
!CameraManager::getSingleton().gameControlsEnabled()) return;
+               if (gEnv->cameraManager && 
!gEnv->cameraManager->gameControlsEnabled()) return;
 
                // small hack: if not visible do not apply physics
                Vector3 position = mCharacterNode->getPosition();

Modified: trunk/source/main/gameplay/RoRFrameListener.cpp
===================================================================
--- trunk/source/main/gameplay/RoRFrameListener.cpp     2012-06-05 22:23:57 UTC 
(rev 2782)
+++ trunk/source/main/gameplay/RoRFrameListener.cpp     2012-06-06 18:34:34 UTC 
(rev 2783)
@@ -1322,7 +1322,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", 
CameraManager::singletonExists() ? 
TOSTRING(CameraManager::getSingleton().getCameraBehavior()) : "None");
+                       as->addData("Camera_Mode", gEnv->cameraManager ? 
TOSTRING(gEnv->cameraManager->getCurrentBehavior()) : "None");
                        as->addData("Camera_Position", 
TOSTRING(gEnv->mainCamera->getPosition()));
 
                        const RenderTarget::FrameStats& stats = 
gEnv->renderWindow->getStatistics();
@@ -1434,9 +1434,9 @@
        #endif // USE_MYGUI
 
                        // save the settings
-                       if (CameraManager::singletonExists() &&
-                               
CameraManager::getSingleton().hasActiveBehavior() &&
-                               
CameraManager::getSingleton().getCameraBehavior() == 
CameraManager::CAMERA_BEHAVIOR_VEHICLE_CINECAM)
+                       if (gEnv->cameraManager &&
+                               gEnv->cameraManager->hasActiveBehavior() &&
+                               gEnv->cameraManager->getCurrentBehavior() == 
CameraManager::CAMERA_BEHAVIOR_VEHICLE_CINECAM)
                        {
                                SETTINGS.setSetting("FOV Internal", 
TOSTRING(fov));
                        } else
@@ -1477,7 +1477,7 @@
 
        if (loading_state==ALL_LOADED || loading_state == TERRAIN_EDITOR)
        {
-               if (CameraManager::singletonExists() && 
CameraManager::getSingleton().gameControlsEnabled())
+               if (gEnv->cameraManager && 
gEnv->cameraManager->gameControlsEnabled())
                {
                        if (!curr_truck)
                        {
@@ -2414,9 +2414,9 @@
                                surveyMapMode = (surveyMapMode + 1) % 
SURVEY_MAP_END;
 
                                if (surveyMapMode == SURVEY_MAP_BIG && 
(velocity > 5.0f ||
-                                       (CameraManager::singletonExists() &&
-                                       
CameraManager::getSingleton().hasActiveBehavior() &&
-                                       
CameraManager::getSingleton().getCameraBehavior() == 
CameraManager::CAMERA_BEHAVIOR_VEHICLE_CINECAM)))
+                                       (gEnv->cameraManager &&
+                                       
gEnv->cameraManager->hasActiveBehavior() &&
+                                       
gEnv->cameraManager->getCurrentBehavior() == 
CameraManager::CAMERA_BEHAVIOR_VEHICLE_CINECAM)))
                                {
                                        surveyMapMode = (surveyMapMode + 1) % 
SURVEY_MAP_END;
                                }
@@ -2455,11 +2455,11 @@
                        }
                        if (curr_truck &&
                                surveyMapMode == SURVEY_MAP_BIG &&
-                               CameraManager::singletonExists() &&
-                               
CameraManager::getSingleton().hasActiveBehavior() &&
-                               
CameraManager::getSingleton().gameControlsEnabled())
+                               gEnv->cameraManager &&
+                               gEnv->cameraManager->hasActiveBehavior() &&
+                               gEnv->cameraManager->gameControlsEnabled())
                        {
-                               if (velocity > 7.5f || 
CameraManager::getSingleton().getCameraBehavior() == 
CameraManager::CAMERA_BEHAVIOR_VEHICLE_CINECAM)
+                               if (velocity > 7.5f || 
gEnv->cameraManager->getCurrentBehavior() == 
CameraManager::CAMERA_BEHAVIOR_VEHICLE_CINECAM)
                                {
                                        surveyMap->setPosition(-1, 1, 0.3f);
                                        surveyMap->setAlpha(alphaValue);
@@ -3135,9 +3135,9 @@
 #endif // USE_MUMBLE
        }
 
-       if (CameraManager::singletonExists() && (loading_state == ALL_LOADED || 
loading_state == TERRAIN_EDITOR))
+       if (gEnv->cameraManager && (loading_state == ALL_LOADED || 
loading_state == TERRAIN_EDITOR))
        {
-               CameraManager::getSingleton().update(dt);
+               gEnv->cameraManager->update(dt);
        }
 
        // update mirrors after moving the camera as we use the camera position 
in mirrors
@@ -3456,9 +3456,9 @@
        else
        {
                if (curr_truck
-                       && CameraManager::singletonExists()
-                       && CameraManager::getSingleton().hasActiveBehavior()
-                       && CameraManager::getSingleton().getCameraBehavior() != 
CameraManager::CAMERA_BEHAVIOR_VEHICLE_CINECAM)
+                       && gEnv->cameraManager
+                       && gEnv->cameraManager->hasActiveBehavior()
+                       && gEnv->cameraManager->getCurrentBehavior() != 
CameraManager::CAMERA_BEHAVIOR_VEHICLE_CINECAM)
                {
                        if (ow) ow->showDashboardOverlays(true, curr_truck);
                        //if (bigMap) bigMap->setVisibility(true);

Modified: trunk/source/main/gameplay/SceneMouse.cpp
===================================================================
--- trunk/source/main/gameplay/SceneMouse.cpp   2012-06-05 22:23:57 UTC (rev 
2782)
+++ trunk/source/main/gameplay/SceneMouse.cpp   2012-06-06 18:34:34 UTC (rev 
2783)
@@ -88,7 +88,7 @@
        const OIS::MouseState ms = _arg.state;
 
        // check if handled by the camera
-       if (!CameraManager::singletonExists() || 
CameraManager::getSingleton().mouseMoved(_arg))
+       if (!gEnv->cameraManager || gEnv->cameraManager->mouseMoved(_arg))
                return true;
 
        // experimental mouse hack

Modified: trunk/source/main/gfx/PreviewRenderer.cpp
===================================================================
--- trunk/source/main/gfx/PreviewRenderer.cpp   2012-06-05 22:23:57 UTC (rev 
2782)
+++ trunk/source/main/gfx/PreviewRenderer.cpp   2012-06-06 18:34:34 UTC (rev 
2783)
@@ -44,7 +44,7 @@
 
 void PreviewRenderer::render()
 {
-       if (!CameraManager::singletonExists()) return;
+       if (!gEnv->cameraManager) return;
 
        LOG("starting previewRenderer...");
        Beam *truck = BeamFactory::getSingleton().getCurrentTruck();

Modified: trunk/source/main/gfx/camera/CameraBehaviorCharacter.cpp
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorCharacter.cpp    2012-06-05 
22:23:57 UTC (rev 2782)
+++ trunk/source/main/gfx/camera/CameraBehaviorCharacter.cpp    2012-06-06 
18:34:34 UTC (rev 2783)
@@ -31,7 +31,7 @@
        camPositionOffset = Vector3(0.0f, 1.1f, 0.0f);
 }
 
-void CameraBehaviorCharacter::update(const CameraManager::cameraContext_t &ctx)
+void CameraBehaviorCharacter::update(const CameraManager::CameraContext &ctx)
 {
        if(!gEnv->player) return;
        targetDirection = -gEnv->player->getRotation() - Radian(Math::HALF_PI);
@@ -40,7 +40,7 @@
        CameraBehaviorOrbit::update(ctx);
 }
 
-bool CameraBehaviorCharacter::mouseMoved(const CameraManager::cameraContext_t 
&ctx, const OIS::MouseEvent& _arg)
+bool CameraBehaviorCharacter::mouseMoved(const CameraManager::CameraContext 
&ctx, const OIS::MouseEvent& _arg)
 {
        if(!gEnv->player) return false;
        if ( camMode == CHARACTER_FIRST_PERSON )
@@ -66,11 +66,11 @@
        return CameraBehaviorOrbit::mouseMoved(ctx, _arg);
 }
 
-void CameraBehaviorCharacter::activate(const CameraManager::cameraContext_t 
&ctx, bool reset /* = true */)
+void CameraBehaviorCharacter::activate(const CameraManager::CameraContext 
&ctx, bool reset /* = true */)
 {
        if ( ctx.mCurrTruck )
        {
-               CameraManager::getSingleton().switchToNextBehavior();
+               gEnv->cameraManager->switchToNextBehavior();
                return;
        } else if ( reset )
        {
@@ -78,7 +78,7 @@
        }
 }
 
-void CameraBehaviorCharacter::reset(const CameraManager::cameraContext_t &ctx)
+void CameraBehaviorCharacter::reset(const CameraManager::CameraContext &ctx)
 {
        CameraBehaviorOrbit::reset(ctx);
 
@@ -97,7 +97,7 @@
        }
 }
 
-bool CameraBehaviorCharacter::switchBehavior(const 
CameraManager::cameraContext_t &ctx)
+bool CameraBehaviorCharacter::switchBehavior(const 
CameraManager::CameraContext &ctx)
 {
        if (++camMode < CHARACTER_END)
        {

Modified: trunk/source/main/gfx/camera/CameraBehaviorCharacter.h
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorCharacter.h      2012-06-05 
22:23:57 UTC (rev 2782)
+++ trunk/source/main/gfx/camera/CameraBehaviorCharacter.h      2012-06-06 
18:34:34 UTC (rev 2783)
@@ -30,14 +30,14 @@
 
        CameraBehaviorCharacter();
 
-       void update(const CameraManager::cameraContext_t &ctx);
+       void update(const CameraManager::CameraContext &ctx);
 
-       bool mouseMoved(const CameraManager::cameraContext_t &ctx, const 
OIS::MouseEvent& _arg);
+       bool mouseMoved(const CameraManager::CameraContext &ctx, const 
OIS::MouseEvent& _arg);
 
-       void activate(const CameraManager::cameraContext_t &ctx, bool reset = 
true);
-       void reset(const CameraManager::cameraContext_t &ctx);
+       void activate(const CameraManager::CameraContext &ctx, bool reset = 
true);
+       void reset(const CameraManager::CameraContext &ctx);
 
-       bool switchBehavior(const CameraManager::cameraContext_t &ctx);
+       bool switchBehavior(const CameraManager::CameraContext &ctx);
 
 protected:
 

Modified: trunk/source/main/gfx/camera/CameraBehaviorFixed.cpp
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorFixed.cpp        2012-06-05 
22:23:57 UTC (rev 2782)
+++ trunk/source/main/gfx/camera/CameraBehaviorFixed.cpp        2012-06-06 
18:34:34 UTC (rev 2783)
@@ -24,7 +24,7 @@
 
 using namespace Ogre;
 
-void CameraBehaviorFixed::activate(const CameraManager::cameraContext_t &ctx, 
bool reset /* = true */)
+void CameraBehaviorFixed::activate(const CameraManager::CameraContext &ctx, 
bool reset /* = true */)
 {
 #ifdef USE_MYGUI
        Console::getSingleton().putMessage(Console::CONSOLE_MSGTYPE_INFO, 
Console::CONSOLE_SYSTEM_NOTICE, _L("fixed free camera"), "camera_link.png", 
3000);

Modified: trunk/source/main/gfx/camera/CameraBehaviorFixed.h
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorFixed.h  2012-06-05 22:23:57 UTC 
(rev 2782)
+++ trunk/source/main/gfx/camera/CameraBehaviorFixed.h  2012-06-06 18:34:34 UTC 
(rev 2783)
@@ -22,23 +22,24 @@
 
 #include "RoRPrerequisites.h"
 
-#include "ICameraBehavior.h"
+#include "CameraManager.h"
+#include "IBehavior.h"
 
-class CameraBehaviorFixed : public ICameraBehavior
+class CameraBehaviorFixed : public IBehavior<CameraManager::CameraContext>
 {
 public:
 
-       void update(const CameraManager::cameraContext_t &ctx) {};
+       void update(const CameraManager::CameraContext &ctx) {};
 
-       bool mouseMoved(const CameraManager::cameraContext_t &ctx, const 
OIS::MouseEvent& _arg) { return false; };
-       bool mousePressed(const CameraManager::cameraContext_t &ctx, const 
OIS::MouseEvent& _arg, OIS::MouseButtonID _id) { return false; };
-       bool mouseReleased(const CameraManager::cameraContext_t &ctx, const 
OIS::MouseEvent& _arg, OIS::MouseButtonID _id) { return false; };
+       bool mouseMoved(const CameraManager::CameraContext &ctx, const 
OIS::MouseEvent& _arg) { return false; };
+       bool mousePressed(const CameraManager::CameraContext &ctx, const 
OIS::MouseEvent& _arg, OIS::MouseButtonID _id) { return false; };
+       bool mouseReleased(const CameraManager::CameraContext &ctx, const 
OIS::MouseEvent& _arg, OIS::MouseButtonID _id) { return false; };
 
-       void activate(const CameraManager::cameraContext_t &ctx, bool reset = 
true);
-       void deactivate(const CameraManager::cameraContext_t &ctx) {};
-       void reset(const CameraManager::cameraContext_t &ctx) {};
+       void activate(const CameraManager::CameraContext &ctx, bool reset = 
true);
+       void deactivate(const CameraManager::CameraContext &ctx) {};
+       void reset(const CameraManager::CameraContext &ctx) {};
 
-       bool switchBehavior(const CameraManager::cameraContext_t &ctx) { return 
true; };
+       bool switchBehavior(const CameraManager::CameraContext &ctx) { return 
true; };
 };
 
 #endif // __CAMERA_BEHAVIOR_FIXED_H_

Modified: trunk/source/main/gfx/camera/CameraBehaviorFree.cpp
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorFree.cpp 2012-06-05 22:23:57 UTC 
(rev 2782)
+++ trunk/source/main/gfx/camera/CameraBehaviorFree.cpp 2012-06-06 18:34:34 UTC 
(rev 2783)
@@ -29,7 +29,7 @@
 
 using namespace Ogre;
 
-void CameraBehaviorFree::update(const CameraManager::cameraContext_t &ctx)
+void CameraBehaviorFree::update(const CameraManager::CameraContext &ctx)
 {
        Degree mRotX(0.0f);
        Degree mRotY(0.0f);
@@ -110,7 +110,7 @@
        gEnv->mainCamera->setPosition(camPosition);
 }
 
-bool CameraBehaviorFree::mouseMoved(const CameraManager::cameraContext_t &ctx, 
const OIS::MouseEvent& _arg)
+bool CameraBehaviorFree::mouseMoved(const CameraManager::CameraContext &ctx, 
const OIS::MouseEvent& _arg)
 {
        const OIS::MouseState ms = _arg.state;
 
@@ -124,7 +124,7 @@
        return true;
 }
 
-void CameraBehaviorFree::activate(const CameraManager::cameraContext_t &ctx, 
bool reset /* = true */)
+void CameraBehaviorFree::activate(const CameraManager::CameraContext &ctx, 
bool reset /* = true */)
 {
 #ifdef USE_MYGUI
        Console::getSingleton().putMessage(Console::CONSOLE_MSGTYPE_INFO, 
Console::CONSOLE_SYSTEM_NOTICE, _L("free camera"), "camera_go.png", 3000);

Modified: trunk/source/main/gfx/camera/CameraBehaviorFree.h
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorFree.h   2012-06-05 22:23:57 UTC 
(rev 2782)
+++ trunk/source/main/gfx/camera/CameraBehaviorFree.h   2012-06-06 18:34:34 UTC 
(rev 2783)
@@ -22,23 +22,24 @@
 
 #include "RoRPrerequisites.h"
 
-#include "ICameraBehavior.h"
+#include "CameraManager.h"
+#include "IBehavior.h"
 
-class CameraBehaviorFree : public ICameraBehavior
+class CameraBehaviorFree : public IBehavior<CameraManager::CameraContext>
 {
 public:
 
-       void update(const CameraManager::cameraContext_t &ctx);
+       void update(const CameraManager::CameraContext &ctx);
 
-       bool mouseMoved(const CameraManager::cameraContext_t &ctx, const 
OIS::MouseEvent& _arg);
-       bool mousePressed(const CameraManager::cameraContext_t &ctx, const 
OIS::MouseEvent& _arg, OIS::MouseButtonID _id) { return false; };
-       bool mouseReleased(const CameraManager::cameraContext_t &ctx, const 
OIS::MouseEvent& _arg, OIS::MouseButtonID _id) { return false; };
+       bool mouseMoved(const CameraManager::CameraContext &ctx, const 
OIS::MouseEvent& _arg);
+       bool mousePressed(const CameraManager::CameraContext &ctx, const 
OIS::MouseEvent& _arg, OIS::MouseButtonID _id) { return false; };
+       bool mouseReleased(const CameraManager::CameraContext &ctx, const 
OIS::MouseEvent& _arg, OIS::MouseButtonID _id) { return false; };
 
-       void activate(const CameraManager::cameraContext_t &ctx, bool reset = 
true);
-       void deactivate(const CameraManager::cameraContext_t &ctx) {};
-       void reset(const CameraManager::cameraContext_t &ctx) {};
+       void activate(const CameraManager::CameraContext &ctx, bool reset = 
true);
+       void deactivate(const CameraManager::CameraContext &ctx) {};
+       void reset(const CameraManager::CameraContext &ctx) {};
 
-       bool switchBehavior(const CameraManager::cameraContext_t &ctx) { return 
true; };
+       bool switchBehavior(const CameraManager::CameraContext &ctx) { return 
true; };
 };
 
 #endif // __CAMERA_BEHAVIOR_FREE_H_

Modified: trunk/source/main/gfx/camera/CameraBehaviorIsometric.cpp
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorIsometric.cpp    2012-06-05 
22:23:57 UTC (rev 2782)
+++ trunk/source/main/gfx/camera/CameraBehaviorIsometric.cpp    2012-06-06 
18:34:34 UTC (rev 2783)
@@ -24,7 +24,7 @@
 
 using namespace Ogre;
 
-void CameraBehaviorIsometric::activate(const CameraManager::cameraContext_t 
&ctx, bool reset /* = true */)
+void CameraBehaviorIsometric::activate(const CameraManager::CameraContext 
&ctx, bool reset /* = true */)
 {
 #ifdef USE_MYGUI
        Console::getSingleton().putMessage(Console::CONSOLE_MSGTYPE_INFO, 
Console::CONSOLE_SYSTEM_NOTICE, _L("fixed free camera"), "camera_link.png", 
3000);

Modified: trunk/source/main/gfx/camera/CameraBehaviorIsometric.h
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorIsometric.h      2012-06-05 
22:23:57 UTC (rev 2782)
+++ trunk/source/main/gfx/camera/CameraBehaviorIsometric.h      2012-06-06 
18:34:34 UTC (rev 2783)
@@ -22,23 +22,24 @@
 
 #include "RoRPrerequisites.h"
 
-#include "ICameraBehavior.h"
+#include "CameraManager.h"
+#include "IBehavior.h"
 
-class CameraBehaviorIsometric : public ICameraBehavior
+class CameraBehaviorIsometric : public IBehavior<CameraManager::CameraContext>
 {
 public:
 
-       void update(const CameraManager::cameraContext_t &ctx) {};
+       void update(const CameraManager::CameraContext &ctx) {};
 
-       bool mouseMoved(const CameraManager::cameraContext_t &ctx, const 
OIS::MouseEvent& _arg) { return false; };
-       bool mousePressed(const CameraManager::cameraContext_t &ctx, const 
OIS::MouseEvent& _arg, OIS::MouseButtonID _id) { return false; };
-       bool mouseReleased(const CameraManager::cameraContext_t &ctx, const 
OIS::MouseEvent& _arg, OIS::MouseButtonID _id) { return false; };
+       bool mouseMoved(const CameraManager::CameraContext &ctx, const 
OIS::MouseEvent& _arg) { return false; };
+       bool mousePressed(const CameraManager::CameraContext &ctx, const 
OIS::MouseEvent& _arg, OIS::MouseButtonID _id) { return false; };
+       bool mouseReleased(const CameraManager::CameraContext &ctx, const 
OIS::MouseEvent& _arg, OIS::MouseButtonID _id) { return false; };
 
-       void activate(const CameraManager::cameraContext_t &ctx, bool reset = 
true);
-       void deactivate(const CameraManager::cameraContext_t &ctx) {};
-       void reset(const CameraManager::cameraContext_t &ctx) {};
+       void activate(const CameraManager::CameraContext &ctx, bool reset = 
true);
+       void deactivate(const CameraManager::CameraContext &ctx) {};
+       void reset(const CameraManager::CameraContext &ctx) {};
 
-       bool switchBehavior(const CameraManager::cameraContext_t &ctx) { return 
true; };
+       bool switchBehavior(const CameraManager::CameraContext &ctx) { return 
true; };
 };
 
 #endif // __CAMERA_BEHAVIOR_ISOMETRIC_H_

Modified: trunk/source/main/gfx/camera/CameraBehaviorOrbit.cpp
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorOrbit.cpp        2012-06-05 
22:23:57 UTC (rev 2782)
+++ trunk/source/main/gfx/camera/CameraBehaviorOrbit.cpp        2012-06-06 
18:34:34 UTC (rev 2783)
@@ -41,7 +41,7 @@
 {
 }
 
-void CameraBehaviorOrbit::update(const CameraManager::cameraContext_t &ctx)
+void CameraBehaviorOrbit::update(const CameraManager::CameraContext &ctx)
 {
        if ( INPUTENGINE.getEventBoolValueBounce(EV_CAMERA_LOOKBACK) )
        {
@@ -136,7 +136,7 @@
        gEnv->mainCamera->lookAt(camLookAt);
 }
 
-bool CameraBehaviorOrbit::mouseMoved(const CameraManager::cameraContext_t 
&ctx, const OIS::MouseEvent& _arg)
+bool CameraBehaviorOrbit::mouseMoved(const CameraManager::CameraContext &ctx, 
const OIS::MouseEvent& _arg)
 {
        const OIS::MouseState ms = _arg.state;
 
@@ -151,7 +151,7 @@
        return false;
 }
 
-void CameraBehaviorOrbit::reset(const CameraManager::cameraContext_t &ctx)
+void CameraBehaviorOrbit::reset(const CameraManager::CameraContext &ctx)
 {
        camRotX = 0.0f;
        camRotY = 0.3f;

Modified: trunk/source/main/gfx/camera/CameraBehaviorOrbit.h
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorOrbit.h  2012-06-05 22:23:57 UTC 
(rev 2782)
+++ trunk/source/main/gfx/camera/CameraBehaviorOrbit.h  2012-06-06 18:34:34 UTC 
(rev 2783)
@@ -22,23 +22,24 @@
 
 #include "RoRPrerequisites.h"
 
-#include "ICameraBehavior.h"
+#include "CameraManager.h"
+#include "IBehavior.h"
 
-class CameraBehaviorOrbit : public ICameraBehavior
+class CameraBehaviorOrbit : public IBehavior<CameraManager::CameraContext>
 {
 public:
 
        CameraBehaviorOrbit();
 
-       void update(const CameraManager::cameraContext_t &ctx);
+       void update(const CameraManager::CameraContext &ctx);
 
-       void activate(const CameraManager::cameraContext_t &ctx, bool reset = 
true) {};
-       void deactivate(const CameraManager::cameraContext_t &ctx) {};
-       void reset(const CameraManager::cameraContext_t &ctx);
+       void activate(const CameraManager::CameraContext &ctx, bool reset = 
true) {};
+       void deactivate(const CameraManager::CameraContext &ctx) {};
+       void reset(const CameraManager::CameraContext &ctx);
 
-       bool mouseMoved(const CameraManager::cameraContext_t &ctx, const 
OIS::MouseEvent& _arg);
-       bool mousePressed(const CameraManager::cameraContext_t &ctx, const 
OIS::MouseEvent& _arg, OIS::MouseButtonID _id) { return false; };
-       bool mouseReleased(const CameraManager::cameraContext_t &ctx, const 
OIS::MouseEvent& _arg, OIS::MouseButtonID _id) { return false; };
+       bool mouseMoved(const CameraManager::CameraContext &ctx, const 
OIS::MouseEvent& _arg);
+       bool mousePressed(const CameraManager::CameraContext &ctx, const 
OIS::MouseEvent& _arg, OIS::MouseButtonID _id) { return false; };
+       bool mouseReleased(const CameraManager::CameraContext &ctx, const 
OIS::MouseEvent& _arg, OIS::MouseButtonID _id) { return false; };
 
 protected:
 

Modified: trunk/source/main/gfx/camera/CameraBehaviorStatic.cpp
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorStatic.cpp       2012-06-05 
22:23:57 UTC (rev 2782)
+++ trunk/source/main/gfx/camera/CameraBehaviorStatic.cpp       2012-06-06 
18:34:34 UTC (rev 2783)
@@ -28,7 +28,7 @@
 
 using namespace Ogre;
 
-void CameraBehaviorStatic::update(const CameraManager::cameraContext_t &ctx)
+void CameraBehaviorStatic::update(const CameraManager::CameraContext &ctx)
 {
        Vector3 lookAt(Vector3::ZERO);
        Vector3 camPosition(Vector3::ZERO);
@@ -68,7 +68,7 @@
        }
 }
 
-void CameraBehaviorStatic::activate(const CameraManager::cameraContext_t &ctx, 
bool reset /* = true */)
+void CameraBehaviorStatic::activate(const CameraManager::CameraContext &ctx, 
bool reset /* = true */)
 {
        fovPreviously = gEnv->mainCamera->getFOVy();
 
@@ -78,7 +78,7 @@
        }
 }
 
-void CameraBehaviorStatic::deactivate(const CameraManager::cameraContext_t 
&ctx)
+void CameraBehaviorStatic::deactivate(const CameraManager::CameraContext &ctx)
 {
        gEnv->mainCamera->setFOVy(fovPreviously);
 

Modified: trunk/source/main/gfx/camera/CameraBehaviorStatic.h
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorStatic.h 2012-06-05 22:23:57 UTC 
(rev 2782)
+++ trunk/source/main/gfx/camera/CameraBehaviorStatic.h 2012-06-06 18:34:34 UTC 
(rev 2783)
@@ -22,23 +22,24 @@
 
 #include "RoRPrerequisites.h"
 
-#include "ICameraBehavior.h"
+#include "CameraManager.h"
+#include "IBehavior.h"
 
-class CameraBehaviorStatic : public ICameraBehavior
+class CameraBehaviorStatic : public IBehavior<CameraManager::CameraContext>
 {
 public:
 
-       void update(const CameraManager::cameraContext_t &ctx);
+       void update(const CameraManager::CameraContext &ctx);
 
-       bool mouseMoved(const CameraManager::cameraContext_t &ctx, const 
OIS::MouseEvent& _arg) { return false; };
-       bool mousePressed(const CameraManager::cameraContext_t &ctx, const 
OIS::MouseEvent& _arg, OIS::MouseButtonID _id) { return false; };
-       bool mouseReleased(const CameraManager::cameraContext_t &ctx, const 
OIS::MouseEvent& _arg, OIS::MouseButtonID _id) { return false; };
+       bool mouseMoved(const CameraManager::CameraContext &ctx, const 
OIS::MouseEvent& _arg) { return false; };
+       bool mousePressed(const CameraManager::CameraContext &ctx, const 
OIS::MouseEvent& _arg, OIS::MouseButtonID _id) { return false; };
+       bool mouseReleased(const CameraManager::CameraContext &ctx, const 
OIS::MouseEvent& _arg, OIS::MouseButtonID _id) { return false; };
 
-       void activate(const CameraManager::cameraContext_t &ctx, bool reset = 
true);
-       void deactivate(const CameraManager::cameraContext_t &ctx);
-       void reset(const CameraManager::cameraContext_t &ctx) {};
+       void activate(const CameraManager::CameraContext &ctx, bool reset = 
true);
+       void deactivate(const CameraManager::CameraContext &ctx);
+       void reset(const CameraManager::CameraContext &ctx) {};
 
-       bool switchBehavior(const CameraManager::cameraContext_t &ctx) { return 
true; };
+       bool switchBehavior(const CameraManager::CameraContext &ctx) { return 
true; };
 
 protected:
 

Modified: trunk/source/main/gfx/camera/CameraBehaviorVehicle.cpp
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorVehicle.cpp      2012-06-05 
22:23:57 UTC (rev 2782)
+++ trunk/source/main/gfx/camera/CameraBehaviorVehicle.cpp      2012-06-06 
18:34:34 UTC (rev 2783)
@@ -34,7 +34,7 @@
        }
 }
 
-void CameraBehaviorVehicle::update(const CameraManager::cameraContext_t &ctx)
+void CameraBehaviorVehicle::update(const CameraManager::CameraContext &ctx)
 {
        Vector3 dir = 
(ctx.mCurrTruck->nodes[ctx.mCurrTruck->cameranodepos[0]].smoothpos
                                 - 
ctx.mCurrTruck->nodes[ctx.mCurrTruck->cameranodedir[0]].smoothpos).normalisedCopy();
@@ -56,11 +56,11 @@
        CameraBehaviorOrbit::update(ctx);
 }
 
-void CameraBehaviorVehicle::activate(const CameraManager::cameraContext_t 
&ctx, bool reset /* = true */)
+void CameraBehaviorVehicle::activate(const CameraManager::CameraContext &ctx, 
bool reset /* = true */)
 {
        if ( !ctx.mCurrTruck )
        {
-               CameraManager::getSingleton().switchToNextBehavior();
+               gEnv->cameraManager->switchToNextBehavior();
                return;
        } else if ( reset )
        {
@@ -68,7 +68,7 @@
        }
 }
 
-void CameraBehaviorVehicle::reset(const CameraManager::cameraContext_t &ctx)
+void CameraBehaviorVehicle::reset(const CameraManager::CameraContext &ctx)
 {
        CameraBehaviorOrbit::reset(ctx);
        camRotY = 0.35f;

Modified: trunk/source/main/gfx/camera/CameraBehaviorVehicle.h
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorVehicle.h        2012-06-05 
22:23:57 UTC (rev 2782)
+++ trunk/source/main/gfx/camera/CameraBehaviorVehicle.h        2012-06-06 
18:34:34 UTC (rev 2783)
@@ -30,12 +30,12 @@
 
        CameraBehaviorVehicle();
 
-       void update(const CameraManager::cameraContext_t &ctx);
+       void update(const CameraManager::CameraContext &ctx);
 
-       void activate(const CameraManager::cameraContext_t &ctx, bool reset = 
true);
-       void reset(const CameraManager::cameraContext_t &ctx);
+       void activate(const CameraManager::CameraContext &ctx, bool reset = 
true);
+       void reset(const CameraManager::CameraContext &ctx);
 
-       bool switchBehavior(const CameraManager::cameraContext_t &ctx) { return 
true; };
+       bool switchBehavior(const CameraManager::CameraContext &ctx) { return 
true; };
 
 protected:
 

Modified: trunk/source/main/gfx/camera/CameraBehaviorVehicleCineCam.cpp
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorVehicleCineCam.cpp       
2012-06-05 22:23:57 UTC (rev 2782)
+++ trunk/source/main/gfx/camera/CameraBehaviorVehicleCineCam.cpp       
2012-06-06 18:34:34 UTC (rev 2783)
@@ -31,7 +31,7 @@
 {
 }
 
-void CameraBehaviorVehicleCineCam::update(const CameraManager::cameraContext_t 
&ctx)
+void CameraBehaviorVehicleCineCam::update(const CameraManager::CameraContext 
&ctx)
 {
        CameraBehaviorOrbit::update(ctx);
 
@@ -56,11 +56,11 @@
        gEnv->mainCamera->setOrientation(orientation);
 }
 
-void CameraBehaviorVehicleCineCam::activate(const 
CameraManager::cameraContext_t &ctx, bool reset /* = true */)
+void CameraBehaviorVehicleCineCam::activate(const CameraManager::CameraContext 
&ctx, bool reset /* = true */)
 {
        if ( !ctx.mCurrTruck || ctx.mCurrTruck->freecinecamera <= 0 )
        {
-               CameraManager::getSingleton().switchToNextBehavior();
+               gEnv->cameraManager->switchToNextBehavior();
                return;
        } else if ( reset )
        {
@@ -86,7 +86,7 @@
        ctx.mCurrTruck->changedCamera();
 }
 
-void CameraBehaviorVehicleCineCam::deactivate(const 
CameraManager::cameraContext_t &ctx)
+void CameraBehaviorVehicleCineCam::deactivate(const 
CameraManager::CameraContext &ctx)
 {
        // Do not use ctx.mCurrTruck in here (could be null)
        if ( !currTruck )
@@ -110,14 +110,14 @@
        currTruck = 0;
 }
 
-void CameraBehaviorVehicleCineCam::reset(const CameraManager::cameraContext_t 
&ctx)
+void CameraBehaviorVehicleCineCam::reset(const CameraManager::CameraContext 
&ctx)
 {
        CameraBehaviorOrbit::reset(ctx);
        camRotY = Degree(DEFAULT_INTERNAL_CAM_PITCH);
        gEnv->mainCamera->setFOVy(ctx.fovInternal);
 }
 
-bool CameraBehaviorVehicleCineCam::switchBehavior(const 
CameraManager::cameraContext_t &ctx)
+bool CameraBehaviorVehicleCineCam::switchBehavior(const 
CameraManager::CameraContext &ctx)
 {
        if ( ctx.mCurrTruck && ctx.mCurrTruck->currentcamera < 
ctx.mCurrTruck->freecinecamera-1 )
        {

Modified: trunk/source/main/gfx/camera/CameraBehaviorVehicleCineCam.h
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorVehicleCineCam.h 2012-06-05 
22:23:57 UTC (rev 2782)
+++ trunk/source/main/gfx/camera/CameraBehaviorVehicleCineCam.h 2012-06-06 
18:34:34 UTC (rev 2783)
@@ -23,6 +23,7 @@
 #include "RoRPrerequisites.h"
 
 #include "CameraBehaviorVehicle.h"
+#include "CameraManager.h"
 
 class CameraBehaviorVehicleCineCam : public CameraBehaviorVehicle
 {
@@ -30,13 +31,13 @@
 
        CameraBehaviorVehicleCineCam();
        
-       void update(const CameraManager::cameraContext_t &ctx);
+       void update(const CameraManager::CameraContext &ctx);
 
-       void activate(const CameraManager::cameraContext_t &ctx, bool reset = 
true);
-       void deactivate(const CameraManager::cameraContext_t &ctx);
-       void reset(const CameraManager::cameraContext_t &ctx);
+       void activate(const CameraManager::CameraContext &ctx, bool reset = 
true);
+       void deactivate(const CameraManager::CameraContext &ctx);
+       void reset(const CameraManager::CameraContext &ctx);
 
-       bool switchBehavior(const CameraManager::cameraContext_t &ctx);
+       bool switchBehavior(const CameraManager::CameraContext &ctx);
 
 protected:
 

Modified: trunk/source/main/gfx/camera/CameraBehaviorVehicleSpline.cpp
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorVehicleSpline.cpp        
2012-06-05 22:23:57 UTC (rev 2782)
+++ trunk/source/main/gfx/camera/CameraBehaviorVehicleSpline.cpp        
2012-06-06 18:34:34 UTC (rev 2783)
@@ -38,11 +38,11 @@
 {
 }
 
-void CameraBehaviorVehicleSpline::update(const CameraManager::cameraContext_t 
&ctx)
+void CameraBehaviorVehicleSpline::update(const CameraManager::CameraContext 
&ctx)
 {
        if ( ctx.mCurrTruck->free_camerarail <= 0 )
        {
-               CameraManager::getSingleton().switchToNextBehavior();
+               gEnv->cameraManager->switchToNextBehavior();
                return;
        }
 
@@ -97,7 +97,7 @@
        CameraBehaviorOrbit::update(ctx);
 }
 
-bool CameraBehaviorVehicleSpline::mouseMoved(const 
CameraManager::cameraContext_t &ctx, const OIS::MouseEvent& _arg)
+bool CameraBehaviorVehicleSpline::mouseMoved(const 
CameraManager::CameraContext &ctx, const OIS::MouseEvent& _arg)
 {
        const OIS::MouseState ms = _arg.state;
 
@@ -151,11 +151,11 @@
        }
 }
 
-void CameraBehaviorVehicleSpline::activate(const 
CameraManager::cameraContext_t &ctx, bool reset /* = true */)
+void CameraBehaviorVehicleSpline::activate(const CameraManager::CameraContext 
&ctx, bool reset /* = true */)
 {
        if ( !ctx.mCurrTruck || ctx.mCurrTruck->free_camerarail <= 0 )
        {
-               CameraManager::getSingleton().switchToNextBehavior();
+               gEnv->cameraManager->switchToNextBehavior();
                return;
        } else if ( reset )
        {
@@ -164,7 +164,7 @@
        }
 }
 
-void CameraBehaviorVehicleSpline::reset(const CameraManager::cameraContext_t 
&ctx)
+void CameraBehaviorVehicleSpline::reset(const CameraManager::CameraContext 
&ctx)
 {
        CameraBehaviorOrbit::reset(ctx);
 
@@ -173,7 +173,7 @@
        splinePos = 0.5f;
 }
 
-void CameraBehaviorVehicleSpline::createSpline(const 
CameraManager::cameraContext_t &ctx)
+void CameraBehaviorVehicleSpline::createSpline(const 
CameraManager::CameraContext &ctx)
 {
        splineClosed = false;
        splineLength = 1.0f;

Modified: trunk/source/main/gfx/camera/CameraBehaviorVehicleSpline.h
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorVehicleSpline.h  2012-06-05 
22:23:57 UTC (rev 2782)
+++ trunk/source/main/gfx/camera/CameraBehaviorVehicleSpline.h  2012-06-06 
18:34:34 UTC (rev 2783)
@@ -30,14 +30,14 @@
 
        CameraBehaviorVehicleSpline();
 
-       void update(const CameraManager::cameraContext_t &ctx);
+       void update(const CameraManager::CameraContext &ctx);
        
-       bool mouseMoved(const CameraManager::cameraContext_t &ctx, const 
OIS::MouseEvent& _arg);
+       bool mouseMoved(const CameraManager::CameraContext &ctx, const 
OIS::MouseEvent& _arg);
 
-       void activate(const CameraManager::cameraContext_t &ctx, bool reset = 
true);
-       void reset(const CameraManager::cameraContext_t &ctx);
+       void activate(const CameraManager::CameraContext &ctx, bool reset = 
true);
+       void reset(const CameraManager::CameraContext &ctx);
 
-       void createSpline(const CameraManager::cameraContext_t &ctx);
+       void createSpline(const CameraManager::CameraContext &ctx);
        void updateSpline();
        void updateSplineDisplay();
 

Modified: trunk/source/main/gfx/camera/CameraManager.cpp
===================================================================
--- trunk/source/main/gfx/camera/CameraManager.cpp      2012-06-05 22:23:57 UTC 
(rev 2782)
+++ trunk/source/main/gfx/camera/CameraManager.cpp      2012-06-06 18:34:34 UTC 
(rev 2783)
@@ -35,8 +35,6 @@
 #include "CameraBehaviorVehicleSpline.h"
 #include "CameraBehaviorIsometric.h"
 
-#include "ICameraBehavior.h"
-
 #include <stack>
 
 using namespace Ogre;
@@ -49,7 +47,7 @@
        , mRotScale(0.1f)
        , mRotateSpeed(100.0f)
 {
-       setSingleton(this);
+       gEnv->cameraManager = this;
 
        createGlobalBehaviors();
 
@@ -65,10 +63,7 @@
 
 CameraManager::~CameraManager()
 {
-       for (std::map <int , ICameraBehavior *>::iterator it = 
globalBehaviors.begin(); it != globalBehaviors.end(); ++it)
-       {
-               delete it->second;
-       }
+       std::for_each(globalBehaviors.begin(), globalBehaviors.end(), 
[&](std::pair <int, IBehavior<CameraContext> *> p) { delete p.second; });
 
        globalBehaviors.clear();
 }
@@ -200,21 +195,21 @@
        return dynamic_cast<CameraBehaviorVehicle*>(currentBehavior) != 0;
 }
 
-int CameraManager::getCameraBehavior()
+int CameraManager::getCurrentBehavior()
 {
        return currentBehaviorID;
 }
 
 void CameraManager::createGlobalBehaviors()
 {
-       globalBehaviors.insert(std::pair<int, 
ICameraBehavior*>(CAMERA_BEHAVIOR_CHARACTER, new CameraBehaviorCharacter()));
-       globalBehaviors.insert(std::pair<int, 
ICameraBehavior*>(CAMERA_BEHAVIOR_STATIC, new CameraBehaviorStatic()));
-       globalBehaviors.insert(std::pair<int, 
ICameraBehavior*>(CAMERA_BEHAVIOR_VEHICLE, new CameraBehaviorVehicle()));
-       globalBehaviors.insert(std::pair<int, 
ICameraBehavior*>(CAMERA_BEHAVIOR_VEHICLE_SPLINE, new 
CameraBehaviorVehicleSpline()));
-       globalBehaviors.insert(std::pair<int, 
ICameraBehavior*>(CAMERA_BEHAVIOR_VEHICLE_CINECAM, new 
CameraBehaviorVehicleCineCam()));
-       globalBehaviors.insert(std::pair<int, 
ICameraBehavior*>(CAMERA_BEHAVIOR_FREE, new CameraBehaviorFree()));
-       globalBehaviors.insert(std::pair<int, 
ICameraBehavior*>(CAMERA_BEHAVIOR_FIXED, new CameraBehaviorFixed()));
-       globalBehaviors.insert(std::pair<int, 
ICameraBehavior*>(CAMERA_BEHAVIOR_ISOMETRIC, new CameraBehaviorIsometric()));
+       globalBehaviors.insert(std::pair<int, 
IBehavior<CameraContext>*>(CAMERA_BEHAVIOR_CHARACTER, new 
CameraBehaviorCharacter()));
+       globalBehaviors.insert(std::pair<int, 
IBehavior<CameraContext>*>(CAMERA_BEHAVIOR_STATIC, new CameraBehaviorStatic()));
+       globalBehaviors.insert(std::pair<int, 
IBehavior<CameraContext>*>(CAMERA_BEHAVIOR_VEHICLE, new 
CameraBehaviorVehicle()));
+       globalBehaviors.insert(std::pair<int, 
IBehavior<CameraContext>*>(CAMERA_BEHAVIOR_VEHICLE_SPLINE, new 
CameraBehaviorVehicleSpline()));
+       globalBehaviors.insert(std::pair<int, 
IBehavior<CameraContext>*>(CAMERA_BEHAVIOR_VEHICLE_CINECAM, new 
CameraBehaviorVehicleCineCam()));
+       globalBehaviors.insert(std::pair<int, 
IBehavior<CameraContext>*>(CAMERA_BEHAVIOR_FREE, new CameraBehaviorFree()));
+       globalBehaviors.insert(std::pair<int, 
IBehavior<CameraContext>*>(CAMERA_BEHAVIOR_FIXED, new CameraBehaviorFixed()));
+       globalBehaviors.insert(std::pair<int, 
IBehavior<CameraContext>*>(CAMERA_BEHAVIOR_ISOMETRIC, new 
CameraBehaviorIsometric()));
 }
 
 bool CameraManager::mouseMoved(const OIS::MouseEvent& _arg)

Modified: trunk/source/main/gfx/camera/CameraManager.h
===================================================================
--- trunk/source/main/gfx/camera/CameraManager.h        2012-06-05 22:23:57 UTC 
(rev 2782)
+++ trunk/source/main/gfx/camera/CameraManager.h        2012-06-06 18:34:34 UTC 
(rev 2783)
@@ -22,10 +22,12 @@
 
 #include "RoRPrerequisites.h"
 
-#include "OIS.h"
-#include "Singleton.h"
+#include "IBehavior.h"
+#include "IManager.h"
 
-class CameraManager : public RoRSingletonNoCreation < CameraManager >, public 
ZeroedMemoryAllocator
+#include <OIS.h>
+
+class CameraManager : public IManager
 {
        friend class SceneMouse;
 
@@ -34,7 +36,10 @@
        CameraManager(OverlayWrapper *ow, DOFManager *dof);
        ~CameraManager();
 
-       typedef struct cameraContext {
+       class CameraContext
+       {
+       public:
+
                Beam *mCurrTruck;
                DOFManager *mDof;
                Ogre::Degree mRotScale;
@@ -43,7 +48,7 @@
                Ogre::Real mTransScale;
                Ogre::Radian fovInternal;
                Ogre::Radian fovExternal;
-       } cameraContext_t;
+       };
 
        enum CameraBehaviors {
                CAMERA_BEHAVIOR_CHARACTER=0,
@@ -68,19 +73,19 @@
        bool hasActiveCharacterBehavior();
        bool hasActiveVehicleBehavior();
 
-       int getCameraBehavior();
+       int getCurrentBehavior();
 
 protected:
 
-       cameraContext_t ctx;
+       CameraContext ctx;
 
        float mTransScale, mTransSpeed;
        float mRotScale, mRotateSpeed;
 
        int currentBehaviorID;
-       ICameraBehavior *currentBehavior;
+       IBehavior<CameraContext> *currentBehavior;
 
-       std::map <int , ICameraBehavior *> globalBehaviors;
+       std::map <int , IBehavior<CameraContext> *> globalBehaviors;
 
        void createGlobalBehaviors();
 

Deleted: trunk/source/main/gfx/camera/ICameraBehavior.h
===================================================================
--- trunk/source/main/gfx/camera/ICameraBehavior.h      2012-06-05 22:23:57 UTC 
(rev 2782)
+++ trunk/source/main/gfx/camera/ICameraBehavior.h      2012-06-06 18:34:34 UTC 
(rev 2783)
@@ -1,47 +0,0 @@
-/*
-This source file is part of Rigs of Rods
-Copyright 2005-2012 Pierre-Michel Ricordel
-Copyright 2007-2012 Thomas Fischer
-
-For more information, see http://www.rigsofrods.com/
-
-Rigs of Rods is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License version 3, as
-published by the Free Software Foundation.
-
-Rigs of Rods is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with Rigs of Rods.  If not, see <http://www.gnu.org/licenses/>.
-*/
-#ifndef __I_CAMERA_BEHAVIOR_H_
-#define __I_CAMERA_BEHAVIOR_H_
-
-#include "RoRPrerequisites.h"
-
-#include "CameraManager.h"
-#include <OIS.h>
-
-class ICameraBehavior : public ZeroedMemoryAllocator 
-{
-public:
-
-       virtual ~ICameraBehavior() {}
-
-       virtual void update(const CameraManager::cameraContext_t &ctx) = 0;
-
-       virtual bool mouseMoved(const CameraManager::cameraContext_t &ctx, 
const OIS::MouseEvent& _arg) = 0;
-       virtual bool mousePressed(const CameraManager::cameraContext_t &ctx, 
const OIS::MouseEvent& _arg, OIS::MouseButtonID _id) = 0;
-       virtual bool mouseReleased(const CameraManager::cameraContext_t &ctx, 
const OIS::MouseEvent& _arg, OIS::MouseButtonID _id) = 0;
-
-       virtual void activate(const CameraManager::cameraContext_t &ctx, bool 
reset = true) = 0;
-       virtual void deactivate(const CameraManager::cameraContext_t &ctx) = 0;
-       virtual void reset(const CameraManager::cameraContext_t &ctx) = 0;
-
-       virtual bool switchBehavior(const CameraManager::cameraContext_t &ctx) 
= 0;
-};
-
-#endif // __I_CAMERA_BEHAVIOR_H_

Modified: trunk/source/main/gui/GUIMenu.cpp
===================================================================
--- trunk/source/main/gui/GUIMenu.cpp   2012-06-05 22:23:57 UTC (rev 2782)
+++ trunk/source/main/gui/GUIMenu.cpp   2012-06-06 18:34:34 UTC (rev 2783)
@@ -345,7 +345,7 @@
        } else if (miname == _L("Terrain Editor Mode"))
        {
                gEnv->frameListener->loading_state = 
RoRFrameListener::TERRAIN_EDITOR;
-               
CameraManager::getSingleton().switchBehavior(CameraManager::CAMERA_BEHAVIOR_ISOMETRIC,
 true);
+               
gEnv->cameraManager->switchBehavior(CameraManager::CAMERA_BEHAVIOR_ISOMETRIC, 
true);
                
 
        } else if (miname == _L("remove current Vehicle"))

Modified: trunk/source/main/physics/Beam.cpp
===================================================================
--- trunk/source/main/physics/Beam.cpp  2012-06-05 22:23:57 UTC (rev 2782)
+++ trunk/source/main/physics/Beam.cpp  2012-06-06 18:34:34 UTC (rev 2783)
@@ -5667,9 +5667,9 @@
 void Beam::updateAI(float dt)
 {
        if (driveable != TRUCK ||
-               !CameraManager::singletonExists() ||
-               !CameraManager::getSingleton().hasActiveBehavior() ||
-                CameraManager::getSingleton().gameControlsEnabled())
+               !gEnv->cameraManager ||
+               !gEnv->cameraManager->hasActiveBehavior() ||
+                gEnv->cameraManager->gameControlsEnabled())
        {
                return;
        }

Added: trunk/source/main/utils/IBehavior.h
===================================================================
--- trunk/source/main/utils/IBehavior.h                         (rev 0)
+++ trunk/source/main/utils/IBehavior.h 2012-06-06 18:34:34 UTC (rev 2783)
@@ -0,0 +1,47 @@
+/*
+This source file is part of Rigs of Rods
+Copyright 2005-2012 Pierre-Michel Ricordel
+Copyright 2007-2012 Thomas Fischer
+
+For more information, see http://www.rigsofrods.com/
+
+Rigs of Rods is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License version 3, as
+published by the Free Software Foundation.
+
+Rigs of Rods is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Rigs of Rods.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#ifndef __I_Behavior_H_
+#define __I_Behavior_H_
+
+#include "RoRPrerequisites.h"
+
+#include <OIS.h>
+
+template<class context>
+class IBehavior : public ZeroedMemoryAllocator
+{
+public:
+
+       virtual ~IBehavior() {}
+
+       virtual void update(const context &ctx) = 0;
+
+       virtual bool mouseMoved(const context &ctx, const OIS::MouseEvent& 
_arg) = 0;
+       virtual bool mousePressed(const context &ctx, const OIS::MouseEvent& 
_arg, OIS::MouseButtonID _id) = 0;
+       virtual bool mouseReleased(const context &ctx, const OIS::MouseEvent& 
_arg, OIS::MouseButtonID _id) = 0;
+
+       virtual void activate(const context &ctx, bool reset = true) = 0;
+       virtual void deactivate(const context &ctx) = 0;
+       virtual void reset(const context &ctx) = 0;
+
+       virtual bool switchBehavior(const context &ctx) = 0;
+};
+
+#endif // __I_Behavior_H_


Property changes on: trunk/source/main/utils/IBehavior.h
___________________________________________________________________
Added: svn:eol-style
   + native

Added: trunk/source/main/utils/IManager.h
===================================================================
--- trunk/source/main/utils/IManager.h                          (rev 0)
+++ trunk/source/main/utils/IManager.h  2012-06-06 18:34:34 UTC (rev 2783)
@@ -0,0 +1,44 @@
+/*
+This source file is part of Rigs of Rods
+Copyright 2005-2012 Pierre-Michel Ricordel
+Copyright 2007-2012 Thomas Fischer
+
+For more information, see http://www.rigsofrods.com/
+
+Rigs of Rods is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License version 3, as
+published by the Free Software Foundation.
+
+Rigs of Rods is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Rigs of Rods.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#ifndef __I_Manager_H_
+#define __I_Manager_H_
+
+#include "RoRPrerequisites.h"
+
+class IManager : public ZeroedMemoryAllocator
+{
+public:
+
+       virtual ~IManager() {}
+
+       virtual void update(float dt) = 0;
+
+       virtual void switchBehavior(int newBehavior, bool reset = true) = 0;
+       virtual void switchToNextBehavior(bool force = true) = 0;
+       virtual void toggleBehavior(int behavior) = 0;
+
+       virtual bool hasActiveBehavior() = 0;
+       virtual bool hasActiveCharacterBehavior() = 0;
+       virtual bool hasActiveVehicleBehavior() = 0;
+
+       virtual int getCurrentBehavior() = 0;
+};
+
+#endif // __I_Manager_H_


Property changes on: trunk/source/main/utils/IManager.h
___________________________________________________________________
Added: svn:eol-style
   + native

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Rigsofrods-devel mailing list
Rigsofrods-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rigsofrods-devel

Reply via email to