109 lines
2.6 KiB
C++
109 lines
2.6 KiB
C++
/* **************************************
|
|
* Includes *
|
|
* **************************************/
|
|
|
|
#include "Unit.h"
|
|
#include "PeasantSpr.c"
|
|
|
|
/* **************************************
|
|
* Defines *
|
|
* **************************************/
|
|
|
|
/* **************************************
|
|
* Local variables *
|
|
* **************************************/
|
|
|
|
/* Sprites */
|
|
static TYPE_SPRITE PeasantSpr;
|
|
static TYPE_SPRITE PeasantWalkingSpr;
|
|
|
|
/* Tables */
|
|
static uint8_t UnitHPTable[] = { 25 };
|
|
static TYPE_SPRITE * UnitSprTable[] = {&PeasantSpr};
|
|
static TYPE_SPRITE * UnitWalkingSprTable[] = {&PeasantWalkingSpr};
|
|
|
|
void UnitInit(void)
|
|
{
|
|
PeasantSpr.Data = Peasant_SprData;
|
|
PeasantSpr.w = GfxGetWidthFromSpriteData(Peasant_SprData);
|
|
PeasantSpr.h = GfxGetHeightFromSpriteData(Peasant_SprData);
|
|
PeasantSpr.flip = 0;
|
|
PeasantSpr.rotation = 0;
|
|
PeasantSpr.color = GFX_BLACK;
|
|
|
|
PeasantWalkingSpr.Data = Peasant_Walking_SprData;
|
|
PeasantWalkingSpr.w = GfxGetWidthFromSpriteData(Peasant_Walking_SprData);
|
|
PeasantWalkingSpr.h = GfxGetHeightFromSpriteData(Peasant_Walking_SprData);
|
|
PeasantWalkingSpr.flip = 0;
|
|
PeasantWalkingSpr.rotation = 0;
|
|
PeasantWalkingSpr.color = GFX_BLACK;
|
|
}
|
|
|
|
void UnitDraw(TYPE_CAMERA * ptrCamera, TYPE_UNIT * ptrUnit, bool bSelected)
|
|
{
|
|
uint8_t id = ptrUnit->id;
|
|
TYPE_SPRITE * ptrSpr;
|
|
static uint8_t walk_counter = 0;
|
|
static bool mirror = false;
|
|
|
|
if(ptrUnit->alive == false)
|
|
{
|
|
return;
|
|
}
|
|
|
|
ptrSpr = ptrUnit->walk ? UnitWalkingSprTable[id] : UnitSprTable[id];
|
|
|
|
ptrSpr->rotation = ptrUnit->dir ? ROTCCW : NOROT;
|
|
ptrSpr->flip = mirror ? FLIPH : NOFLIP;
|
|
|
|
CameraApplyCoordinatesToSprite( ptrCamera,
|
|
ptrSpr,
|
|
ptrUnit->x,
|
|
ptrUnit->y );
|
|
|
|
GfxDrawSprite(ptrSpr);
|
|
|
|
if( (bSelected == true) && (ptrUnit->selected == false) )
|
|
{
|
|
TYPE_COLLISION_BLOCK cb;
|
|
|
|
cb = CameraApplyCoordinatesToCoordinates(ptrCamera, ptrUnit->x, ptrUnit->y);
|
|
|
|
GfxDrawCircle(cb.x + 3, cb.y + 3, UnitGetWidthFromID(ptrUnit->id) >> 2, GFX_GRAY);
|
|
}
|
|
else if(ptrUnit->selected == true)
|
|
{
|
|
TYPE_COLLISION_BLOCK cb;
|
|
|
|
cb = CameraApplyCoordinatesToCoordinates(ptrCamera, ptrUnit->x, ptrUnit->y);
|
|
|
|
GfxDrawCircle(cb.x + 3, cb.y + 3, UnitGetWidthFromID(ptrUnit->id) >> 2, GFX_BLACK);
|
|
}
|
|
|
|
if(++walk_counter > 10)
|
|
{
|
|
walk_counter = 0;
|
|
mirror = mirror ? true : false;
|
|
}
|
|
}
|
|
|
|
uint8_t UnitGetWidthFromID(uint8_t id)
|
|
{
|
|
return GfxGetWidthFromSpriteData(UnitSprTable[id]->Data);
|
|
}
|
|
|
|
uint8_t UnitGetHeightFromID(uint8_t id)
|
|
{
|
|
return GfxGetHeightFromSpriteData(UnitSprTable[id]->Data);
|
|
}
|
|
|
|
uint8_t UnitGetHpFromID(uint8_t id)
|
|
{
|
|
return UnitHPTable[id];
|
|
}
|
|
|
|
void UnitSelectedOptions(TYPE_UNIT* ptrUnit)
|
|
{
|
|
|
|
}
|