paella/Code/include/SFMLTools/JoyCam.hpp

96 lines
3.5 KiB
C++

////////////////////////////////////////////////////////////////////////////////
//
// Paella
// Copyright (C) 2015 - Thomas FORGIONE, Emilie JALRAS, Marion LENFANT, Thierry MALON, Amandine PAILLOUX
// Authors :
// Thomas FORGIONE
// Emilie JALRAS
// Marion LENFANT
// Thierry MALON
// Amandine PAILLOUX
//
// This file is part of the project Paella
// This software is provided 'as-is', without any express or implied warranty.
// In no event will the authors be held liable for any damages arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it freely,
// subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented;
// you must not claim that you wrote the original software.
// If you use this software in a product, an acknowledgment
// in the product documentation would be appreciated but is not required.
//
// 2. Altered source versions must be plainly marked as such,
// and must not be misrepresented as being the original software.
//
// 3. This notice may not be removed or altered from any source distribution.
////////////////////////////////////////////////////////////////////////////////
#ifndef JOY_CAM_HPP
#define JOY_CAM_HPP
#include <SFML/System/Vector3.hpp>
#include <SFML/Window/Event.hpp>
#include <SFMLTools/Camera.hpp>
namespace sft
{
////////////////////////////////////////////////////////////
/// \ingroup sfmltools
/// \brief Camera controlled by a joystick controller
////////////////////////////////////////////////////////////
class JoyCam : public Camera
{
public:
////////////////////////////////////////////////////
/// \brief Usual constructor
/// \param i id of the sfml controller that we will
/// be listening to
////////////////////////////////////////////////////
JoyCam(int i);
///////////////////////////////////////////////////
/// \brief calls gluLookAt with the good parameters
///////////////////////////////////////////////////
void look() const;
///////////////////////////////////////////////////
/// \brief computes the next step of the camera
/// \param width width of the window
/// \param height height of the window
///////////////////////////////////////////////////
void nextStep(int width, int height);
private:
float speed; ///< speed of the camera
float sensitivity; ///< sensitivity of the mouse
sf::Vector3f position; ///< position of the center of the camera
sf::Vector3f target; ///< a point that the camera is staring at
sf::Vector3f forward; ///< a vector from the center to the target
sf::Vector3f left; ///< a vector orthogonal to forward
double theta; ///< theta angle from spheric coordinates
double phi; ///< phi angle from spheric coordinates
int joy; ///< id of the joystick
////////////////////////////////////////////////////
/// \brief computes the vector from angles
///
/// Computes the value of position, target, forward and left
/// using only theta and phi
////////////////////////////////////////////////////
void vectorsFromAngles();
};
} // namespace sft
#endif // JOY_CAM_HPP