aboutsummaryrefslogtreecommitdiff
path: root/Source/Game.c
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Game.c')
-rw-r--r--Source/Game.c197
1 files changed, 159 insertions, 38 deletions
diff --git a/Source/Game.c b/Source/Game.c
index 7626598..fdf9f8a 100644
--- a/Source/Game.c
+++ b/Source/Game.c
@@ -1077,6 +1077,26 @@ char* GetGameLevelTitle(void)
return GameLevelTitle;
}
+/* ******************************************************************************************
+ *
+ * @name: void GameAircraftState(uint8_t i)
+ *
+ * @author: Xavier Del Campo
+ *
+ * @param:
+ * TYPE_PLAYER* ptrPlayer:
+ * Pointer to a player structure
+ *
+ *
+ * @brief:
+ * Draws all tiles depending on GameLevelBuffer configuration.
+ *
+ * @remarks:
+ * Tiles are usually rendered with normal RGB values unless parking/runway is busy
+ * or ptrPlayer->InvalidPath == true.
+ *
+ * ******************************************************************************************/
+
void GameAircraftState(uint8_t i)
{
uint16_t target[2] = {0};
@@ -1166,6 +1186,26 @@ void GameAircraftState(uint8_t i)
}
}
+/* ******************************************************************************************
+ *
+ * @name: void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
+ *
+ * @author: Xavier Del Campo
+ *
+ * @param:
+ * TYPE_PLAYER* ptrPlayer:
+ * Pointer to a player structure
+ *
+ *
+ * @brief:
+ * Draws all tiles depending on GameLevelBuffer configuration.
+ *
+ * @remarks:
+ * Tiles are usually rendered with normal RGB values unless parking/runway is busy
+ * or ptrPlayer->InvalidPath == true.
+ *
+ * ******************************************************************************************/
+
void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
{
uint16_t i;
@@ -1173,7 +1213,7 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
uint8_t columns = 0;
uint8_t rows = 0;
bool flip_id;
- bool used_rwy;
+ bool used_rwy = SystemContains_u16(ptrPlayer->RwyArray[0], GameUsedRwy, GAME_MAX_RUNWAYS);
uint8_t aux_id;
GsSprite * ptrTileset;
const uint8_t rwy_sine_step = 24;
@@ -1181,11 +1221,14 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
static bool rwy_sine_decrease = false;
TYPE_ISOMETRIC_POS tileIsoPos;
TYPE_CARTESIAN_POS tileCartPos;
+
+ uint16_t init_timer_value = 0;
+ uint16_t end_timer_value = 0;
// Prepare runway to be painted in blue if player is on runway selection mode
if(ptrPlayer->SelectRunway == true)
{
- GameGetSelectedRunwayArray(GameRwy[ptrPlayer->SelectedRunway], ptrPlayer->RwyArray, sizeof(ptrPlayer->RwyArray));
+
/*Serial_printf("Runway array:\n");
for(j = 0; j < GAME_MAX_RWY_LENGTH; j++)
@@ -1312,8 +1355,6 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
{
continue;
}
-
- used_rwy = false;
ptrTileset->r = NORMAL_LUMINANCE;
ptrTileset->g = NORMAL_LUMINANCE;
@@ -1325,17 +1366,6 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
&&
(SystemContains_u16(i, ptrPlayer->RwyArray, GAME_MAX_RWY_LENGTH) == true) )
{
- for(j = 0; j < GAME_MAX_RUNWAYS; j++)
- {
- if(GameUsedRwy[j] != 0)
- {
- if(SystemContains_u16(GameUsedRwy[j], ptrPlayer->RwyArray, GAME_MAX_RWY_LENGTH) == true)
- {
- used_rwy = true;
- break;
- }
- }
- }
if(used_rwy == true)
{
@@ -1382,32 +1412,11 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
(CurrentTile == TILE_RWY_HOLDING_POINT_2) ) )
{
bool bHoldingRwyBusy = false;
-
- for(j = 0; j < FlightData.nAircraft; j++)
- {
- uint16_t* targets = AircraftGetTargets(j);
- uint16_t aircraftTile = AircraftGetTileFromFlightDataIndex(j);
- uint16_t lastTarget = 0;
- uint8_t k;
- for(k = 0; k < AIRCRAFT_MAX_TARGETS; k++)
- {
- if(targets[k] == 0)
- {
- break;
- }
+ init_timer_value = GetRCnt(2);
- lastTarget = targets[k];
- }
- if( (i == aircraftTile)
- ||
- (i == lastTarget) )
- {
- bHoldingRwyBusy = true;
- break;
- }
- }
+ end_timer_value = GetRCnt(2);
if(bHoldingRwyBusy == true)
{
@@ -1484,14 +1493,55 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
ptrTileset->attribute &= ~(H_FLIP);
}
}
+
+ dprintf("GameRenderLevel execution time = %d\t"
+ "end_timer_value = 0x%04X\tinit_timer_value = 0x%04X\n",
+ end_timer_value - init_timer_value,
+ end_timer_value,
+ init_timer_value );
}
+/* *******************************************************************
+ *
+ * @name: void GameSetTime(uint8_t hour, uint8_t minutes)
+ *
+ * @author: Xavier Del Campo
+ *
+ * @brief:
+ * Reportedly, it sets game time to specified hour and minutes.
+ *
+ *
+ * @remarks:
+ * To be used on GameInit() after PLT file parsing.
+ *
+ * *******************************************************************/
+
void GameSetTime(uint8_t hour, uint8_t minutes)
{
GameHour = hour;
GameMinutes = minutes;
}
+/* *******************************************************************
+ *
+ * @name: void GameActiveAircraft(uint8_t i)
+ *
+ * @author: Xavier Del Campo
+ *
+ * @param:
+ * uint8_t i:
+ * Index from FlightData array.
+ *
+ * @brief:
+ * On each game cycle, FlightData.ActiveAircraft is set to 0 and
+ * number of active aircraft is recalculated.
+ *
+ * @remarks:
+ * Called ciclically from GameCalculations(). This function is
+ * executed GAME_MAX_AIRCRAFT times on each cycle.
+ *
+ * *******************************************************************/
+
void GameActiveAircraft(uint8_t i)
{
// Reset iterator when i == 0.
@@ -1507,6 +1557,29 @@ void GameActiveAircraft(uint8_t i)
}
}
+/* ******************************************************************************************
+ *
+ * @name: void GameStateShowAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
+ *
+ * @author: Xavier Del Campo
+ *
+ * @param:
+ * TYPE_PLAYER* ptrPlayer:
+ * Pointer to a player structure
+ *
+ * TYPE_FLIGH_DATA* ptrFlightData:
+ * In the end, pointer to FlightData data table, which contains
+ * information about all available flights.
+ *
+ * @brief:
+ * Handles ptrPlayer->ShowAircraftData state.
+ *
+ *
+ * @remarks:
+ * Called ciclically from GamePlayerHandler().
+ *
+ * ******************************************************************************************/
+
void GameStateShowAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
{
if(ptrPlayer->ShowAircraftData == true)
@@ -1527,6 +1600,29 @@ void GameStateShowAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightDa
}
}
+/* ******************************************************************************************
+ *
+ * @name: void GameStateLockTarget(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
+ *
+ * @author: Xavier Del Campo
+ *
+ * @param:
+ * TYPE_PLAYER* ptrPlayer:
+ * Pointer to a player structure
+ *
+ * TYPE_FLIGH_DATA* ptrFlightData:
+ * In the end, pointer to FlightData data table, which contains
+ * information about all available flights.
+ *
+ * @brief:
+ * Handles ptrPlayer->LockTarget state.
+ *
+ *
+ * @remarks:
+ * Called ciclically from GamePlayerHandler().
+ *
+ ******************************************************************************************/
+
void GameStateLockTarget(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
{
uint8_t AircraftIdx = ptrPlayer->FlightDataSelectedAircraft;
@@ -1572,6 +1668,29 @@ void GameStateLockTarget(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData
}
}
+/* ******************************************************************************************
+ *
+ * @name: void GameStateSelectTaxiwayRunway(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
+ *
+ * @author: Xavier Del Campo
+ *
+ * @param:
+ * TYPE_PLAYER* ptrPlayer:
+ * Pointer to a player structure
+ *
+ * TYPE_FLIGH_DATA* ptrFlightData:
+ * In the end, pointer to FlightData data table, which contains
+ * information about all available flights.
+ *
+ * @brief:
+ * Handler for ptrPlayer->SelectTaxiwayRunway.
+ *
+ *
+ * @remarks:
+ * Called ciclically from GamePlayerHandler().
+ *
+ * ******************************************************************************************/
+
void GameStateSelectTaxiwayRunway(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
{
TYPE_ISOMETRIC_POS IsoPos = CameraGetIsoPos(ptrPlayer);
@@ -1757,6 +1876,8 @@ void GameStateSelectRunway(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightDa
// Under this mode, always reset locking target.
ptrPlayer->LockTarget = false;
ptrPlayer->LockedAircraft = FLIGHT_DATA_INVALID_IDX;
+
+ GameGetSelectedRunwayArray(GameRwy[ptrPlayer->SelectedRunway], ptrPlayer->RwyArray, sizeof(ptrPlayer->RwyArray));
CameraMoveToIsoPos(ptrPlayer, IsoPos);