Revision: 2485
http://rigsofrods.svn.sourceforge.net/rigsofrods/?rev=2485&view=rev
Author: ulteq
Date: 2012-04-28 19:52:33 +0000 (Sat, 28 Apr 2012)
Log Message:
-----------
-Codechange: CameraSystem WIP
Modified Paths:
--------------
trunk/source/main/gameplay/BeamEngine.h
trunk/source/main/gameplay/RoRFrameListener.cpp
trunk/source/main/gfx/camera/CameraBehavior.h
trunk/source/main/gfx/camera/CameraBehaviorCharacterOrbit.cpp
trunk/source/main/gfx/camera/CameraBehaviorFree.cpp
trunk/source/main/gfx/camera/CameraBehaviorOrbit.cpp
trunk/source/main/gfx/camera/CameraBehaviorOrbit.h
trunk/source/main/gfx/camera/CameraBehaviorVehicleOrbit.cpp
trunk/source/main/gfx/camera/CameraBehaviorVehicleOrbit.h
trunk/source/main/gfx/camera/CameraManager.cpp
trunk/source/main/gfx/camera/CameraManager.h
trunk/source/main/physics/Beam.cpp
trunk/source/main/physics/BeamData.h
trunk/source/main/physics/input_output/SerializedRig.cpp
Modified: trunk/source/main/gameplay/BeamEngine.h
===================================================================
--- trunk/source/main/gameplay/BeamEngine.h 2012-04-28 18:47:43 UTC (rev
2484)
+++ trunk/source/main/gameplay/BeamEngine.h 2012-04-28 19:52:33 UTC (rev
2485)
@@ -17,62 +17,18 @@
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 __Engine_H__
-#define __Engine_H__
+#ifndef _Engine_H__
+#define _Engine_H__
#include "RoRPrerequisites.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <vector>
-
-
-#define AUTOMATIC 0
-#define SEMIAUTO 1
-#define MANUAL 2
-#define MANUAL_STICK 3
-#define MANUAL_RANGES 4
-
-enum autoswitch {REAR=0, NEUTRAL=1, DRIVE=2, TWO=3, ONE=4, MANUALMODE=5};
-
class BeamEngine
{
-protected:
- float clutch_time;
- float shift_time;
- float post_shift_time;
+public:
- int numGears;
- std::vector<float> gearsRatio;
- float inertia;
- float clutchForce;
+ enum shiftmodes {AUTOMATIC, SEMIAUTO, MANUAL, MANUAL_STICK,
MANUAL_RANGES};
+ enum autoswitch {REAR, NEUTRAL, DRIVE, TWO, ONE, MANUALMODE};
- int curGear;
- int curGearRange;
- float curEngineRPM;
- float curGearboxRPM;
- float curClutch;
- float curAcc;
- float curClutchTorque;
- //shifting
- int shifting;
- int shiftval;
- float shiftclock;
- int postshifting;
- float postshiftclock;
- //auto
- float autocurAcc;
- int starter;
- autoswitch autoselect;
- //turbo
- float curTurboRPM;
- //air pressure
- float apressure;
- int automode;
- int trucknum;
- TorqueCurve *torqueCurve;
-
-public:
float iddleRPM;
float maxRPM;
float stallRPM;
@@ -89,6 +45,7 @@
int prime;
BeamEngine(float iddle, float max, float torque, std::vector<float>
gears, float diff, int trucknum);
+ ~BeamEngine();
void setOptions(float einertia, char etype, float eclutch, float ctime,
float stime, float pstime);
void update(float dt, int doUpdate);
void updateAudio(int doUpdate);
@@ -140,8 +97,42 @@
char getType() { return type; };
TorqueCurve *getTorqueCurve() { return torqueCurve; };
float getEngineTorque() { return engineTorque; };
- ~BeamEngine();
-};
+protected:
-#endif
+ float clutch_time;
+ float shift_time;
+ float post_shift_time;
+
+ int numGears;
+ std::vector<float> gearsRatio;
+ float inertia;
+ float clutchForce;
+
+ int curGear;
+ int curGearRange;
+ float curEngineRPM;
+ float curGearboxRPM;
+ float curClutch;
+ float curAcc;
+ float curClutchTorque;
+ //shifting
+ int shifting;
+ int shiftval;
+ float shiftclock;
+ int postshifting;
+ float postshiftclock;
+ //auto
+ float autocurAcc;
+ int starter;
+ autoswitch autoselect;
+ //turbo
+ float curTurboRPM;
+ //air pressure
+ float apressure;
+ int automode;
+ int trucknum;
+ TorqueCurve *torqueCurve;
+};
+
+#endif // _Engine_H__
Modified: trunk/source/main/gameplay/RoRFrameListener.cpp
===================================================================
--- trunk/source/main/gameplay/RoRFrameListener.cpp 2012-04-28 18:47:43 UTC
(rev 2484)
+++ trunk/source/main/gameplay/RoRFrameListener.cpp 2012-04-28 19:52:33 UTC
(rev 2485)
@@ -2106,7 +2106,7 @@
{
bool enablegrab = true;
- if (CAMERA_MODE != CAMERA_FREE)
+ if (CAMERA_MODE != CameraManager::CAMERA_FREE)
{
if (!curr_truck)
{
@@ -2364,17 +2364,17 @@
// when in automatic
mode: shift as well
// only when the truck
really is not moving anymore
- if
(fabs(curr_truck->WheelSpeed) <= 0.1f && curr_truck->nodes[0].Velocity.length()
< 0.2f && curr_truck->engine && curr_truck->engine->getAutoMode() == AUTOMATIC)
+ if
(fabs(curr_truck->WheelSpeed) <= 0.1f && curr_truck->nodes[0].Velocity.length()
< 0.2f && curr_truck->engine && curr_truck->engine->getAutoMode() ==
BeamEngine::AUTOMATIC)
{
// switching
point, does the user want to drive forward from backward or the other way
round? change gears?
if(brake > 0.5f
&& accval < 0.5f && curr_truck->engine->getGear() > 0)
{
// we
are on the brake, jump to reverse gear
-
curr_truck->engine->autoShiftSet(REAR);
+
curr_truck->engine->autoShiftSet(BeamEngine::REAR);
} else if(brake
< 0.5f && accval > 0.5f && curr_truck->engine->getGear() < 0)
{
// we
are on the gas pedal, jump to first gear when we were in rear gear
-
curr_truck->engine->autoShiftSet(DRIVE);
+
curr_truck->engine->autoShiftSet(BeamEngine::DRIVE);
}
}
}
@@ -2417,19 +2417,19 @@
#ifdef USE_MYGUI
switch(curr_truck->engine->getAutoMode())
{
-
case AUTOMATIC:
+
case BeamEngine::AUTOMATIC:
Console::getSingleton().putMessage(Console::CONSOLE_MSGTYPE_INFO,
Console::CONSOLE_SYSTEM_NOTICE, _L("Automatic shift"), "cog.png", 3000);
break;
-
case SEMIAUTO:
+
case BeamEngine::SEMIAUTO:
Console::getSingleton().putMessage(Console::CONSOLE_MSGTYPE_INFO,
Console::CONSOLE_SYSTEM_NOTICE, _L("Manual shift - Auto clutch"), "cog.png",
3000);
break;
-
case MANUAL:
+
case BeamEngine::MANUAL:
Console::getSingleton().putMessage(Console::CONSOLE_MSGTYPE_INFO,
Console::CONSOLE_SYSTEM_NOTICE, _L("Fully Manual: sequential shift"),
"cog.png", 3000);
break;
-
case MANUAL_STICK:
+
case BeamEngine::MANUAL_STICK:
Console::getSingleton().putMessage(Console::CONSOLE_MSGTYPE_INFO,
Console::CONSOLE_SYSTEM_NOTICE, _L("Fully manual: stick shift"), "cog.png",
3000);
break;
-
case MANUAL_RANGES:
+
case BeamEngine::MANUAL_RANGES:
Console::getSingleton().putMessage(Console::CONSOLE_MSGTYPE_INFO,
Console::CONSOLE_SYSTEM_NOTICE, _L("Fully Manual: stick shift with ranges"),
"cog.png", 3000);
break;
}
@@ -2444,7 +2444,7 @@
int shiftmode =
curr_truck->engine->getAutoMode();
// if
(shiftmode==SEMIAUTO || shiftmode==MANUAL) // manual sequencial shifting
- if
(shiftmode<=MANUAL) // manual sequencial shifting, semi auto shifting, auto
shifting
+ if
(shiftmode<=BeamEngine::MANUAL) // manual sequencial shifting, semi auto
shifting, auto shifting
{
if (INPUTENGINE.getEventBoolValueBounce(EV_TRUCK_SHIFT_UP))
{
@@ -2470,7 +2470,7 @@
int gearoffset = curgear-curgearrange*6;
if (gearoffset<0) gearoffset = 0;
// one can select range only if in natural
-
if(shiftmode==MANUAL_RANGES && curgear == 0)
+
if(shiftmode==BeamEngine::MANUAL_RANGES && curgear == 0)
{
// maybe this should not be here, but should experiment
if
(INPUTENGINE.getEventBoolValueBounce(EV_TRUCK_SHIFT_LOWRANGE) &&
curgearrange!=0)
@@ -2506,7 +2506,7 @@
}
else if(curgear > 0 && curgear < 19)
{
-
if (shiftmode==MANUAL) gear_changed =
!INPUTENGINE.getEventBoolValue(EV_TRUCK_SHIFT_GEAR1 + curgear -1);
+
if (shiftmode==BeamEngine::MANUAL) gear_changed =
!INPUTENGINE.getEventBoolValue(EV_TRUCK_SHIFT_GEAR1 + curgear -1);
else gear_changed =
!INPUTENGINE.getEventBoolValue(EV_TRUCK_SHIFT_GEAR1 + gearoffset-1); // range
mode
}
@@ -2524,7 +2524,7 @@
}
else
{
-
if (shiftmode==MANUAL_STICK)
+
if (shiftmode==BeamEngine::MANUAL_STICK)
{
for (int i=1;i<19 && !found;i++)
{
@@ -3004,7 +3004,7 @@
if(mapMode==0)
{
bigMap->setVisibility(true);
- if(CAMERA_MODE != CAMERA_INT)
+ if(CAMERA_MODE !=
CameraManager::CAMERA_VEHICLE_INTERNAL)
{
//make it small again
bigMap->updateRenderMetrics(mWindow);
@@ -4981,7 +4981,7 @@
b = BeamFactory::getSingleton().createLocal(spawnpos,
spawnrot, selectedchr, 0, false, flaresMode, truckconfig, skin);
if (b && enterTruck)
{
- //cameramode = CAMERA_INT;
+ //cameramode = CAMERA_VEHICLE_INTERNAL;
BeamFactory::getSingleton().setCurrentTruck(b->trucknum);
} else if(!b && enterTruck)
BeamFactory::getSingleton().setCurrentTruck(-1);
@@ -5050,7 +5050,7 @@
if (persostart!=Vector3(0,0,0)) person->setPosition(persostart);
//bigMap->getEntityByName("person")->onTop();
- /*cameramode=CAMERA_INT;
+ /*cameramode=CAMERA_VEHICLE_INTERNAL;
pushcamRotX=camRotX;
pushcamRotY=camRotY;
camRotX=0;
@@ -5084,7 +5084,7 @@
void RoRFrameListener::changedCurrentTruck(Beam *previousTruck, Beam
*currentTruck)
{
- if (CAMERA_MODE == CAMERA_FREE) return;
+ if (CAMERA_MODE == CameraManager::CAMERA_FREE) return;
CameraManager::getSingleton().triggerFOVUpdate();
@@ -5249,7 +5249,7 @@
camRotX=0;
camRotY=Degree(12);
camDist=20;
- if (cameramode==CAMERA_INT)
+ if (cameramode==CAMERA_VEHICLE_INTERNAL)
{
currentTruck->prepareInside(true);
if(ow) ow->showDashboardOverlays(false, currentTruck);
@@ -5636,7 +5636,7 @@
}
else
{
- if(curr_truck && CAMERA_MODE != CAMERA_INT)
+ if(curr_truck && CAMERA_MODE !=
CameraManager::CAMERA_VEHICLE_INTERNAL)
{
if(ow) ow->showDashboardOverlays(true, curr_truck);
//if(bigMap) bigMap->setVisibility(true);
Modified: trunk/source/main/gfx/camera/CameraBehavior.h
===================================================================
--- trunk/source/main/gfx/camera/CameraBehavior.h 2012-04-28 18:47:43 UTC
(rev 2484)
+++ trunk/source/main/gfx/camera/CameraBehavior.h 2012-04-28 19:52:33 UTC
(rev 2485)
@@ -35,7 +35,7 @@
{
protected:
float mMoveScale, mRotScale, mMoveSpeed, mRotateSpeed;
-;
+
public:
virtual ~CameraBehavior() {};
Modified: trunk/source/main/gfx/camera/CameraBehaviorCharacterOrbit.cpp
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorCharacterOrbit.cpp
2012-04-28 18:47:43 UTC (rev 2484)
+++ trunk/source/main/gfx/camera/CameraBehaviorCharacterOrbit.cpp
2012-04-28 19:52:33 UTC (rev 2485)
@@ -19,24 +19,14 @@
*/
#include "CameraBehaviorCharacterOrbit.h"
-#include <Ogre.h>
-#include "CameraManager.h"
-#include "Console.h"
-#include "InputEngine.h"
-#include "language.h"
-#include "Settings.h"
-
-#include "Character.h"
#include "RoRFrameListener.h"
-using namespace Ogre;
-
void CameraBehaviorCharacterOrbit::update(cameraContext_t &ctx)
{
Character *person = RoRFrameListener::eflsingleton->person;
targetDirection = -person->getAngle() - Math::HALF_PI;
- camCenterPoint = person->getPosition() + Vector3(0, 1.1f, 0);
+ camCenterPoint = person->getPosition() + Vector3(0.0f, 1.1f, 0.0f);
CameraBehaviorOrbit::update(ctx);
}
Modified: trunk/source/main/gfx/camera/CameraBehaviorFree.cpp
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorFree.cpp 2012-04-28 18:47:43 UTC
(rev 2484)
+++ trunk/source/main/gfx/camera/CameraBehaviorFree.cpp 2012-04-28 19:52:33 UTC
(rev 2485)
@@ -19,15 +19,14 @@
*/
#include "CameraBehaviorFree.h"
-#include <Ogre.h>
#include "CameraManager.h"
#include "Console.h"
#include "InputEngine.h"
#include "language.h"
+#include <Ogre.h>
using namespace Ogre;
-
void CameraBehaviorFree::activate(cameraContext_t &ctx)
{
// enter free camera mode
@@ -62,12 +61,10 @@
void CameraBehaviorFree::update(cameraContext_t &ctx)
{
- Ogre::Degree mRotX(0);
- Ogre::Degree mRotY(0);
+ Degree mRotX(0.0f);
+ Degree mRotY(0.0f);
Vector3 mTranslateVector = Vector3::ZERO;
-
-
if(INPUTENGINE.getEventBoolValue(EV_CHARACTER_SIDESTEP_LEFT))
mTranslateVector.x -= ctx.translationScale; // Move camera
left
Modified: trunk/source/main/gfx/camera/CameraBehaviorOrbit.cpp
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorOrbit.cpp 2012-04-28
18:47:43 UTC (rev 2484)
+++ trunk/source/main/gfx/camera/CameraBehaviorOrbit.cpp 2012-04-28
19:52:33 UTC (rev 2485)
@@ -19,29 +19,27 @@
*/
#include "CameraBehaviorOrbit.h"
-#include <Ogre.h>
#include "CameraManager.h"
#include "Console.h"
#include "InputEngine.h"
-#include "language.h"
#include "Settings.h"
+#include "language.h"
+#include <Ogre.h>
using namespace Ogre;
CameraBehaviorOrbit::CameraBehaviorOrbit() :
- camRotX(0)
- , camRotY(0)
- , camDist(5)
- , minCamDist(3)
- , camRatio(11)
+ camRotX(0.0f)
+ , camRotY(0.35f)
+ , camDist(5.0f)
+ , minCamDist(3.0f)
+ , camRatio(11.0f)
, camIdealPosition(Vector3::ZERO)
, camCenterPoint(Vector3::ZERO)
, camTranslation(Vector3::ZERO)
- , targetDirection(0)
- , targetPitch(0)
+ , targetDirection(0.0f)
+ , targetPitch(0.0f)
{
-
-
}
void CameraBehaviorOrbit::activate(cameraContext_t &ctx)
@@ -69,44 +67,12 @@
{
Camera *cam = CameraManager::getSingleton().getCamera();
- /*
- if(INPUTENGINE.getEventBoolValue(EV_CHARACTER_SIDESTEP_LEFT))
- camTranslation.x -= mMoveScale; // Move camera left
-
- if(INPUTENGINE.getEventBoolValue(EV_CHARACTER_SIDESTEP_RIGHT))
- camTranslation.x += mMoveScale; // Move camera RIGHT
-
- if(INPUTENGINE.getEventBoolValue(EV_CHARACTER_FORWARD))
- camTranslation.z -= mMoveScale; // Move camera forward
-
- if(INPUTENGINE.getEventBoolValue(EV_CHARACTER_BACKWARDS))
- camTranslation.z += mMoveScale; // Move camera backward
-
- if(INPUTENGINE.getEventBoolValue(EV_CHARACTER_UP))
- camTranslation.y += mMoveScale; // Move camera up
-
- if(INPUTENGINE.getEventBoolValue(EV_CHARACTER_DOWN))
- camTranslation.y -= mMoveScale; // Move camera down
-
- if(INPUTENGINE.getEventBoolValue(EV_CHARACTER_ROT_UP))
- camRotY += mRotScale;
-
- if(INPUTENGINE.getEventBoolValue(EV_CHARACTER_ROT_DOWN))
- camRotY -= mRotScale;
-
- if(INPUTENGINE.getEventBoolValue(EV_CHARACTER_RIGHT))
- camRotX -= mRotScale;
-
- if(INPUTENGINE.getEventBoolValue(EV_CHARACTER_LEFT))
- camRotX += mRotScale;
-*/
-
if (INPUTENGINE.getEventBoolValueBounce(EV_CAMERA_LOOKBACK))
{
if(camRotX > Degree(0))
- camRotX=Degree(0);
+ camRotX = Degree(0);
else
- camRotX=Degree(180);
+ camRotX = Degree(180);
}
if (INPUTENGINE.getEventBoolValue(EV_CAMERA_ROTATE_LEFT))
{
@@ -153,19 +119,14 @@
}
if (INPUTENGINE.getEventBoolValue(EV_CAMERA_RESET))
{
- camRotX=0;
- //if (cameramode!=CAMERA_INT)
- // camRotY=Degree(12);
- //else
- camRotY = DEFAULT_INTERNAL_CAM_PITCH;
- camDist=20;
+ camRotX = 0;
+ camRotY = DEFAULT_INTERNAL_CAM_PITCH;
+ camDist = 20;
}
-
-
- // set Minimal Cam distance
- if(camDist < minCamDist) camDist = minCamDist;
-
+ // set minimum distance
+ camDist = std::max(camDist, minCamDist);
+
camIdealPosition = camDist * 0.5f * Vector3( \
sin(targetDirection + camRotX.valueRadians()) *
cos(targetPitch + camRotY.valueRadians()) \
, sin(targetPitch + camRotY.valueRadians()) \
@@ -175,7 +136,7 @@
float real_camdist = camIdealPosition.length();
camIdealPosition = camIdealPosition + camCenterPoint + camTranslation;
- Vector3 newposition = ( camIdealPosition + camRatio *
cam->getPosition() ) / (camRatio+1.0f);
+ Vector3 newPosition = ( camIdealPosition + camRatio *
cam->getPosition() ) / (camRatio+1.0f);
/*
Real h=hfinder->getHeightAt(newposition.x,newposition.z);
@@ -187,11 +148,9 @@
if (newposition.y<h) newposition.y=h;
*/
- cam->setPosition(newposition);
+ cam->setPosition(newPosition);
cam->lookAt(camCenterPoint);
- lastPosition = camCenterPoint;
-
DOFManager *dof = CameraManager::getSingleton().getDOFManager();
if(dof)
{
Modified: trunk/source/main/gfx/camera/CameraBehaviorOrbit.h
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorOrbit.h 2012-04-28 18:47:43 UTC
(rev 2484)
+++ trunk/source/main/gfx/camera/CameraBehaviorOrbit.h 2012-04-28 19:52:33 UTC
(rev 2485)
@@ -28,7 +28,7 @@
protected:
Ogre::Radian camRotX, camRotY;
float camDist, minCamDist, camRatio;
- Ogre::Vector3 camIdealPosition, camCenterPoint, lastPosition,
camTranslation;
+ Ogre::Vector3 camIdealPosition, camCenterPoint, camTranslation;
float targetDirection, targetPitch;
public:
Modified: trunk/source/main/gfx/camera/CameraBehaviorVehicleOrbit.cpp
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorVehicleOrbit.cpp 2012-04-28
18:47:43 UTC (rev 2484)
+++ trunk/source/main/gfx/camera/CameraBehaviorVehicleOrbit.cpp 2012-04-28
19:52:33 UTC (rev 2485)
@@ -19,21 +19,16 @@
*/
#include "CameraBehaviorVehicleOrbit.h"
-#include <Ogre.h>
-#include "CameraManager.h"
-#include "Console.h"
-#include "InputEngine.h"
-#include "language.h"
+#include "BeamFactory.h"
#include "Settings.h"
-#include "BeamFactory.h"
-
-using namespace Ogre;
-
CameraBehaviorVehicleOrbit::CameraBehaviorVehicleOrbit() :
- externalCameraMode(0)
+ externalCameraMode(false)
{
- externalCameraMode = (SSETTING("External Camera Mode", "Pitching") ==
"Static")? 1 : 0;
+ minCamDist = 8.0f;
+
+ if (SSETTING("External Camera Mode", "Pitching") == "Static")
+ externalCameraMode = true;
}
void CameraBehaviorVehicleOrbit::update(cameraContext_t &ctx)
@@ -41,15 +36,16 @@
Beam *curr_truck = BeamFactory::getSingleton().getCurrentTruck();
if(!curr_truck) return;
- // Make all the changes to the camera
Vector3 dir = curr_truck->nodes[curr_truck->cameranodepos[0]].smoothpos
- curr_truck->nodes[curr_truck->cameranodedir[0]].smoothpos;
dir.normalise();
+
targetDirection = -atan2(dir.dotProduct(Vector3::UNIT_X),
dir.dotProduct(-Vector3::UNIT_Z));
+ targetPitch = 0.0f;
if(!externalCameraMode)
+ {
targetPitch = -asin(dir.dotProduct(Vector3::UNIT_Y));
- else
- targetPitch = 0;
+ }
camRatio = 1.0f / (curr_truck->tdt * 4.0f);
Modified: trunk/source/main/gfx/camera/CameraBehaviorVehicleOrbit.h
===================================================================
--- trunk/source/main/gfx/camera/CameraBehaviorVehicleOrbit.h 2012-04-28
18:47:43 UTC (rev 2484)
+++ trunk/source/main/gfx/camera/CameraBehaviorVehicleOrbit.h 2012-04-28
19:52:33 UTC (rev 2485)
@@ -26,7 +26,7 @@
class CameraBehaviorVehicleOrbit : public CameraBehaviorOrbit
{
protected:
- int externalCameraMode;
+ bool externalCameraMode;
public:
CameraBehaviorVehicleOrbit();
void update(cameraContext_t &ctx);
Modified: trunk/source/main/gfx/camera/CameraManager.cpp
===================================================================
--- trunk/source/main/gfx/camera/CameraManager.cpp 2012-04-28 18:47:43 UTC
(rev 2484)
+++ trunk/source/main/gfx/camera/CameraManager.cpp 2012-04-28 19:52:33 UTC
(rev 2485)
@@ -19,13 +19,14 @@
*/
#include "CameraManager.h"
-#include "Ogre.h"
+#include "BeamFactory.h"
+#include "Console.h"
#include "InputEngine.h"
+#include "Ogre.h"
#include "Settings.h"
-#include "Console.h"
+#include "SoundScriptManager.h"
#include "language.h"
-#include "BeamFactory.h"
#include "OverlayWrapper.h"
#include "CameraBehaviorFree.h"
@@ -39,32 +40,21 @@
using namespace Ogre;
-
CameraManager::CameraManager(Ogre::SceneManager *scm, Ogre::Camera *cam) :
- mSceneMgr(scm)
- , mCamera(cam)
- , currentBehavior(0)
+ currentBehavior(0)
, currentBehaviorID(-1)
- // TODO: initialize other vars here
+ , mCamera(cam)
+ , mDOF(0)
+ , mLastPosition(Vector3::ZERO)
+ , mMoveScale(1.0f)
+ , mMoveSpeed(50)
+ , mRotScale(0.1f)
+ , mRotateSpeed(100)
+ , mSceneMgr(scm)
{
setSingleton(this);
- lastcameramode=CAMERA_EXT;
- cameramode=CAMERA_EXT;
- mMoveScale = 1.0f;
- mRotScale = 0.1f;
- lastPosition = Vector3::ZERO;
- camCollided=false;
- camPosColl=Vector3::ZERO;
- mSceneDetailIndex = 0;
- mDOF=0;
- mRotateSpeed = 100;
- mMoveSpeed = 50;
- enforceCameraFOVUpdate=true;
-
- // DOF?
- bool useDOF = (BSETTING("DOF", false));
- if(useDOF)
+ if ( BSETTING("DOF", false) )
{
mDOF = new DOFManager(mSceneMgr, mCamera->getViewport(),
Ogre::Root::getSingletonPtr(), mCamera);
mDOF->setEnabled(true);
@@ -73,10 +63,10 @@
createGlobalBehaviors();
ctx.cam = mCamera;
ctx.scm = mSceneMgr;
-
-
- //switchBehavior(CAMBEHAVIOR_CHARACTER_ORBIT);
- switchBehavior(CAMBEHAVIOR_VEHICLE_SPLINE);
+
+ switchBehavior(CAMERA_CHARACTER_ORBIT);
+ switchBehavior(CAMERA_VEHICLE_ORBIT);
+ //switchBehavior(CAMERA_VEHICLE_SPLINE);
}
CameraManager::~CameraManager()
@@ -86,30 +76,37 @@
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()) );
- globalBehaviors.insert( std::pair<int,
CameraBehavior*>(CAMBEHAVIOR_VEHICLE_SPLINE, new CameraBehaviorVehicleSpline())
);
+ globalBehaviors.insert( std::pair<int,
CameraBehavior*>(CAMERA_CHARACTER_ORBIT, new CameraBehaviorCharacterOrbit()) );
+ globalBehaviors.insert( std::pair<int,
CameraBehavior*>(CAMERA_VEHICLE_ORBIT, new CameraBehaviorVehicleOrbit()) );
+ globalBehaviors.insert( std::pair<int,
CameraBehavior*>(CAMERA_VEHICLE_SPLINE, new CameraBehaviorVehicleSpline()) );
+ globalBehaviors.insert( std::pair<int, CameraBehavior*>(CAMERA_FREE,
new CameraBehaviorFree()) );
+ // TODO: Create a CameraBehavior for internal camera perspectives (e.g.
cockpit, rear seats, ...)
+ globalBehaviors.insert( std::pair<int,
CameraBehavior*>(CAMERA_VEHICLE_INTERNAL, new CameraBehaviorCharacterOrbit()) );
+
+ // TODO: Think about this. Do we really need this CameraBehavior? Or
can it be part of the CAMERA_VEHICLE_INTERNAL behavior?
+ globalBehaviors.insert( std::pair<int,
CameraBehavior*>(CAMERA_VEHICLE_WHEELCHASE, new CameraBehaviorWheelChase()) );
+
+ // TODO: Create a CameraBehavior for a fixed camera perspective
+ globalBehaviors.insert( std::pair<int, CameraBehavior*>(CAMERA_FIX, new
CameraBehaviorFree()) );
}
+#if 0
void CameraManager::updateInput()
{
-#if 0
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)
+ if (cameramode==CAMERA_VEHICLE_INTERNAL)
{
//end of internal cam
camRotX=pushcamRotX;
camRotY=pushcamRotY;
}
cameramode++;
- if (cameramode==CAMERA_INT)
+ if (cameramode==CAMERA_VEHICLE_INTERNAL)
{
//start of internal cam
pushcamRotX=camRotX;
@@ -122,7 +119,7 @@
//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)
+ if (cameramode==CAMERA_VEHICLE_INTERNAL &&
curr_truck->currentcamera < curr_truck->freecinecamera-1)
{
curr_truck->currentcamera++;
curr_truck->changedCamera();
@@ -130,7 +127,7 @@
else
{
OverlayWrapper *ow =
OverlayWrapper::getSingletonPtrNoCreation();
- if (cameramode==CAMERA_INT)
+ if (cameramode==CAMERA_VEHICLE_INTERNAL)
{
//end of internal cam
camRotX=pushcamRotX;
@@ -142,7 +139,7 @@
curr_truck->changedCamera();
}
cameramode++;
- if (cameramode==CAMERA_INT)
+ if (cameramode==CAMERA_VEHICLE_INTERNAL)
{
//start of internal cam
pushcamRotX=camRotX;
@@ -177,7 +174,7 @@
Console::getSingleton().putMessage(Console::CONSOLE_MSGTYPE_INFO,
Console::CONSOLE_SYSTEM_NOTICE, _L("FOV: ") + TOSTRING(fov), "camera_edit.png",
2000);
#endif // USE_MYGUI
// save the settings
- if (cameramode == CAMERA_INT)
+ if (cameramode == CAMERA_VEHICLE_INTERNAL)
SETTINGS.setSetting("FOV Internal", TOSTRING(fov));
else if (cameramode == CAMERA_EXT)
SETTINGS.setSetting("FOV External", TOSTRING(fov));
@@ -193,7 +190,7 @@
Console::getSingleton().putMessage(Console::CONSOLE_MSGTYPE_INFO,
Console::CONSOLE_SYSTEM_NOTICE, _L("FOV: ") + TOSTRING(fov), "camera_edit.png",
2000);
#endif // USE_MYGUI
// save the settings
- if (cameramode == CAMERA_INT)
+ if (cameramode == CAMERA_VEHICLE_INTERNAL)
SETTINGS.setSetting("FOV Internal", TOSTRING(fov));
else if (cameramode == CAMERA_EXT)
SETTINGS.setSetting("FOV External", TOSTRING(fov));
@@ -201,12 +198,7 @@
if (INPUTENGINE.getEventBoolValueBounce(EV_COMMON_TOGGLE_RENDER_MODE,
0.5f))
{
- mSceneDetailIndex = (mSceneDetailIndex+1)%3 ;
- switch(mSceneDetailIndex) {
- case 0 : mCamera->setPolygonMode(Ogre::PM_SOLID) ; break ;
- case 1 : mCamera->setPolygonMode(Ogre::PM_WIREFRAME) ; break ;
- case 2 : mCamera->setPolygonMode(Ogre::PM_POINTS) ; break ;
- }
+ mCamera->setPolygonMode( (mCamera->getPolygonMode() + 1) % 3 );
}
if (INPUTENGINE.getEventBoolValueBounce(EV_CAMERA_FREE_MODE_FIX))
{
@@ -232,16 +224,14 @@
if (INPUTENGINE.getEventBoolValueBounce(EV_CAMERA_FREE_MODE))
{
- currentBehavior = globalBehaviors[CAMBEHAVIOR_FREE];
+ currentBehavior = globalBehaviors[CAMERA_FREE];
}
-#endif // 0
}
+#endif // 0
void CameraManager::switchToNextBehavior()
{
- int i = currentBehaviorID + 1;
- if(i >= CAMBEHAVIOR_END)
- i=0;
+ int i = (currentBehaviorID + 1) % CAMERA_END;
switchBehavior(i);
}
@@ -273,7 +263,7 @@
switchToNextBehavior();
}
#ifdef MYGUI
- if (SceneMouse::getSingleton().isMouseGrabbed()) return; //freeze camera
+ if (SceneMouse::getSingleton().isMouseGrabbed()) return; // freeze
camera
#endif //MYGUI
ctx.dt = dt;
@@ -302,9 +292,18 @@
// update current behavior
if(currentBehavior)
+ {
currentBehavior->update(ctx);
+ }
+#ifdef USE_OPENAL
+ // update audio listener position
+ Vector3 cameraSpeed = (mCamera->getPosition() - mLastPosition) / dt;
+ mLastPosition = mCamera->getPosition();
+ SoundScriptManager::getSingleton().setCamera(mCamera->getPosition(),
mCamera->getDirection(), mCamera->getUp(), cameraSpeed);
+#endif //USE_OPENAL
+
#if 0
Beam *curr_truck = BeamFactory::getSingleton().getCurrentTruck();
@@ -358,7 +357,7 @@
}
}
- else if (cameramode==CAMERA_INT)
+ else if (cameramode==CAMERA_VEHICLE_INTERNAL)
{
float fov = FSETTING("FOV Internal", 75);
if(changeCamMode)
@@ -460,7 +459,7 @@
}
}
}
- if (cameramode==CAMERA_INT)
+ if (cameramode==CAMERA_VEHICLE_INTERNAL)
{
int currentcamera=curr_truck->currentcamera;
@@ -575,19 +574,6 @@
#endif // USE_CAELUM
}
}
-
- //position audio listener
- Vector3 cpos=mCamera->getPosition();
- Vector3 cdir=mCamera->getDirection();
- Vector3 cup=mCamera->getUp();
- Vector3 cspeed=(cpos-cdoppler)/dt;
- cdoppler=cpos;
- // XXX maybe thats the source of sound destorsion: runtime order???
-#ifdef USE_OPENAL
- SoundScriptManager::getSingleton().setCamera(cpos, cdir, cup, cspeed);
-#endif // OPENAL
- //if (cspeed.length()>50.0) {cspeed.normalise(); cspeed=50.0*cspeed;};
- //if (audioManager) audioManager->setListenerPosition(cpos.x, cpos.y,
cpos.z, cspeed.x, cspeed.y, cspeed.z, cdir.x, cdir.y, cdir.z, cup.x, cup.y,
cup.z);
//water
if (w)
{
@@ -599,14 +585,6 @@
#endif // 0
}
-
-bool CameraManager::setCameraPositionWithCollision(Vector3 newPos)
-{
- // no collision of camera, normal mode
- mCamera->setPosition(newPos);
- return true;
-}
-
bool CameraManager::mouseMoved(const OIS::MouseEvent& _arg)
{
if(!currentBehavior) return false;
@@ -625,11 +603,6 @@
return currentBehavior->mouseReleased(_arg, _id);
}
-void CameraManager::triggerFOVUpdate()
-{
- enforceCameraFOVUpdate = true;
-}
-
bool CameraManager::allowInteraction()
{
if(!currentBehavior) return false;
Modified: trunk/source/main/gfx/camera/CameraManager.h
===================================================================
--- trunk/source/main/gfx/camera/CameraManager.h 2012-04-28 18:47:43 UTC
(rev 2484)
+++ trunk/source/main/gfx/camera/CameraManager.h 2012-04-28 19:52:33 UTC
(rev 2485)
@@ -24,87 +24,68 @@
#include "DepthOfFieldEffect.h"
#include "OIS.h"
+#include "Ogre.h"
#include "Singleton.h"
-#include <map>
-
#include "CameraBehavior.h"
#define MAIN_CAMERA CameraManager::getSingleton().getCamera()
#define CAMERA_MODE CameraManager::getSingleton().getCameraMode()
-#define DEFAULT_INTERNAL_CAM_PITCH Degree(-15)
+#define DEFAULT_INTERNAL_CAM_PITCH Ogre::Degree(-15)
class CameraManager : public RoRSingletonNoCreation < CameraManager >
{
friend class SceneMouse;
+
protected:
- Ogre::SceneManager *mSceneMgr;
+
+ DOFManager *mDOF;
Ogre::Camera *mCamera;
- int cameramode, lastcameramode;
- bool camCollided;
- Ogre::Vector3 camPosColl;
Ogre::Radian pushcamRotX, pushcamRotY;
+ Ogre::SceneManager *mSceneMgr;
+ Ogre::Vector3 mLastPosition;
+ cameraContext_t ctx;
float mMoveScale, mRotScale;
- Ogre::Vector3 lastPosition;
- int mSceneDetailIndex;
- // Real dirSpeed;
float mMoveSpeed, mRotateSpeed;
- DOFManager *mDOF;
- bool enforceCameraFOVUpdate;
- Ogre::Vector3 cdoppler;
- cameraContext_t ctx;
CameraBehavior *currentBehavior;
int currentBehaviorID;
- enum { CAMBEHAVIOR_FREE
- , CAMBEHAVIOR_CHARACTER_ORBIT
- , CAMBEHAVIOR_VEHICLE_ORBIT
- , CAMBEHAVIOR_VEHICLE_WHEELCHASE
- , CAMBEHAVIOR_VEHICLE_SPLINE
- , CAMBEHAVIOR_END
- };
-
std::map <int , CameraBehavior *> globalBehaviors;
+ void switchBehavior(int newBehavior);
+ void switchToNextBehavior();
+ void createGlobalBehaviors();
+
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();
- void updateInput();
- void switchBehavior(int newBehavior);
- void switchToNextBehavior();
-
- enum { CAMERA_EXT=0,
- CAMERA_FIX,
- CAMERA_INT,
- CAMERA_END,
- CAMERA_FREE,
- CAMERA_FREE_FIXED,
- CAMERA_EXTERNALCONTROL=9999
+ enum
+ {
+ CAMERA_CHARACTER_ORBIT=0
+ , CAMERA_VEHICLE_INTERNAL
+ , CAMERA_VEHICLE_ORBIT
+ , CAMERA_VEHICLE_WHEELCHASE
+ , CAMERA_VEHICLE_SPLINE
+ , CAMERA_END
+ , CAMERA_FREE
+ , CAMERA_FIX
};
+
+ void triggerFOVUpdate() { /*TODO: Think about this*/ };
+ void update(float dt);
- //void setCameraRotation(Ogre::Radian x, Ogre::Radian y, Ogre::Real
distance) { camRotX=x; camRotY=y; camDist=distance;};
- //Ogre::Radian getCameraRotationX() { return camRotX; };
+ bool allowInteraction();
- void update(float dt);
- bool setCameraPositionWithCollision(Ogre::Vector3 newPos);
Ogre::Camera *getCamera() { return mCamera; };
- int getCameraMode() { return cameramode; };
+ int getCameraMode() { return mCamera->getPolygonMode(); };
inline DOFManager *getDOFManager() { return mDOF; }
-
-
-
- void createGlobalBehaviors();
- void triggerFOVUpdate();
-
- bool allowInteraction();
};
#endif // CAMERAMANAGER_H__
-
-
Modified: trunk/source/main/physics/Beam.cpp
===================================================================
--- trunk/source/main/physics/Beam.cpp 2012-04-28 18:47:43 UTC (rev 2484)
+++ trunk/source/main/physics/Beam.cpp 2012-04-28 19:52:33 UTC (rev 2485)
@@ -1099,11 +1099,11 @@
if (engine)
{
int automode = -1;
- if ((flagmask&NETMASK_ENGINE_MODE_AUTOMATIC)!=0)
automode = AUTOMATIC;
- else if ((flagmask&NETMASK_ENGINE_MODE_SEMIAUTO)!=0)
automode = SEMIAUTO;
- else if ((flagmask&NETMASK_ENGINE_MODE_MANUAL)!=0)
automode = MANUAL;
- else if ((flagmask&NETMASK_ENGINE_MODE_MANUAL_STICK)!=0)
automode = MANUAL_STICK;
- else if ((flagmask&NETMASK_ENGINE_MODE_MANUAL_RANGES)!=0)
automode = MANUAL_RANGES;
+ if ((flagmask&NETMASK_ENGINE_MODE_AUTOMATIC)!=0)
automode = BeamEngine::AUTOMATIC;
+ else if ((flagmask&NETMASK_ENGINE_MODE_SEMIAUTO)!=0)
automode = BeamEngine::SEMIAUTO;
+ else if ((flagmask&NETMASK_ENGINE_MODE_MANUAL)!=0)
automode = BeamEngine::MANUAL;
+ else if ((flagmask&NETMASK_ENGINE_MODE_MANUAL_STICK)!=0)
automode = BeamEngine::MANUAL_STICK;
+ else if ((flagmask&NETMASK_ENGINE_MODE_MANUAL_RANGES)!=0)
automode = BeamEngine::MANUAL_RANGES;
bool contact = ((flagmask&NETMASK_ENGINE_CONT) != 0);
bool running = ((flagmask&NETMASK_ENGINE_RUN) != 0);
@@ -2229,11 +2229,11 @@
if (engine->contact) send_oob->flagmask +=
NETMASK_ENGINE_CONT;
if (engine->running) send_oob->flagmask +=
NETMASK_ENGINE_RUN;
- if (engine->getAutoMode() == AUTOMATIC)
send_oob->flagmask += NETMASK_ENGINE_MODE_AUTOMATIC;
- else if (engine->getAutoMode() == SEMIAUTO)
send_oob->flagmask += NETMASK_ENGINE_MODE_SEMIAUTO;
- else if (engine->getAutoMode() == MANUAL)
send_oob->flagmask += NETMASK_ENGINE_MODE_MANUAL;
- else if (engine->getAutoMode() == MANUAL_STICK)
send_oob->flagmask += NETMASK_ENGINE_MODE_MANUAL_STICK;
- else if (engine->getAutoMode() == MANUAL_RANGES)
send_oob->flagmask += NETMASK_ENGINE_MODE_MANUAL_RANGES;
+ if (engine->getAutoMode() ==
BeamEngine::AUTOMATIC) send_oob->flagmask += NETMASK_ENGINE_MODE_AUTOMATIC;
+ else if (engine->getAutoMode() == BeamEngine::SEMIAUTO)
send_oob->flagmask += NETMASK_ENGINE_MODE_SEMIAUTO;
+ else if (engine->getAutoMode() == BeamEngine::MANUAL)
send_oob->flagmask += NETMASK_ENGINE_MODE_MANUAL;
+ else if (engine->getAutoMode() ==
BeamEngine::MANUAL_STICK) send_oob->flagmask +=
NETMASK_ENGINE_MODE_MANUAL_STICK;
+ else if (engine->getAutoMode() ==
BeamEngine::MANUAL_RANGES) send_oob->flagmask +=
NETMASK_ENGINE_MODE_MANUAL_RANGES;
}
if(free_aeroengine>0)
@@ -5453,7 +5453,7 @@
void Beam::updateAI(float dt)
{
- if(driveable != TRUCK || CAMERA_MODE != CAMERA_FREE)
+ if(driveable != TRUCK || CAMERA_MODE != CameraManager::CAMERA_FREE)
return;
// start engine if not running
Modified: trunk/source/main/physics/BeamData.h
===================================================================
--- trunk/source/main/physics/BeamData.h 2012-04-28 18:47:43 UTC (rev
2484)
+++ trunk/source/main/physics/BeamData.h 2012-04-28 19:52:33 UTC (rev
2485)
@@ -170,16 +170,6 @@
EVENT_DELETE
};
-enum camera_modes {
- CAMERA_EXT=0,
- CAMERA_FIX,
- CAMERA_INT,
- CAMERA_END,
- // the free modes are on purpose behind end, so they require a special
key to be triggered
- CAMERA_FREE,
- CAMERA_FREE_FIXED
-};
-
enum game_states {
NONE_LOADED=0,
TERRAIN_LOADED,
Modified: trunk/source/main/physics/input_output/SerializedRig.cpp
===================================================================
--- trunk/source/main/physics/input_output/SerializedRig.cpp 2012-04-28
18:47:43 UTC (rev 2484)
+++ trunk/source/main/physics/input_output/SerializedRig.cpp 2012-04-28
19:52:33 UTC (rev 2485)
@@ -2731,13 +2731,13 @@
// are there any startup shifter settings?
Ogre::String gearboxMode =
SSETTING("GearboxMode", "Automatic shift");
if (gearboxMode == "Manual shift - Auto clutch")
- engine->setAutoMode(SEMIAUTO);
+
engine->setAutoMode(BeamEngine::SEMIAUTO);
else if (gearboxMode == "Fully Manual:
sequential shift")
- engine->setAutoMode(MANUAL);
+ engine->setAutoMode(BeamEngine::MANUAL);
else if (gearboxMode == "Fully Manual: stick
shift")
- engine->setAutoMode(MANUAL_STICK);
+
engine->setAutoMode(BeamEngine::MANUAL_STICK);
else if (gearboxMode == "Fully Manual: stick
shift with ranges")
- engine->setAutoMode(MANUAL_RANGES);
+
engine->setAutoMode(BeamEngine::MANUAL_RANGES);
//engine->start();
continue;
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/rigsofrods-devel