summaryrefslogtreecommitdiff
path: root/Unit.cpp
diff options
context:
space:
mode:
authorXaviDCR92 <xavi.dcr@gmail.com>2017-03-09 23:59:53 +0100
committerXaviDCR92 <xavi.dcr@gmail.com>2017-03-09 23:59:53 +0100
commitf416816883545433ea33ca410983371e657dba18 (patch)
tree1c8682679b1c67261447570c4f66d0d8919bdc00 /Unit.cpp
parent8ec41b4410aba535008daf991ea59a8740951d44 (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.cpp81
1 files changed, 54 insertions, 27 deletions
diff --git a/Unit.cpp b/Unit.cpp
index 8e6555e..e496231 100644
--- a/Unit.cpp
+++ b/Unit.cpp
@@ -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)
+{
+
+}