diff options
| author | XaviDCR92 <xavi.dcr@gmail.com> | 2017-05-30 07:00:36 +0200 |
|---|---|---|
| committer | XaviDCR92 <xavi.dcr@gmail.com> | 2017-05-30 07:00:36 +0200 |
| commit | 30b18fd262038f3ffaf24ad9884e1e121850019b (patch) | |
| tree | b1bdba42ca62714585156d85e0d1a7dc71342911 /Source | |
| parent | 12247026c5c2e69464ae54ae3a5156fcc725d4b3 (diff) | |
| download | airport-30b18fd262038f3ffaf24ad9884e1e121850019b.tar.gz | |
* Departure flights are not created if parking is busy.
* Available TILE_PARKING and TILE_HOLDING_RWY are showed in green.
* Fixed lock/unlock target logic.
* Added TILE_PARKING_2.
Diffstat (limited to 'Source')
| -rw-r--r-- | Source/Aircraft.c | 26 | ||||
| -rw-r--r-- | Source/Aircraft.h | 1 | ||||
| -rw-r--r-- | Source/Game.c | 173 | ||||
| -rw-r--r-- | Source/GameGui.c | 9 | ||||
| -rw-r--r-- | Source/Makefile | 3 |
5 files changed, 160 insertions, 52 deletions
diff --git a/Source/Aircraft.c b/Source/Aircraft.c index 7ccc1e2..da8e03a 100644 --- a/Source/Aircraft.c +++ b/Source/Aircraft.c @@ -190,10 +190,13 @@ bool AircraftRemove(uint8_t aircraftIdx) {
TYPE_AIRCRAFT_DATA* ptrAircraft = &AircraftData[i];
- if(ptrAircraft->FlightDataIdx == aircraftIdx)
+ if(ptrAircraft->State != STATE_IDLE)
{
- ptrAircraft->State = STATE_IDLE;
- return true;
+ if(ptrAircraft->FlightDataIdx == aircraftIdx)
+ {
+ ptrAircraft->State = STATE_IDLE;
+ return true;
+ }
}
}
@@ -412,6 +415,7 @@ void AircraftDirection(TYPE_AIRCRAFT_DATA* ptrAircraft) if(GameInsideLevelFromIsoPos(&ptrAircraft->IsoPos) == true)
{
+ ptrAircraft->State = STATE_IDLE;
dprintf("Flight %d removed\n", ptrAircraft->FlightDataIdx);
GameRemoveFlight(ptrAircraft->FlightDataIdx);
}
@@ -500,7 +504,15 @@ void AircraftAddTargets(TYPE_AIRCRAFT_DATA* ptrAircraft, uint16_t* targets) uint16_t AircraftGetTileFromFlightDataIndex(uint8_t index)
{
TYPE_ISOMETRIC_POS isoPos = AircraftGetIsoPos(index);
- return GameGetTileFromIsoPosition(&isoPos);
+
+ if(AircraftFromFlightDataIndex(index)->State != STATE_IDLE)
+ {
+ return GameGetTileFromIsoPosition(&isoPos);
+ }
+ else
+ {
+ return 0;
+ }
}
TYPE_AIRCRAFT_DATA* AircraftFromFlightDataIndex(uint8_t index)
@@ -531,3 +543,9 @@ AIRCRAFT_DIRECTION AircraftGetDirection(TYPE_AIRCRAFT_DATA* ptrAircraft) return ptrAircraft->Direction;
}
+uint16_t* AircraftGetTargets(uint8_t index)
+{
+ TYPE_AIRCRAFT_DATA* ptrAircraft = AircraftFromFlightDataIndex(index);
+
+ return ptrAircraft->Target;
+}
diff --git a/Source/Aircraft.h b/Source/Aircraft.h index 6ee6693..0c0458b 100644 --- a/Source/Aircraft.h +++ b/Source/Aircraft.h @@ -23,6 +23,7 @@ void AircraftAddTargets(TYPE_AIRCRAFT_DATA* ptrAircraft, uint16_t* targets); TYPE_ISOMETRIC_POS AircraftGetIsoPos(uint8_t FlightDataIdx);
uint16_t AircraftGetTileFromFlightDataIndex(uint8_t index);
bool AircraftRemove(uint8_t aircraftIdx);
+uint16_t* AircraftGetTargets(uint8_t index);
AIRCRAFT_DIRECTION AircraftGetDirection(TYPE_AIRCRAFT_DATA* ptrAircraft);
bool AircraftAddNew( TYPE_FLIGHT_DATA * ptrFlightData,
uint8_t FlightDataIndex,
diff --git a/Source/Game.c b/Source/Game.c index ff5bf6e..ed3eeb6 100644 --- a/Source/Game.c +++ b/Source/Game.c @@ -51,7 +51,7 @@ enum TILE_RWY_START_1, TILE_RWY_START_2, TILE_PARKING, - TILE_RESERVED_1, + TILE_PARKING_2, TILE_TAXIWAY_INTERSECT_GRASS, TILE_TAXIWAY_GRASS, TILE_TAXIWAY_CORNER_GRASS, @@ -763,27 +763,56 @@ void GameAircraftState(void) && (FlightData.RemainingTime[i] > 0) ) { - if(FlightData.FlightDirection[i] == DEPARTURE) + if( (FlightData.FlightDirection[i] == DEPARTURE) + && + (FlightData.Parking[i] != 0) ) { - FlightData.State[i] = STATE_PARKED; - - target[0] = FlightData.Parking[i]; - - dprintf("Target assigned = %d", target[0]); - - if(AircraftAddNew(&FlightData, i, target) == false) + uint8_t j; + bool bParkingBusy = false; + + for(j = 0; j < GAME_MAX_AIRCRAFT; j++) { - dprintf("Exceeded maximum aircraft number!\n"); - return; + if(AircraftFromFlightDataIndex(j)->State != STATE_IDLE) + { + uint16_t tile = AircraftGetTileFromFlightDataIndex(j); + uint16_t* targets = AircraftGetTargets(j); + + if(tile == FlightData.Parking[i]) + { + bParkingBusy = true; + } + + if(SystemContains_u16(FlightData.Parking[i], targets, AIRCRAFT_MAX_TARGETS) == true) + { + bParkingBusy = true; + } + } + } + + if(bParkingBusy == false) + { + FlightData.State[i] = STATE_PARKED; + + // Create notification request for incoming aircraft + FlightData.NotificationRequest[i] = true; + + target[0] = FlightData.Parking[i]; + + dprintf("Target assigned = %d", target[0]); + + if(AircraftAddNew(&FlightData, i, target) == false) + { + dprintf("Exceeded maximum aircraft number!\n"); + return; + } } } else if(FlightData.FlightDirection[i] == ARRIVAL) { FlightData.State[i] = STATE_APPROACH; + // Create notification request for incoming aircraft + FlightData.NotificationRequest[i] = true; } - - // Create notification request for incoming aircraft - FlightData.NotificationRequest[i] = true; } if( (FlightData.State[i] != STATE_IDLE) @@ -902,6 +931,10 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer) ptrTileset->h = TILE_SIZE; used_rwy = false; + + ptrTileset->r = NORMAL_LUMINANCE; + ptrTileset->g = NORMAL_LUMINANCE; + ptrTileset->b = NORMAL_LUMINANCE; if( (ptrPlayer->SelectRunway == true) && @@ -938,32 +971,69 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer) || (ptrPlayer->SelectTaxiwayRunway == true) ) && - (i != 0) - && - ( (SystemContains_u16(i, ptrPlayer->Waypoints, PLAYER_MAX_WAYPOINTS) == true) + (i != 0) ) + { + if(( (SystemContains_u16(i, ptrPlayer->Waypoints, PLAYER_MAX_WAYPOINTS) == true) || - (i == ptrPlayer->SelectedTile) ) + (i == ptrPlayer->SelectedTile) ) && - (ptrPlayer->SelectedTile != GAME_INVALID_TILE_SELECTION) ) - { - if(ptrPlayer->InvalidPath == true) + (ptrPlayer->SelectedTile != GAME_INVALID_TILE_SELECTION) ) { - ptrTileset->r = rwy_sine; - ptrTileset->b = NORMAL_LUMINANCE >> 2; - ptrTileset->g = NORMAL_LUMINANCE >> 2; + if(ptrPlayer->InvalidPath == true) + { + ptrTileset->r = rwy_sine; + ptrTileset->b = NORMAL_LUMINANCE >> 2; + ptrTileset->g = NORMAL_LUMINANCE >> 2; + } + else + { + ptrTileset->r = NORMAL_LUMINANCE >> 2; + ptrTileset->g = NORMAL_LUMINANCE >> 2; + ptrTileset->b = rwy_sine; + } } - else + else if( (ptrPlayer->SelectTaxiwayRunway == true) + && + ( (GameLevelBuffer[i] == TILE_RWY_HOLDING_POINT) + || + (GameLevelBuffer[i] == TILE_RWY_HOLDING_POINT_2) ) ) { ptrTileset->r = NORMAL_LUMINANCE >> 2; - ptrTileset->g = NORMAL_LUMINANCE >> 2; - ptrTileset->b = rwy_sine; + ptrTileset->g = rwy_sine; + ptrTileset->b = NORMAL_LUMINANCE >> 2; + } + else if( (ptrPlayer->SelectTaxiwayParking == true) + && + ( (GameLevelBuffer[i] == TILE_PARKING) + || + (GameLevelBuffer[i] == TILE_PARKING_2) ) ) + { + uint16_t aircraftTile; + bool bParkingBusy = false; + + for(j = 0; j < GAME_MAX_AIRCRAFT; j++) + { + aircraftTile = AircraftGetTileFromFlightDataIndex(j); + + if(i == aircraftTile) + { + bParkingBusy = true; + } + } + + if(bParkingBusy == true) + { + ptrTileset->r = rwy_sine; + ptrTileset->g = NORMAL_LUMINANCE >> 2; + ptrTileset->b = NORMAL_LUMINANCE >> 2; + } + else + { + ptrTileset->r = NORMAL_LUMINANCE >> 2; + ptrTileset->g = rwy_sine; + ptrTileset->b = NORMAL_LUMINANCE >> 2; + } } - } - else - { - ptrTileset->r = NORMAL_LUMINANCE; - ptrTileset->g = NORMAL_LUMINANCE; - ptrTileset->b = NORMAL_LUMINANCE; } // TODO: Isometric -> Cartesian conversion @@ -1006,6 +1076,9 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer) ptrTileset->u = (short)(GameLevelBuffer[i] % COLUMNS_PER_TILESET)<<TILE_SIZE_BIT_SHIFT; ptrTileset->v = (short)(GameLevelBuffer[i] / COLUMNS_PER_TILESET)<<TILE_SIZE_BIT_SHIFT; + + ptrTileset->mx = ptrTileset->u + (TILE_SIZE >> 1); + ptrTileset->my = ptrTileset->v + (TILE_SIZE >> 1); if(flip_id == true) { @@ -1085,9 +1158,9 @@ void GameStateLockTarget(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData if(ptrPlayer->PadKeySinglePress_Callback(PAD_SQUARE) == true) { - if(ptrPlayer->ShowAircraftData == true) + if(ptrPlayer->LockTarget == false) { - if(ptrPlayer->LockTarget == false) + if(ptrPlayer->ShowAircraftData == true) { if( (ptrFlightData->State[AircraftIdx] != STATE_IDLE) && @@ -1098,7 +1171,7 @@ void GameStateLockTarget(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData } } } - else if(ptrPlayer->LockTarget == true) + else { ptrPlayer->LockTarget = false; ptrPlayer->LockedAircraft = 0; @@ -1256,7 +1329,11 @@ void GameStateSelectTaxiwayParking(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * pt if( (target_tile == TILE_PARKING) || - (target_tile == (TILE_PARKING | TILE_MIRROR_FLAG) ) ) + (target_tile == (TILE_PARKING | TILE_MIRROR_FLAG)) + || + (target_tile == TILE_PARKING_2) + || + (target_tile == (TILE_PARKING_2 | TILE_MIRROR_FLAG) ) ) { // TODO: Assign path to aircraft AircraftFromFlightDataIndexAddTargets(ptrPlayer->FlightDataSelectedAircraft, ptrPlayer->Waypoints); @@ -1308,8 +1385,6 @@ void GameStateSelectRunway(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightD { ptrPlayer->SelectRunway = false; - DEBUG_PRINT_VAR(GameRwy[ptrPlayer->SelectedRunway]); - if(SystemContains_u16(GameRwy[ptrPlayer->SelectedRunway], GameUsedRwy, GAME_MAX_RUNWAYS) == false) { ptrPlayer->SelectRunway = false; @@ -1938,9 +2013,13 @@ bool GamePathToTile(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData) { for(i = 0; i < GAME_MAX_AIRCRAFT; i++) { - if(temp_tile == AircraftGetTileFromFlightDataIndex(i)) + if(ptrFlightData->State[i] != STATE_IDLE) { - return false; // Check pending! + if(temp_tile == AircraftGetTileFromFlightDataIndex(i)) + { + dprintf("i = %d, state = %d\n", i, ptrFlightData->State[i]); + return false; // Check pending! + } } } @@ -1969,9 +2048,13 @@ bool GamePathToTile(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData) { for(i = 0; i < GAME_MAX_AIRCRAFT; i++) { - if(temp_tile == AircraftGetTileFromFlightDataIndex(i)) + if(ptrFlightData->State[i] != STATE_IDLE) { - return false; // Check pending! + if(temp_tile == AircraftGetTileFromFlightDataIndex(i)) + { + dprintf("i = %d, state = %d\n", i, ptrFlightData->State[i]); + return false; // Check pending! + } } } @@ -2125,7 +2208,7 @@ void GameStateUnboarding(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData void GameGenerateUnboardingSequence(TYPE_PLAYER* ptrPlayer) { uint8_t i; - unsigned short keyTable[] = { PAD_CROSS, PAD_SQUARE, PAD_TRIANGLE }; + unsigned short keyTable[] = { PAD_CROSS, PAD_SQUARE, PAD_TRIANGLE }; memset(ptrPlayer->UnboardingSequence, 0, sizeof(ptrPlayer->UnboardingSequence) ); @@ -2192,8 +2275,6 @@ void GameCreateTakeoffWaypoints(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFli } - DEBUG_PRINT_VAR(currentTile); - for(i = 0; i < GAME_MAX_RUNWAYS; i++) { if(GameUsedRwy[i] == currentTile) diff --git a/Source/GameGui.c b/Source/GameGui.c index f9697bb..677b454 100644 --- a/Source/GameGui.c +++ b/Source/GameGui.c @@ -11,7 +11,7 @@ #define NOTIFICATION_TIMER_LIMIT 5*TIMEBASE_1_SECOND // 5 seconds
#define BUBBLE_VIBRATION_TIMER_LIMIT TIMEBASE_1_SECOND >> 1 // Half a second
#define NOTIFICATION_BUFFER_SIZE 200
-#define GAME_GUI_AIRCRAFT_DATA_MAX_PAGE 5
+#define GAME_GUI_AIRCRAFT_DATA_MAX_PAGE 4
#define SLOW_SCORE_LOW_SPEED_MARGIN 100
#define SLOW_SCORE_LOW_SPEED 5
@@ -923,6 +923,13 @@ void GameGuiShowAircraftData(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFligh AircraftDataDirection_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
"Unboard" );
break;
+
+ case STATE_HOLDING_RWY:
+ FontPrintText( &SmallFont,
+ AircraftDataDirection_X + AircraftDataState_X_Offset,
+ AircraftDataDirection_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
+ "Holding" );
+ break;
default:
break;
diff --git a/Source/Makefile b/Source/Makefile index 96c3f7d..a02fd8c 100644 --- a/Source/Makefile +++ b/Source/Makefile @@ -1,5 +1,6 @@ CC = psx-gcc -DEFINE= -DFIXMATH_FAST_SIN -D_PAL_MODE_ -DPSXSDK_DEBUG -DNO_CDDA -DNO_INTRO +DEFINE= -DFIXMATH_FAST_SIN -D_PAL_MODE_ -DPSXSDK_DEBUG +DEFINE += -DNO_CDDA -DNO_INTRO LIBS= -lfixmath CC_FLAGS = -Wall -Werror -c -Os LINKER = psx-gcc |
