Revision: 2470
http://rigsofrods.svn.sourceforge.net/rigsofrods/?rev=2470&view=rev
Author: rorthomas
Date: 2012-03-16 06:46:40 +0000 (Fri, 16 Mar 2012)
Log Message:
-----------
improved camera system
Modified Paths:
--------------
trunk/source/main/gfx/camera/CameraBehavior.h
trunk/source/main/gfx/camera/CameraBehaviorFree.cpp
trunk/source/main/gfx/camera/CameraBehaviorFree.h
trunk/source/main/gfx/camera/CameraBehaviorOrbit.cpp
trunk/source/main/gfx/camera/CameraBehaviorOrbit.h
trunk/source/main/gfx/camera/CameraBehaviorWheelChase.cpp
trunk/source/main/gfx/camera/CameraBehaviorWheelChase.h
trunk/source/main/gfx/camera/CameraManager.cpp
trunk/source/main/gfx/camera/CameraManager.h
Modified: trunk/source/main/gfx/camera/CameraBehavior.h
===================================================================
--- trunk/source/main/gfx/camera/CameraBehavior.h 2012-03-15 22:03:08 UTC
(rev 2469)
+++ trunk/source/main/gfx/camera/CameraBehavior.h 2012-03-16 06:46:40 UTC
(rev 2470)
@@ -44,8 +44,8 @@
virtual bool mousePressed(const OIS::MouseEvent& _arg,
OIS::MouseButtonID _id) = 0;
virtual bool mouseReleased(const OIS::MouseEvent& _arg,
OIS::MouseButtonID _id) = 0;
- virtual void activate() = 0;
- virtual void deactivate() = 0;
+ virtual void activate(cameraContext_t &ctx) = 0;
+ virtual void deactivate(cameraContext_t &ctx) = 0;
virtual bool allowInteraction() = 0;
};
Modified: trunk/source/main/gfx/camera/CameraBehaviorFree.cpp
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorFree.cpp 2012-03-15 22:03:08 UTC
(rev 2469)
+++ trunk/source/main/gfx/camera/CameraBehaviorFree.cpp 2012-03-16 06:46:40 UTC
(rev 2470)
@@ -28,7 +28,7 @@
using namespace Ogre;
-void CameraBehaviorFree::activate()
+void CameraBehaviorFree::activate(cameraContext_t &ctx)
{
// enter free camera mode
DOFManager *dof = CameraManager::getSingleton().getDOFManager();
@@ -43,7 +43,7 @@
#endif // USE_MYGUI
}
-void CameraBehaviorFree::deactivate()
+void CameraBehaviorFree::deactivate(cameraContext_t &ctx)
{
// change back to normal camera
DOFManager *dof = CameraManager::getSingleton().getDOFManager();
Modified: trunk/source/main/gfx/camera/CameraBehaviorFree.h
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorFree.h 2012-03-15 22:03:08 UTC
(rev 2469)
+++ trunk/source/main/gfx/camera/CameraBehaviorFree.h 2012-03-16 06:46:40 UTC
(rev 2470)
@@ -26,8 +26,8 @@
class CameraBehaviorFree : public CameraBehavior
{
public:
- void activate();
- void deactivate();
+ void activate(cameraContext_t &ctx);
+ void deactivate(cameraContext_t &ctx);
void update(cameraContext_t &ctx);
Modified: trunk/source/main/gfx/camera/CameraBehaviorOrbit.cpp
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorOrbit.cpp 2012-03-15
22:03:08 UTC (rev 2469)
+++ trunk/source/main/gfx/camera/CameraBehaviorOrbit.cpp 2012-03-16
06:46:40 UTC (rev 2470)
@@ -44,7 +44,7 @@
}
-void CameraBehaviorOrbit::activate()
+void CameraBehaviorOrbit::activate(cameraContext_t &ctx)
{
float fov = FSETTING("FOV External", 60);
@@ -61,7 +61,7 @@
cam->setFOVy(Degree(fov));
}
-void CameraBehaviorOrbit::deactivate()
+void CameraBehaviorOrbit::deactivate(cameraContext_t &ctx)
{
}
Modified: trunk/source/main/gfx/camera/CameraBehaviorOrbit.h
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorOrbit.h 2012-03-15 22:03:08 UTC
(rev 2469)
+++ trunk/source/main/gfx/camera/CameraBehaviorOrbit.h 2012-03-16 06:46:40 UTC
(rev 2470)
@@ -35,8 +35,8 @@
CameraBehaviorOrbit();
- void activate();
- void deactivate();
+ void activate(cameraContext_t &ctx);
+ void deactivate(cameraContext_t &ctx);
void update(cameraContext_t &ctx);
Modified: trunk/source/main/gfx/camera/CameraBehaviorWheelChase.cpp
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorWheelChase.cpp 2012-03-15
22:03:08 UTC (rev 2469)
+++ trunk/source/main/gfx/camera/CameraBehaviorWheelChase.cpp 2012-03-16
06:46:40 UTC (rev 2470)
@@ -29,11 +29,11 @@
using namespace Ogre;
-void CameraBehaviorWheelChase::activate()
+void CameraBehaviorWheelChase::activate(cameraContext_t &ctx)
{
}
-void CameraBehaviorWheelChase::deactivate()
+void CameraBehaviorWheelChase::deactivate(cameraContext_t &ctx)
{
}
Modified: trunk/source/main/gfx/camera/CameraBehaviorWheelChase.h
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorWheelChase.h 2012-03-15
22:03:08 UTC (rev 2469)
+++ trunk/source/main/gfx/camera/CameraBehaviorWheelChase.h 2012-03-16
06:46:40 UTC (rev 2470)
@@ -26,8 +26,8 @@
class CameraBehaviorWheelChase : public CameraBehavior
{
public:
- void activate();
- void deactivate();
+ void activate(cameraContext_t &ctx);
+ void deactivate(cameraContext_t &ctx);
void update(cameraContext_t &ctx);
Modified: trunk/source/main/gfx/camera/CameraManager.cpp
===================================================================
--- trunk/source/main/gfx/camera/CameraManager.cpp 2012-03-15 22:03:08 UTC
(rev 2469)
+++ trunk/source/main/gfx/camera/CameraManager.cpp 2012-03-16 06:46:40 UTC
(rev 2470)
@@ -51,11 +51,7 @@
cameramode=CAMERA_EXT;
mMoveScale = 0.0f;
mRotScale = 0.0f;
- //camIdealPosition = Vector3::ZERO;
lastPosition = Vector3::ZERO;
- //camRotX=0;
- //camRotY=Degree(12);
- //camDist=20;
camCollided=false;
camPosColl=Vector3::ZERO;
mSceneDetailIndex = 0;
@@ -72,10 +68,11 @@
mDOF->setEnabled(true);
}
- //createGlobalBehaviors();
+ createGlobalBehaviors();
+ ctx.cam = mCamera;
- //currentBehavior = globalBehaviors[CAMBEHAVIOR_FREE];
- currentBehavior = new
CameraBehaviorWheelChase();//CameraBehaviorVehicleOrbit();
+
+ switchBehavior(CAMBEHAVIOR_FREE);
}
CameraManager::~CameraManager()
@@ -86,6 +83,9 @@
void CameraManager::createGlobalBehaviors()
{
globalBehaviors.insert( std::pair<int,
CameraBehavior*>(CAMBEHAVIOR_FREE, new CameraBehaviorFree()) );
+ globalBehaviors.insert( std::pair<int,
CameraBehavior*>(CAMBEHAVIOR_CHARACTER_ORBIT, new
CameraBehaviorCharacterOrbit()) );
+ globalBehaviors.insert( std::pair<int,
CameraBehavior*>(CAMBEHAVIOR_VEHICLE_ORBIT, new CameraBehaviorVehicleOrbit()) );
+ globalBehaviors.insert( std::pair<int,
CameraBehavior*>(CAMBEHAVIOR_VEHICLE_WHEELCHASE, new
CameraBehaviorWheelChase()) );
}
void CameraManager::updateInput()
@@ -231,6 +231,21 @@
#endif // 0
}
+void CameraManager::switchBehavior(int newBehavior)
+{
+ if(globalBehaviors.find(newBehavior) == globalBehaviors.end()) return;
+
+ // deactivate old
+ if(currentBehavior)
+ currentBehavior->deactivate(ctx);
+
+ // set new
+ currentBehavior = globalBehaviors[newBehavior];
+
+ // activate new
+ currentBehavior->activate(ctx);
+}
+
void CameraManager::update(float dt)
{
@@ -239,10 +254,6 @@
{
mMoveScale = 1;
mRotScale = 0.1;
-
- // HACKKK
- if(currentBehavior)
- currentBehavior->activate();
}
// Otherwise scale movement units by time passed since last frame
else
@@ -257,11 +268,9 @@
if (SceneMouse::getSingleton().isMouseGrabbed()) return; //freeze camera
#endif //MYGUI
- cameraContext_t ctx;
ctx.dt = dt;
ctx.translationScale = mMoveScale;
ctx.rotationScale = Ogre::Degree(mRotScale);
- ctx.cam = mCamera;
if(!currentBehavior->allowInteraction())
{
@@ -283,7 +292,7 @@
}
}
- // hacky hack
+ // update current behavior
if(currentBehavior)
currentBehavior->update(ctx);
Modified: trunk/source/main/gfx/camera/CameraManager.h
===================================================================
--- trunk/source/main/gfx/camera/CameraManager.h 2012-03-15 22:03:08 UTC
(rev 2469)
+++ trunk/source/main/gfx/camera/CameraManager.h 2012-03-16 06:46:40 UTC
(rev 2470)
@@ -52,10 +52,16 @@
DOFManager *mDOF;
bool enforceCameraFOVUpdate;
Ogre::Vector3 cdoppler;
+ cameraContext_t ctx;
CameraBehavior *currentBehavior;
- enum { CAMBEHAVIOR_FREE, CAMBEHAVIOR_TRUCK_EXT };
+ enum { CAMBEHAVIOR_FREE
+ , CAMBEHAVIOR_CHARACTER_ORBIT
+ , CAMBEHAVIOR_VEHICLE_ORBIT
+ , CAMBEHAVIOR_VEHICLE_WHEELCHASE
+ , CAMBEHAVIOR_END
+ };
std::map <int , CameraBehavior *> globalBehaviors;
@@ -68,6 +74,7 @@
~CameraManager();
void updateInput();
+ void switchBehavior(int newBehavior);
enum { CAMERA_EXT=0,
CAMERA_FIX,
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/rigsofrods-devel