Apply camera changes provided by Jesse Smith to have v0.6 camera option.
Feel free to fix any C++ style issues, this saves you fighting with patch or can be undone quickly by reverting this single commit. git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@7739 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
915a9d9864
commit
b8a0ab32b4
@ -360,6 +360,9 @@ namespace UserConfigParams
|
|||||||
PARAM_DEFAULT( IntUserConfigParam(0, "reverse_look_threshold",
|
PARAM_DEFAULT( IntUserConfigParam(0, "reverse_look_threshold",
|
||||||
"If the kart is driving backwards faster than this value,\n"
|
"If the kart is driving backwards faster than this value,\n"
|
||||||
"switch automatically to reverse camera (set to 0 to disable).") );
|
"switch automatically to reverse camera (set to 0 to disable).") );
|
||||||
|
PARAM_PREFIX IntUserConfigParam m_camera_style
|
||||||
|
PARAM_DEFAULT( IntUserConfigParam(1, "camera_style", "Camera Style") );
|
||||||
|
|
||||||
|
|
||||||
PARAM_PREFIX StringUserConfigParam m_item_style
|
PARAM_PREFIX StringUserConfigParam m_item_style
|
||||||
PARAM_DEFAULT( StringUserConfigParam("items", "item_style", "Name of the .items file to use.") );
|
PARAM_DEFAULT( StringUserConfigParam("items", "item_style", "Name of the .items file to use.") );
|
||||||
|
@ -62,6 +62,13 @@ Camera::Camera(int camera_index, const Kart* kart)
|
|||||||
m_position_speed = 8.0f;
|
m_position_speed = 8.0f;
|
||||||
m_target_speed = 10.0f;
|
m_target_speed = 10.0f;
|
||||||
m_rotation_range = 0.4f;
|
m_rotation_range = 0.4f;
|
||||||
|
// TODO: Make this per user too if the one above goes that way.
|
||||||
|
switch(UserConfigParams::m_camera_style)
|
||||||
|
{
|
||||||
|
case 1: m_camera_style = CS_CLASSIC; break;
|
||||||
|
case 0:
|
||||||
|
default: m_camera_style = CS_MODERN; break;
|
||||||
|
}
|
||||||
reset();
|
reset();
|
||||||
} // Camera
|
} // Camera
|
||||||
|
|
||||||
@ -339,8 +346,36 @@ void Camera::update(float dt)
|
|||||||
{
|
{
|
||||||
case CM_NORMAL:
|
case CM_NORMAL:
|
||||||
{
|
{
|
||||||
computeNormalCameraPosition(&wanted_position, &wanted_target);
|
switch (m_camera_style)
|
||||||
smoothMoveCamera(dt, wanted_position, wanted_target);
|
{
|
||||||
|
// 0.7 flexible link
|
||||||
|
case CS_MODERN:
|
||||||
|
{
|
||||||
|
computeNormalCameraPosition(&wanted_position, &wanted_target);
|
||||||
|
smoothMoveCamera(dt, wanted_position, wanted_target);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// More like the 0.6 STK way
|
||||||
|
case CS_CLASSIC:
|
||||||
|
{
|
||||||
|
// wanted_target.setY(wanted_target.getY()+ 0.75f);
|
||||||
|
wanted_target.setY(wanted_target.getY()+ 0.30f);
|
||||||
|
float angle_around = m_kart->getHeading();
|
||||||
|
float angle_up = m_kart->getKartProperties()->getCameraBackwardUpAngle()
|
||||||
|
- m_kart->getPitch() ;
|
||||||
|
angle_around += 3.14; // face forward
|
||||||
|
wanted_position.setX( sin(angle_around));
|
||||||
|
wanted_position.setY( sin(angle_up) );
|
||||||
|
wanted_position.setZ( cos(angle_around));
|
||||||
|
wanted_position *= m_distance * 1.5f;
|
||||||
|
wanted_position += wanted_target;
|
||||||
|
smoothMoveCamera(dt, wanted_position, wanted_target);
|
||||||
|
m_camera->setPosition(wanted_position.toIrrVector());
|
||||||
|
m_camera->setTarget(wanted_target.toIrrVector());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CM_FALLING:
|
case CM_FALLING:
|
||||||
|
@ -51,6 +51,11 @@ public:
|
|||||||
CM_FALLING
|
CM_FALLING
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum Style {
|
||||||
|
CS_MODERN, //!< Flexible link between kart and camera
|
||||||
|
CS_CLASSIC, //!< Fixed position style, like STK v0.6
|
||||||
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/** The camera scene node. */
|
/** The camera scene node. */
|
||||||
scene::ICameraSceneNode *m_camera;
|
scene::ICameraSceneNode *m_camera;
|
||||||
@ -97,6 +102,10 @@ private:
|
|||||||
|
|
||||||
/** Velocity of the target of the camera, only used for end camera. */
|
/** Velocity of the target of the camera, only used for end camera. */
|
||||||
core::vector3df m_target_velocity;
|
core::vector3df m_target_velocity;
|
||||||
|
|
||||||
|
/* Whether we should use the pre-0.7 camera style or the
|
||||||
|
* modern style. Should default to modern. */
|
||||||
|
Style m_camera_style;
|
||||||
|
|
||||||
/** A class that stores information about the different end cameras
|
/** A class that stores information about the different end cameras
|
||||||
* which can be specified in the scene.xml file. */
|
* which can be specified in the scene.xml file. */
|
||||||
|
@ -247,6 +247,7 @@ void cmdLineHelp (char* invocation)
|
|||||||
" --gfx=n Play other graphical effects like impact stars dance,\n"
|
" --gfx=n Play other graphical effects like impact stars dance,\n"
|
||||||
" water animations or explosions (Enable: 1, Disable: 0).\n"
|
" water animations or explosions (Enable: 1, Disable: 0).\n"
|
||||||
" --weather=n Show weather effects like rain or snow (0 or 1 as --gfx).\n"
|
" --weather=n Show weather effects like rain or snow (0 or 1 as --gfx).\n"
|
||||||
|
" --camera-style=n Flexible (0) or hard like v0.6 (1) kart-camera link.\n"
|
||||||
// should not be used by unaware users:u
|
// should not be used by unaware users:u
|
||||||
// " --profile Enable automatic driven profile mode for 20 seconds.\n"
|
// " --profile Enable automatic driven profile mode for 20 seconds.\n"
|
||||||
// " --profile=n Enable automatic driven profile mode for n seconds.\n"
|
// " --profile=n Enable automatic driven profile mode for n seconds.\n"
|
||||||
@ -489,6 +490,11 @@ int handleCmdLine(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
UserConfigParams::m_show_steering_animations = n;
|
UserConfigParams::m_show_steering_animations = n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if ( sscanf(argv[i], "--camera-style=%d", &n) )
|
||||||
|
{
|
||||||
|
UserConfigParams::m_camera_style = n;
|
||||||
|
}
|
||||||
else if( (!strcmp(argv[i], "--kart") && i+1<argc ))
|
else if( (!strcmp(argv[i], "--kart") && i+1<argc ))
|
||||||
{
|
{
|
||||||
const KartProperties *prop = kart_properties_manager->getKart(argv[i+1]);
|
const KartProperties *prop = kart_properties_manager->getKart(argv[i+1]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user