#pragma once
#include "CmPrerequisites.h"
#include "CmModule.h"
#include "CmRect.h"
#include "CmInputHandler.h"
namespace CamelotEngine
{
class CM_EXPORT Input : public Module
{
public:
Input();
~Input();
boost::signal onKeyDown;
boost::signal onKeyUp;
boost::signal onMouseMoved;
boost::signal onMouseDown;
boost::signal onMouseUp;
void initClipRect(Rect& clipRect);
void registerInputHandler(InputHandler* inputHandler);
/**
* @brief Called every frame. Should only be called by Application.
*/
void update();
/**
* @brief Returns smoothed mouse/joystick input in the horizontal axis.
*
* @return The horizontal axis value ranging [-1.0f, 1.0f].
*/
float getHorizontalAxis() const;
/**
* @brief Returns smoothed mouse/joystick input in the vertical axis.
*
* @return The vertical axis value ranging [-1.0f, 1.0f].
*/
float getVerticalAxis() const;
private:
InputHandler* mInputHandler;
float mSmoothHorizontalAxis;
float mSmoothVerticalAxis;
float* mHorizontalHistoryBuffer;
float* mVerticalHistoryBuffer;
float* mTimesHistoryBuffer;
int mCurrentBufferIdx;
Point mMouseLastRel;
Rect mClipRect;
bool mUsingClipRect;
void keyDown(KeyCode keyCode);
void keyUp(KeyCode keyCode);
void mouseMoved(const MouseEvent& event);
void mouseDown(const MouseEvent& event, MouseButton buttonID);
void mouseUp(const MouseEvent& event, MouseButton buttonID);
/**
* @brief Updates the input values that need smoothing.
*/
void updateSmoothInput();
/************************************************************************/
/* STATICS */
/************************************************************************/
static const int HISTORY_BUFFER_SIZE; // Size of buffer used for input smoothing
static const float WEIGHT_MODIFIER;
};
CM_EXPORT Input& gInput();
}