/* ******************************************************************* * Includes * ******************************************************************/ #include "Camera.h" #include /* ******************************************************************* * 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; } }