* 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.
This commit is contained in:
XaviDCR92 2017-05-30 07:00:36 +02:00
parent 12247026c5
commit 30b18fd262
7 changed files with 161 additions and 53 deletions

View File

@ -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;
}

View File

@ -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,

View File

@ -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 == ptrPlayer->SelectedTile) )
&&
(ptrPlayer->SelectedTile != GAME_INVALID_TILE_SELECTION) )
(i != 0) )
{
if(ptrPlayer->InvalidPath == true)
if(( (SystemContains_u16(i, ptrPlayer->Waypoints, PLAYER_MAX_WAYPOINTS) == true)
||
(i == ptrPlayer->SelectedTile) )
&&
(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)

View File

@ -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;

View File

@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 KiB

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.