/* ******************************************************************* * Includes * ******************************************************************/ #include "Sprite.h" #include "System.h" /* ******************************************************************* * Defines * ******************************************************************/ /* ******************************************************************* * Types definition * ******************************************************************/ /* ******************************************************************* * Global variables definition * ******************************************************************/ const Camera* _cam; /* ******************************************************************* * Local variables definition * ******************************************************************/ /* ******************************************************************* * Local prototypes declaration * ******************************************************************/ /* ******************************************************************* * Functions definition * ******************************************************************/ /*****************************************************************//** * * \brief Constructor for Sprite class. * * \param pu8SprData * Pointer to raw sprite data. * * \param _followCam * Sprite is moved by camera. Default value is true. * * \param u8Colour * Sprite colour. Default value is BLACK. * * \param rotation * Sprite rotation. Default value is NOROT. * *********************************************************************/ Sprite::Sprite(const uint8_t* const pu8SprData, const bool followCam, const uint8_t u8Colour, const uint8_t rotation) : _pu8SprData(pu8SprData), _followCam(followCam), _colour(u8Colour), _rotation(rotation), _x(0), _y(0) { } /*****************************************************************//** * * \brief This function draws a \ref Sprite object on the screen. * * \remarks If \ref Sprite object must be followed by a \ref Camera * object, X and Y coordinates are automatically adjusted. * *********************************************************************/ void Sprite::draw(void) { gb.display.setColor(_colour, WHITE); if (_cam != NULL) { const int16_t x = _followCam ? _cam->getX(_x) : (int16_t)_x; const int16_t y = _followCam ? _cam->getY(_y) : (int16_t)_y; if (_pu8SprData != NULL) { gb.display.drawBitmap((int8_t)x, (int8_t)y, _pu8SprData); } else { /* Undefined sprite data. */ } } else { /* Error: uninitialized camera. */ } } uint8_t Sprite::getWidth(const uint8_t* const pu8SprData) { enum { WIDTH_DATA_INDEX = 0 }; /* Retrieve unit width from sprite data. */ const uint8_t w = pgm_read_byte(&pu8SprData[WIDTH_DATA_INDEX]); /* Return retrieved width. */ return w; } uint8_t Sprite::getHeight(const uint8_t* const pu8SprData) { enum { HEIGHT_DATA_INDEX = 1 }; /* Retrieve unit height from sprite data. */ const uint8_t h = pgm_read_byte(&pu8SprData[HEIGHT_DATA_INDEX]); /* Return retrieved height. */ return h; } /*****************************************************************//** * * \brief Reportedly, this function updates X/Y coordinates for * a Sprite object. * * \param x * X position, relative to screen coordinates origin. * * \param y * Y position, relative to screen coordinates origin. * *********************************************************************/ void Sprite::setPos(const uint8_t x, const uint8_t y) { /* Update coords according to input parameters. */ _x = x; _y = y; }