/* ************************************** * 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) { }