diff options
| author | XaviDCR92 <xavi.dcr@gmail.com> | 2018-08-05 17:58:03 +0200 |
|---|---|---|
| committer | XaviDCR92 <xavi.dcr@gmail.com> | 2018-08-05 17:58:03 +0200 |
| commit | 4efe5ad6f9c8abb53df1e06921ce010ced24868e (patch) | |
| tree | 24bae4ac1f561fec6af339ab0a2ce7de0ad28718 | |
| parent | c501d0e4e732e09a4a75d873e976b2c801ef7920 (diff) | |
* Sprite data width and height is now extracted from Sprite class.
| -rw-r--r-- | BaseUnit.cpp | 33 | ||||
| -rw-r--r-- | BaseUnit.h | 2 | ||||
| -rw-r--r-- | Camera.cpp | 18 | ||||
| -rw-r--r-- | Camera.h | 35 | ||||
| -rw-r--r-- | Sprite.cpp | 34 | ||||
| -rw-r--r-- | Sprite.h | 2 |
6 files changed, 97 insertions, 27 deletions
diff --git a/BaseUnit.cpp b/BaseUnit.cpp index 8fde6b4..f374ab1 100644 --- a/BaseUnit.cpp +++ b/BaseUnit.cpp @@ -3,7 +3,9 @@ * ******************************************************************/ #include "BaseUnit.h" +#include "Camera.h" #include "System.h" +#include "Sprite.h" #include <stdbool.h> #include <stdint.h> #include <Gamebuino.h> @@ -24,6 +26,8 @@ * Local variables definition * ******************************************************************/ +static const Camera* cam; + /* ******************************************************************* * Local prototypes declaration * ******************************************************************/ @@ -71,6 +75,17 @@ void BaseUnit::handler(void) /*****************************************************************//** * + * \brief This function sets global camera for all BaseUnit + * instances. + * + *********************************************************************/ +void BaseUnit::setCamera(const Camera* const c) +{ + cam = c; +} + +/*****************************************************************//** + * * \brief Periodical draw handler for BaseUnit class. * *********************************************************************/ @@ -78,19 +93,19 @@ void BaseUnit::drawHandler(const uint8_t* const pu8SprData) { if (isSelected()) { - enum - { - WIDTH_DATA_INDEX, - HEIGHT_DATA_INDEX - }; - /* Retrieve unit width from sprite data. */ - const uint8_t w = pgm_read_byte(&pu8SprData[WIDTH_DATA_INDEX]); + const uint8_t w = Sprite::getWidth(pu8SprData); /* Retrieve unit height from sprite data. */ - const uint8_t h = pgm_read_byte(&pu8SprData[HEIGHT_DATA_INDEX]); + const uint8_t h = Sprite::getHeight(pu8SprData); + + if (cam != NULL) + { + const uint8_t x = cam->getX(_x - w); + const uint8_t y = cam->getY(_y - h); - gb.display.drawRect(_x, _y, w, h); + gb.display.drawRoundRect(x, y, w << 1, h << 1, 2); + } } else { @@ -7,6 +7,7 @@ #include <stdbool.h> #include <stdint.h> +#include "Camera.h" /* ******************************************************************* * Defines @@ -35,6 +36,7 @@ class BaseUnit void handler(void); void drawHandler(const uint8_t* const pu8SprData); void create(const uint16_t x, const uint16_t y); + static void setCamera(const Camera* const c); bool isAlive(void); bool isSelected(void); void setSelected(const bool bSelect); @@ -51,15 +51,25 @@ Camera::Camera(void) : { } +uint16_t Camera::getRealX(const int16_t x) const +{ + return static_cast<uint16_t>(x + _xOffset); +} + +uint16_t Camera::getRealY(const int16_t y) const +{ + return static_cast<uint16_t>(y + _yOffset); +} + /*****************************************************************//** * * \brief This function transforms X coordinates for a given * object to camera coordinates. * *********************************************************************/ -uint8_t Camera::getX(const uint8_t x) const +int16_t Camera::getX(const uint16_t x) const { - return x - _xOffset; + return static_cast<int16_t>(x - _xOffset); } /*****************************************************************//** @@ -68,9 +78,9 @@ uint8_t Camera::getX(const uint8_t x) const * object to camera coordinates. * *********************************************************************/ -uint8_t Camera::getY(const uint8_t y) const +int16_t Camera::getY(const uint16_t y) const { - return y - _yOffset; + return static_cast<int16_t>(y - _yOffset); } /*****************************************************************//** @@ -1,25 +1,36 @@ #ifndef CAMERA_H__ #define CAMERA_H__ -/* ************************************* +/* ******************************************************************* * Includes - * *************************************/ + * ******************************************************************/ #include "Cursor.h" #include <stdint.h> #include <stdbool.h> -/* ************************************* +/* ******************************************************************* * Defines - * *************************************/ + * ******************************************************************/ -/* ************************************* - * Structs and enums - * *************************************/ +/* ******************************************************************* + * Global types definition + * ******************************************************************/ -/* ************************************* +/* Forward declaration. */ +class Cursor; + +/* ******************************************************************* + * Global variables declaration + * ******************************************************************/ + +/* ******************************************************************* + * Global functions declaration + * ******************************************************************/ + +/* ******************************************************************* * Class definition - * *************************************/ + * ******************************************************************/ class Camera { @@ -27,8 +38,10 @@ class Camera Camera(void); void adjustLock(const bool bLock); bool isLocked(void) const; - uint8_t getX(const uint8_t x) const; - uint8_t getY(const uint8_t y) const; + int16_t getX(const uint16_t x) const; + int16_t getY(const uint16_t y) const; + uint16_t getRealX(const int16_t x) const; + uint16_t getRealY(const int16_t y) const; /* Event handlers. */ void onLeftBtnPressed(Cursor& cursor); @@ -72,12 +72,12 @@ void Sprite::draw(void) if (_cam != NULL) { - const uint8_t x = _followCam ? _cam->getX(_x) : _x; - const uint8_t y = _followCam ? _cam->getY(_y) : _y; + 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(x, y, _pu8SprData); + gb.display.drawBitmap((int8_t)x, (int8_t)y, _pu8SprData); } else { @@ -90,6 +90,34 @@ void Sprite::draw(void) } } +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 @@ -44,6 +44,8 @@ class Sprite { _cam = cam; }; + static uint8_t getWidth(const uint8_t* const pu8SprData); + static uint8_t getHeight(const uint8_t* const pu8SprData); private: const uint8_t* _pu8SprData; |
