From 67cfc8b2c23177f036eda97f3423d062ba0c3e90 Mon Sep 17 00:00:00 2001 From: XaviDCR92 Date: Fri, 29 Dec 2017 23:19:43 +0100 Subject: * 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. --- Source/Aircraft.c | 76 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 41 insertions(+), 35 deletions(-) (limited to 'Source/Aircraft.c') 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; } -- cgit v1.2.3