From 2cf2d608af862e812e7fd3ac580f869141a96fa7 Mon Sep 17 00:00:00 2001 From: XaviDCR92 Date: Sun, 5 Nov 2017 04:16:32 +0100 Subject: + Added copy of BitmapEncoder + New sprite and unit "Town center" * Provisional collision checking. * Many other modifications. --- Unit.c | 74 ++++++++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 43 insertions(+), 31 deletions(-) (limited to 'Unit.c') 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 -- cgit v1.2.3