diff options
| author | XaviDCR92 <xavi.dcr@gmail.com> | 2017-03-09 23:59:53 +0100 |
|---|---|---|
| committer | XaviDCR92 <xavi.dcr@gmail.com> | 2017-03-09 23:59:53 +0100 |
| commit | f416816883545433ea33ca410983371e657dba18 (patch) | |
| tree | 1c8682679b1c67261447570c4f66d0d8919bdc00 /Unit.cpp | |
| parent | 8ec41b4410aba535008daf991ea59a8740951d44 (diff) | |
* Nearest unit and/or building is found (no sqrt method used).
* Preliminar unit/building selection algorithm.
* Added cursor onscreen.
- Removed old Peasant sprites. Only 2 sprites needed!
Diffstat (limited to 'Unit.cpp')
| -rw-r--r-- | Unit.cpp | 81 |
1 files changed, 54 insertions, 27 deletions
@@ -15,58 +15,76 @@ /* Sprites */ static TYPE_SPRITE PeasantSpr; -static TYPE_SPRITE PeasantShadowSpr; +static TYPE_SPRITE PeasantWalkingSpr; /* Tables */ static uint8_t UnitHPTable[] = { 25 }; static TYPE_SPRITE * UnitSprTable[] = {&PeasantSpr}; -static TYPE_SPRITE * UnitShadowSprTable[] = {&PeasantShadowSpr}; +static TYPE_SPRITE * UnitWalkingSprTable[] = {&PeasantWalkingSpr}; void UnitInit(void) { - PeasantSpr.Data = PeasantSpr_Data; - PeasantSpr.w = GfxGetWidthFromSpriteData(PeasantSpr_Data); - PeasantSpr.h = GfxGetHeightFromSpriteData(PeasantSpr_Data); + PeasantSpr.Data = Peasant_SprData; + PeasantSpr.w = GfxGetWidthFromSpriteData(Peasant_SprData); + PeasantSpr.h = GfxGetHeightFromSpriteData(Peasant_SprData); PeasantSpr.flip = 0; PeasantSpr.rotation = 0; PeasantSpr.color = GFX_BLACK; - PeasantShadowSpr.Data = PeasantShadowSpr_Data; - PeasantShadowSpr.w = GfxGetWidthFromSpriteData(PeasantShadowSpr_Data); - PeasantShadowSpr.h = GfxGetHeightFromSpriteData(PeasantShadowSpr_Data); - PeasantShadowSpr.flip = 0; - PeasantShadowSpr.rotation = 0; - PeasantShadowSpr.color = GFX_GRAY; - + 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; } -uint8_t UnitGetHpFromID(uint8_t id) -{ - return UnitHPTable[id]; -} - -void UnitDraw(TYPE_CAMERA * ptrCamera, TYPE_UNIT * ptrUnit) +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->built == false) + if(ptrUnit->alive == false) { return; } - CameraApplyCoordinatesToSprite( ptrCamera, - UnitShadowSprTable[id], - ptrUnit->x - 6, - ptrUnit->y ); - GfxDrawSprite(UnitShadowSprTable[id]); + ptrSpr = ptrUnit->walk ? UnitWalkingSprTable[id] : UnitSprTable[id]; + + ptrSpr->rotation = ptrUnit->dir ? ROTCCW : NOROT; + ptrSpr->flip = mirror ? FLIPH : NOFLIP; CameraApplyCoordinatesToSprite( ptrCamera, - UnitSprTable[id], + ptrSpr, ptrUnit->x, ptrUnit->y ); - - GfxDrawSprite(&PeasantSpr); + 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) @@ -79,3 +97,12 @@ 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) +{ + +} |
