137 lines
3.9 KiB
C++
137 lines
3.9 KiB
C++
/* *******************************************************************
|
|
* Includes
|
|
* ******************************************************************/
|
|
|
|
#include "BaseUnit.h"
|
|
#include "Unit.h"
|
|
#include "Sprite.h"
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
|
|
/* *******************************************************************
|
|
* Defines
|
|
* ******************************************************************/
|
|
|
|
/* *******************************************************************
|
|
* Types definition
|
|
* ******************************************************************/
|
|
|
|
/* *******************************************************************
|
|
* Global variables definition
|
|
* ******************************************************************/
|
|
|
|
/* *******************************************************************
|
|
* Local variables definition
|
|
* ******************************************************************/
|
|
|
|
/*****************************************************************//**
|
|
*
|
|
* \brief Bitmap data for idle UNIT_ID_PEASANT.
|
|
*
|
|
*********************************************************************/
|
|
static const PROGMEM uint8_t au8PeasantSprData[] =
|
|
{
|
|
8,
|
|
8,
|
|
0x00,
|
|
0x3C,
|
|
0x42,
|
|
0x99,
|
|
0xA5,
|
|
0x66,
|
|
0x18,
|
|
0x00
|
|
};
|
|
|
|
/* *******************************************************************
|
|
* Local prototypes declaration
|
|
* ******************************************************************/
|
|
|
|
/* *******************************************************************
|
|
* Functions definition
|
|
* ******************************************************************/
|
|
|
|
/*****************************************************************//**
|
|
*
|
|
* \brief Constructor for Unit class.
|
|
*
|
|
*********************************************************************/
|
|
Unit::Unit(const enum Unit::tUnitID eUnitID) :
|
|
BaseUnit(),
|
|
_eUnitID(eUnitID)
|
|
{
|
|
}
|
|
|
|
/*****************************************************************//**
|
|
*
|
|
* \brief Creates a Unit instance by setting default parameters
|
|
* and X/Y coordinates.
|
|
*
|
|
*********************************************************************/
|
|
void Unit::create(const enum Unit::tUnitID eUnitID, const uint16_t x, const uint16_t y)
|
|
{
|
|
/* Execute base class function first. */
|
|
BaseUnit::create(x, y);
|
|
|
|
/* Assign new ID to selected Unit. */
|
|
_eUnitID = eUnitID;
|
|
|
|
/* This table relates all available
|
|
* unit IDs against a bitmap data table. */
|
|
const uint8_t au8HpData[MAX_UNIT_ID] PROGMEM =
|
|
{
|
|
[UNIT_ID_NONE] = 0,
|
|
[UNIT_ID_PEASANT] = 25,
|
|
[UNIT_ID_SWORDMAN] = 35
|
|
};
|
|
|
|
/* Assign health according to unit ID. */
|
|
_hp = au8HpData[eUnitID];
|
|
}
|
|
|
|
/*****************************************************************//**
|
|
*
|
|
* \brief Periodical handler for Unit class.
|
|
*
|
|
*********************************************************************/
|
|
void Unit::handler(void)
|
|
{
|
|
/* Execute base class handler. */
|
|
BaseUnit::handler();
|
|
}
|
|
|
|
/*****************************************************************//**
|
|
*
|
|
* \brief This function checks whether unit is inside screen
|
|
* boundaries and draws its associated bitmap.
|
|
*
|
|
*********************************************************************/
|
|
void Unit::drawHandler(void)
|
|
{
|
|
if (_eUnitID < MAX_UNIT_ID)
|
|
{
|
|
/* This table relates all available
|
|
* unit IDs against a bitmap data table. */
|
|
const uint8_t* const apu8UnitSpriteDataTable[MAX_UNIT_ID] PROGMEM =
|
|
{
|
|
[UNIT_ID_NONE] = NULL,
|
|
[UNIT_ID_PEASANT] = au8PeasantSprData,
|
|
[UNIT_ID_SWORDMAN] = NULL
|
|
};
|
|
|
|
/* Point to appropiate bitmap data given unit ID. */
|
|
const uint8_t* const pu8UnitSpriteData = apu8UnitSpriteDataTable[_eUnitID];
|
|
|
|
Sprite spr(pu8UnitSpriteData);
|
|
|
|
spr.setPos(_x, _y);
|
|
|
|
spr.draw();
|
|
}
|
|
else
|
|
{
|
|
/* Unit has an invalid ID. Exit. */
|
|
}
|
|
}
|