aboutsummaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorXaviDCR92 <xavi.dcr@gmail.com>2017-05-30 07:00:36 +0200
committerXaviDCR92 <xavi.dcr@gmail.com>2017-05-30 07:00:36 +0200
commit30b18fd262038f3ffaf24ad9884e1e121850019b (patch)
treeb1bdba42ca62714585156d85e0d1a7dc71342911 /Source
parent12247026c5c2e69464ae54ae3a5156fcc725d4b3 (diff)
downloadairport-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.c26
-rw-r--r--Source/Aircraft.h1
-rw-r--r--Source/Game.c173
-rw-r--r--Source/GameGui.c9
-rw-r--r--Source/Makefile3
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