summaryrefslogtreecommitdiff
path: root/Unit.c
diff options
context:
space:
mode:
authorXaviDCR92 <xavi.dcr@gmail.com>2017-11-05 04:16:32 +0100
committerXaviDCR92 <xavi.dcr@gmail.com>2017-11-05 04:16:32 +0100
commit2cf2d608af862e812e7fd3ac580f869141a96fa7 (patch)
tree29a356a46635e4bc14e9e7342eb5a41defcab899 /Unit.c
parentb764612a79100271270012053bdb1e4302cd93b7 (diff)
downloadpocketempires-2cf2d608af862e812e7fd3ac580f869141a96fa7.tar.gz
+ Added copy of BitmapEncoder
+ New sprite and unit "Town center" * Provisional collision checking. * Many other modifications.
Diffstat (limited to 'Unit.c')
-rw-r--r--Unit.c74
1 files changed, 43 insertions, 31 deletions
diff --git a/Unit.c b/Unit.c
index 7d12666..26beae0 100644
--- a/Unit.c
+++ b/Unit.c
@@ -3,8 +3,9 @@
* **************************************/
#include "Unit.h"
-#include "PeasantSpr.inc"
-#include "BarracksSpr.inc"
+#include "PeasantSpr.i"
+#include "BarracksSpr.i"
+#include "TownCentre.i"
/* **************************************
* Defines *
@@ -30,33 +31,32 @@ struct t_coordinates
/* Tables */
static uint8_t const UnitHPTable[MAX_UNITS_BUILDINGS] = { [PEASANT] = 25 ,
- [BARRACKS] = 100 };
-static uint8_t const UnitSpeedTable[MAX_UNITS_BUILDINGS] = { [PEASANT] = 1 ,
- [BARRACKS] = 0 };
+ [BARRACKS] = 100,
+ [TOWN_CENTER] = 200 };
-static const char* const UnitActionsTable_Level[MAX_ACTIONS] = { [ACTION_BUILD] = "BUILD",
- [ACTION_ATTACK] = "ATTACK",
- [ACTION_CREATE_UNIT] = "CREATE"};
+static uint8_t const UnitSpeedTable[MAX_UNITS_BUILDINGS] = { [PEASANT] = 1,
+ [BARRACKS] = 0,
+ [TOWN_CENTER] = 0 };
-static uint8_t const UnitActionsTable[MAX_UNITS_BUILDINGS] = { [PEASANT] = ((1 << ACTION_BUILD) | (1 << ACTION_ATTACK)),
- [BARRACKS] = (1 << ACTION_CREATE_UNIT) };
+static const char* const UnitActionsTable_Level[MAX_ACTIONS] = { [ACTION_BUILD_BARRACKS] = "B.BARR",
+ [ACTION_ATTACK] = "ATTACK",
+ [ACTION_CREATE_PEASANT] = "C.PEAS."};
+
+static uint8_t const UnitActionsTable[MAX_UNITS_BUILDINGS] = { [PEASANT] = ((1 << ACTION_BUILD_BARRACKS) | (1 << ACTION_ATTACK)),
+ [BARRACKS] = (1 << ACTION_CREATE_PEASANT),
+ [TOWN_CENTER] = (1 << ACTION_CREATE_PEASANT) };
// **************
// Sprite tables
// **************
static TYPE_SPRITE UnitSprTable[MAX_UNITS_BUILDINGS];
static TYPE_SPRITE UnitWalkingShadowSprTable[MAX_UNITS_BUILDINGS];
-static const struct t_coordinates UnitShadowOffsetTable[MAX_BUILDING_ID - FIRST_BUILDING_ID] = { [BARRACKS - FIRST_BUILDING_ID] = {.x = -6, .y = 0} };
+static const struct t_coordinates UnitShadowOffsetTable[MAX_BUILDING_ID - FIRST_BUILDING_ID] = { [BARRACKS - FIRST_BUILDING_ID] = {.x = -6, .y = 0},
+ [TOWN_CENTER - FIRST_BUILDING_ID] = {.x = -3, .y = 0} };
void UnitInit(void)
{
- enum
- {
- BARRACKS_SHADOW_OFFSET_X = -8,
- BARRACKS_SHADOW_OFFSET_Y = 0
- };
-
- UnitSprTable[PEASANT].Data = Peasant_SprData;
+ UnitSprTable[PEASANT].Data = Peasant_SprData;
UnitSprTable[PEASANT].w = GfxGetWidthFromSpriteData(Peasant_SprData);
UnitSprTable[PEASANT].h = GfxGetHeightFromSpriteData(Peasant_SprData);
UnitSprTable[PEASANT].flip = 0;
@@ -77,18 +77,32 @@ void UnitInit(void)
UnitSprTable[BARRACKS].rotation = 0;
UnitSprTable[BARRACKS].color = GFX_BLACK;
+ UnitSprTable[TOWN_CENTER].Data = TownCentreSprData;
+ UnitSprTable[TOWN_CENTER].w = GfxGetWidthFromSpriteData(TownCentreSprData);
+ UnitSprTable[TOWN_CENTER].h = GfxGetHeightFromSpriteData(TownCentreSprData);
+ UnitSprTable[TOWN_CENTER].flip = 0;
+ UnitSprTable[TOWN_CENTER].rotation = 0;
+ UnitSprTable[TOWN_CENTER].color = GFX_BLACK;
+
UnitWalkingShadowSprTable[BARRACKS].Data = BarracksShadowSpr_Data;
UnitWalkingShadowSprTable[BARRACKS].w = GfxGetWidthFromSpriteData(BarracksShadowSpr_Data);
UnitWalkingShadowSprTable[BARRACKS].h = GfxGetHeightFromSpriteData(BarracksShadowSpr_Data);
UnitWalkingShadowSprTable[BARRACKS].flip = 0;
UnitWalkingShadowSprTable[BARRACKS].rotation = 0;
UnitWalkingShadowSprTable[BARRACKS].color = GFX_GRAY;
+
+ UnitWalkingShadowSprTable[TOWN_CENTER].Data = TownCentreShadowSprData;
+ UnitWalkingShadowSprTable[TOWN_CENTER].w = GfxGetWidthFromSpriteData(TownCentreShadowSprData);
+ UnitWalkingShadowSprTable[TOWN_CENTER].h = GfxGetHeightFromSpriteData(TownCentreShadowSprData);
+ UnitWalkingShadowSprTable[TOWN_CENTER].flip = 0;
+ UnitWalkingShadowSprTable[TOWN_CENTER].rotation = 0;
+ UnitWalkingShadowSprTable[TOWN_CENTER].color = GFX_GRAY;
}
void UnitDraw(TYPE_UNIT* ptrUnit, TYPE_CAMERA* ptrCamera, bool bHighlighted)
{
uint8_t id = ptrUnit->id;
- TYPE_SPRITE * ptrSpr;
+ TYPE_SPRITE* ptrSpr;
if (ptrUnit->alive == false)
{
@@ -156,10 +170,6 @@ void UnitDraw(TYPE_UNIT* ptrUnit, TYPE_CAMERA* ptrCamera, bool bHighlighted)
ptrSpr->flip |= GFX_FLIPV;
}
break;
-
- default:
- // Invalid direction
- break;
}
}
else
@@ -244,7 +254,7 @@ void UnitHandler(TYPE_UNIT* unitArray, size_t sz)
}
- bool bMoving = false;
+ bool bMoving = true;
if (ptrUnit->walking == true)
{
@@ -256,14 +266,12 @@ void UnitHandler(TYPE_UNIT* unitArray, size_t sz)
ptrUnit->dir = DIRECTION_LEFT;
x_d = -UnitSpeedTable[ptrUnit->id];
//~ ptrUnit->x -= UnitSpeedTable[ptrUnit->id];
- bMoving = true;
}
else if ( (ptrUnit->x + UnitSpeedTable[ptrUnit->id]) < ptrUnit->target_x)
{
ptrUnit->dir = DIRECTION_RIGHT;
x_d = UnitSpeedTable[ptrUnit->id];
//~ ptrUnit->x += UnitSpeedTable[ptrUnit->id];
- bMoving = true;
}
if ( (ptrUnit->y - UnitSpeedTable[ptrUnit->id]) > ptrUnit->target_y)
@@ -271,14 +279,18 @@ void UnitHandler(TYPE_UNIT* unitArray, size_t sz)
ptrUnit->dir = DIRECTION_UP;
y_d = -UnitSpeedTable[ptrUnit->id];
//~ ptrUnit->y -= UnitSpeedTable[ptrUnit->id];
- bMoving = true;
}
else if ( (ptrUnit->y + UnitSpeedTable[ptrUnit->id]) < ptrUnit->target_y)
{
ptrUnit->dir = DIRECTION_DOWN;
y_d = UnitSpeedTable[ptrUnit->id];
//~ ptrUnit->y += UnitSpeedTable[ptrUnit->id];
- bMoving = true;
+ }
+ else
+ {
+ x_d = ptrUnit->x - ptrUnit->target_x;
+ y_d = ptrUnit->y - ptrUnit->target_y;
+ bMoving = false;
}
ptrUnit->walking = bMoving;
@@ -298,7 +310,7 @@ void UnitHandler(TYPE_UNIT* unitArray, size_t sz)
.w = UnitGetWidthFromID(ptrUnit->id),
.h = UnitGetHeightFromID(ptrUnit->id) };
TYPE_COLLISION_BLOCK ou;
-
+
if (ptrOtherUnit->alive == false)
{
continue;
@@ -315,7 +327,7 @@ void UnitHandler(TYPE_UNIT* unitArray, size_t sz)
ou.y = ptrOtherUnit->x;
ou.w = UnitGetWidthFromID(ptrOtherUnit->id);
ou.h = UnitGetHeightFromID(ptrOtherUnit->id);
-
+
if (SystemCollisionCheck(cu, ou) == true)
{
ptrUnit->walking = false;
@@ -323,7 +335,7 @@ void UnitHandler(TYPE_UNIT* unitArray, size_t sz)
}
}
}
-
+
if (ptrUnit->walking == true)
{
// If no collision is detected, keep moving to the new position