aboutsummaryrefslogtreecommitdiff
path: root/Source/Aircraft.c
diff options
context:
space:
mode:
authorXaviDCR92 <xavi.dcr@gmail.com>2017-12-29 23:19:43 +0100
committerXaviDCR92 <xavi.dcr@gmail.com>2017-12-29 23:19:43 +0100
commit67cfc8b2c23177f036eda97f3423d062ba0c3e90 (patch)
tree736dd4c76c30bf0f74ef4bf73f1218219ab26dc0 /Source/Aircraft.c
parent0d1df70f2d1a08fdb6389391ee59afc5fbc6277a (diff)
downloadairport-67cfc8b2c23177f036eda97f3423d062ba0c3e90.tar.gz
* RWY_DIR and AIRCRAFT_DIRECTION have been joint into a single enum.
* Game.c: new prototypes GameGetParkingDirection() and GameGetRunwayDirection(). * Slight optimizations into GameRenderLevel(). * Added some comment headers into Gfx.c.
Diffstat (limited to 'Source/Aircraft.c')
-rw-r--r--Source/Aircraft.c76
1 files changed, 41 insertions, 35 deletions
diff --git a/Source/Aircraft.c b/Source/Aircraft.c
index 423eb13..7ecd8af 100644
--- a/Source/Aircraft.c
+++ b/Source/Aircraft.c
@@ -118,7 +118,8 @@ void AircraftInit(void)
bool AircraftAddNew( TYPE_FLIGHT_DATA* ptrFlightData,
uint8_t FlightDataIndex,
- uint16_t* targets )
+ uint16_t* targets,
+ DIRECTION direction )
{
TYPE_AIRCRAFT_DATA* ptrAircraft = &AircraftData[AircraftIndex];
uint8_t level_columns = GameGetLevelColumns();
@@ -141,12 +142,9 @@ bool AircraftAddNew( TYPE_FLIGHT_DATA* ptrFlightData,
if (ptrFlightData->FlightDirection[FlightDataIndex] == ARRIVAL)
{
- RWY_DIR rwyDir = GameGetRunwayDirection(ptrAircraft->Target[0]);
- // Calculate direction automatically.
-
- switch (rwyDir)
+ switch (direction)
{
- case RWY_DIR_EAST:
+ case DIR_EAST:
ptrAircraft->IsoPos.x = 0;
ptrAircraft->IsoPos.y = targets[0] / level_columns;
@@ -157,11 +155,9 @@ bool AircraftAddNew( TYPE_FLIGHT_DATA* ptrFlightData,
ptrAircraft->IsoPos.z = targets[0] % level_columns;
ptrAircraft->IsoPos.z <<= TILE_SIZE_BIT_SHIFT - 1;
ptrAircraft->IsoPos.z = fix16_from_int(ptrAircraft->IsoPos.z);
-
- ptrAircraft->Direction = AIRCRAFT_DIR_EAST;
break;
- case RWY_DIR_SOUTH:
+ case DIR_SOUTH:
ptrAircraft->IsoPos.x = targets[0] % level_columns;
ptrAircraft->IsoPos.x <<= TILE_SIZE_BIT_SHIFT;
ptrAircraft->IsoPos.x += TILE_SIZE >> 1; // Adjust to tile center
@@ -172,24 +168,30 @@ bool AircraftAddNew( TYPE_FLIGHT_DATA* ptrFlightData,
ptrAircraft->IsoPos.z = targets[0] / level_columns;
ptrAircraft->IsoPos.z <<= TILE_SIZE_BIT_SHIFT - 1;
ptrAircraft->IsoPos.z = fix16_from_int(ptrAircraft->IsoPos.z);
-
- ptrAircraft->Direction = AIRCRAFT_DIR_SOUTH;
break;
- case RWY_INVALID_DIR:
+ case NO_DIRECTION:
// Fall through
default:
- Serial_printf("Invalid runway direction %d for inbound flight.\n", rwyDir);
+ Serial_printf("Invalid runway direction %d for inbound flight.\n", direction);
return false;
}
}
else if (ptrFlightData->FlightDirection[FlightDataIndex] == DEPARTURE)
{
+ if (direction == NO_DIRECTION)
+ {
+ Serial_printf("Invalid direction for outbound flight.\n");
+ return false;
+ }
+
ptrAircraft->IsoPos.x = GameGetXFromTile(ptrFlightData->Parking[FlightDataIndex]);
ptrAircraft->IsoPos.y = GameGetYFromTile(ptrFlightData->Parking[FlightDataIndex]);
ptrAircraft->IsoPos.z = 0;
}
+ ptrAircraft->Direction = direction;
+
ptrAircraft->State = ptrFlightData->State[FlightDataIndex];
AircraftFlightDataIdx_HashTable[FlightDataIndex] = AircraftIndex;
@@ -206,6 +208,8 @@ bool AircraftAddNew( TYPE_FLIGHT_DATA* ptrFlightData,
Serial_printf(" %d", ptrAircraft->Target[i]);
}
+ Serial_printf("\n\tDirection: %d\n", ptrAircraft->Direction);
+
Serial_printf("\nLivery: %d\n", ptrAircraft->Livery );
Serial_printf("Aircraft position: {%d, %d, %d}\n",
@@ -332,23 +336,23 @@ bool AircraftCheckPath(TYPE_AIRCRAFT_DATA* ptrAircraft, TYPE_AIRCRAFT_DATA* ptrO
switch (ptrAircraft->Direction)
{
- case AIRCRAFT_DIR_EAST:
+ case DIR_EAST:
nextTile = currentTile + 1;
break;
- case AIRCRAFT_DIR_WEST:
+ case DIR_WEST:
nextTile = currentTile - 1;
break;
- case AIRCRAFT_DIR_NORTH:
+ case DIR_NORTH:
nextTile = currentTile - GameGetLevelColumns();
break;
- case AIRCRAFT_DIR_SOUTH:
+ case DIR_SOUTH:
nextTile = currentTile + GameGetLevelColumns();
break;
- case AIRCRAFT_DIR_NO_DIRECTION:
+ case NO_DIRECTION:
// Fall through
default:
Serial_printf("AircraftCheckPath: Undefined direction\n");
@@ -508,11 +512,13 @@ void AircraftRender(TYPE_PLAYER* ptrPlayer, uint8_t aircraftIdx)
}
else if (AircraftSpr.x > X_SCREEN_RESOLUTION)
{
- ArrowSpr.x = X_SCREEN_RESOLUTION - ArrowSpr.w;
+ ArrowSpr.x = X_SCREEN_RESOLUTION - ArrowSpr.w;
+ ArrowSpr.mx = ArrowSpr.w >> 1;
+ ArrowSpr.my = ArrowSpr.h >> 1;
}
else
{
- ArrowSpr.x = AircraftSpr.x;
+ ArrowSpr.x = AircraftSpr.x;
}
if (AircraftSpr.y < 0)
@@ -569,7 +575,7 @@ void AircraftDirection(TYPE_AIRCRAFT_DATA* ptrAircraft)
}
else
{
- ptrAircraft->Direction = AIRCRAFT_DIR_EAST;
+ ptrAircraft->Direction = DIR_EAST;
ptrAircraft->IsoPos.x += ptrAircraft->Speed;
}
}
@@ -581,7 +587,7 @@ void AircraftDirection(TYPE_AIRCRAFT_DATA* ptrAircraft)
}
else
{
- ptrAircraft->Direction = AIRCRAFT_DIR_WEST;
+ ptrAircraft->Direction = DIR_WEST;
ptrAircraft->IsoPos.x -= ptrAircraft->Speed;
}
}
@@ -600,7 +606,7 @@ void AircraftDirection(TYPE_AIRCRAFT_DATA* ptrAircraft)
}
else
{
- ptrAircraft->Direction = AIRCRAFT_DIR_SOUTH;
+ ptrAircraft->Direction = DIR_SOUTH;
ptrAircraft->IsoPos.y += ptrAircraft->Speed;
}
}
@@ -612,7 +618,7 @@ void AircraftDirection(TYPE_AIRCRAFT_DATA* ptrAircraft)
}
else
{
- ptrAircraft->Direction = AIRCRAFT_DIR_NORTH;
+ ptrAircraft->Direction = DIR_NORTH;
ptrAircraft->IsoPos.y -= ptrAircraft->Speed;
}
}
@@ -640,23 +646,23 @@ void AircraftDirection(TYPE_AIRCRAFT_DATA* ptrAircraft)
// STATE_CLIMBING
switch(ptrAircraft->Direction)
{
- case AIRCRAFT_DIR_EAST:
+ case DIR_EAST:
ptrAircraft->IsoPos.x += ptrAircraft->Speed;
break;
- case AIRCRAFT_DIR_WEST:
+ case DIR_WEST:
ptrAircraft->IsoPos.x -= ptrAircraft->Speed;
break;
- case AIRCRAFT_DIR_NORTH:
+ case DIR_NORTH:
ptrAircraft->IsoPos.y -= ptrAircraft->Speed;
break;
- case AIRCRAFT_DIR_SOUTH:
+ case DIR_SOUTH:
ptrAircraft->IsoPos.y += ptrAircraft->Speed;
break;
- case AIRCRAFT_DIR_NO_DIRECTION:
+ case NO_DIRECTION:
// Fall through
default:
return;
@@ -695,27 +701,27 @@ void AircraftUpdateSpriteFromData(TYPE_AIRCRAFT_DATA* ptrAircraft)
switch(ptrAircraft->Direction)
{
- case AIRCRAFT_DIR_NORTH:
+ case DIR_NORTH:
AircraftSpr.v += AircraftSpr.h;
AircraftSpr.attribute |= H_FLIP;
break;
- case AIRCRAFT_DIR_SOUTH:
+ case DIR_SOUTH:
AircraftSpr.v += 0;
AircraftSpr.attribute |= H_FLIP;
break;
- case AIRCRAFT_DIR_EAST:
+ case DIR_EAST:
AircraftSpr.v += 0;
AircraftSpr.attribute &= ~(H_FLIP);
break;
- case AIRCRAFT_DIR_WEST:
+ case DIR_WEST:
AircraftSpr.v += AircraftSpr.h;
AircraftSpr.attribute &= ~(H_FLIP);
break;
- case AIRCRAFT_DIR_NO_DIRECTION:
+ case NO_DIRECTION:
// Fall through
default:
break;
@@ -791,7 +797,7 @@ void AircraftFromFlightDataIndexAddTargets(uint8_t index, uint16_t* targets)
AircraftAddTargets(AircraftFromFlightDataIndex(index), targets);
}
-AIRCRAFT_DIRECTION AircraftGetDirection(TYPE_AIRCRAFT_DATA* ptrAircraft)
+DIRECTION AircraftGetDirection(TYPE_AIRCRAFT_DATA* ptrAircraft)
{
return ptrAircraft->Direction;
}