PocketEmpires/Camera.cpp

181 lines
4.7 KiB
C++

/* *******************************************************************
* Includes
* ******************************************************************/
#include "Camera.h"
#include <stdint.h>
/* *******************************************************************
* Defines
* ******************************************************************/
#define MAX_CAMERA_SPEED ((int8_t)3)
#define SPEED_CALCULATION_TIME ((uint8_t)3)
#define CAMERA_ACCELERATION ((int8_t)1)
/* *******************************************************************
* Types definition
* ******************************************************************/
/* *******************************************************************
* Global variables definition
* ******************************************************************/
/* *******************************************************************
* Local variables definition
* ******************************************************************/
/* *******************************************************************
* Local prototypes declaration
* ******************************************************************/
/* *******************************************************************
* Functions definition
* ******************************************************************/
/*****************************************************************//**
*
* \brief Constructor for Camera class.
*
*********************************************************************/
Camera::Camera(void) :
_bLocked(false),
_xOffset(0),
_yOffset(0),
_xSpeed(0),
_ySpeed(0),
_speedTimer(0)
{
}
void Camera::handler(void)
{
_xOffset += _xSpeed;
_yOffset += _ySpeed;
if (++_speedTimer >= SPEED_CALCULATION_TIME)
{
_speedTimer = 0;
if (_ySpeed < 0)
{
_ySpeed += CAMERA_ACCELERATION;
}
else if (_ySpeed > 0)
{
_ySpeed -= CAMERA_ACCELERATION;
}
else
{
/* Y speed is already still. Continue. */
}
if (_xSpeed < 0)
{
_xSpeed += CAMERA_ACCELERATION;
}
else if (_xSpeed > 0)
{
_xSpeed -= CAMERA_ACCELERATION;
}
else
{
/* x speed is alreadx still. Continue. */
}
}
}
/*****************************************************************//**
*
* \brief This function transforms X coordinates for a given
* object to camera coordinates.
*
*********************************************************************/
uint8_t Camera::getX(const uint8_t x) const
{
return x + _xOffset;
}
/*****************************************************************//**
*
* \brief This function transforms Y coordinates for a given
* object to camera coordinates.
*
*********************************************************************/
uint8_t Camera::getY(const uint8_t y) const
{
return y + _yOffset;
}
/*****************************************************************//**
*
* \brief Event handler executed when human player presses
* left arrow button.
*
*********************************************************************/
void Camera::onLeftBtnPressed(void)
{
if (_xSpeed < 0)
{
_xSpeed += CAMERA_ACCELERATION << 1;
}
else if (_xSpeed < MAX_CAMERA_SPEED)
{
_xSpeed += CAMERA_ACCELERATION;
}
}
/*****************************************************************//**
*
* \brief Event handler executed when human player presses
* right arrow button.
*
*********************************************************************/
void Camera::onRightBtnPressed(void)
{
if (_xSpeed > 0)
{
_xSpeed -= CAMERA_ACCELERATION << 1;
}
else if (_xSpeed > -MAX_CAMERA_SPEED)
{
_xSpeed -= CAMERA_ACCELERATION;
}
}
/*****************************************************************//**
*
* \brief Event handler executed when human player presses
* up arrow button.
*
*********************************************************************/
void Camera::onUpBtnPressed(void)
{
if (_ySpeed < 0)
{
_ySpeed += CAMERA_ACCELERATION << 1;
}
else if (_ySpeed < MAX_CAMERA_SPEED)
{
_ySpeed += CAMERA_ACCELERATION;
}
}
/*****************************************************************//**
*
* \brief Event handler executed when human player presses
* down arrow button.
*
*********************************************************************/
void Camera::onDownBtnPressed(void)
{
if (_ySpeed > 0)
{
_ySpeed -= CAMERA_ACCELERATION << 1;
}
else if (_ySpeed < MAX_CAMERA_SPEED)
{
_ySpeed -= CAMERA_ACCELERATION;
}
}