From 6a90ed354fcf4871aa7ce1d0b599ff69787f1d5f Mon Sep 17 00:00:00 2001 From: XaviDCR92 Date: Fri, 5 May 2017 23:55:15 +0200 Subject: * Split screen is now working. Yay!! * New prototypes for Gfx. Still preliminar, but make split screen work. --- Source/Aircraft.c | 33 +++++++++++++++-- Source/Aircraft.h | 2 +- Source/Camera.c | 20 +++++----- Source/Camera.h | 12 +++--- Source/Game.c | 98 ++++++++++++++++++++++++++++--------------------- Source/Game.h | 3 +- Source/GameGui.c | 82 ++++++++++++++++++++++++++++------------- Source/GameGui.h | 8 ++-- Source/GameStructures.h | 1 + Source/Gfx.c | 17 ++++----- Source/Gfx.h | 4 ++ 11 files changed, 179 insertions(+), 101 deletions(-) (limited to 'Source') diff --git a/Source/Aircraft.c b/Source/Aircraft.c index 5ddc4b8..3936f35 100644 --- a/Source/Aircraft.c +++ b/Source/Aircraft.c @@ -62,6 +62,7 @@ static void AircraftDirection(TYPE_AIRCRAFT_DATA* ptrAircraft); static AIRCRAFT_LIVERY AircraftLiveryFromFlightNumber(char * strFlightNumber); static void AircraftAttitude(TYPE_AIRCRAFT_DATA* ptrAircraft); static void AircraftUpdateSpriteFromData(TYPE_AIRCRAFT_DATA* ptrAircraft); +static void AircraftSpeed(TYPE_AIRCRAFT_DATA* ptrAircraft); void AircraftInit(void) { @@ -125,8 +126,6 @@ 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->Speed = AircraftSpeedsTable[AIRCRAFT_SPEED_APPROACH]; } else if(ptrFlightData->FlightDirection[FlightDataIndex] == DEPARTURE) { @@ -197,10 +196,36 @@ void AircraftHandler(void) AircraftDirection(ptrAircraft); AircraftAttitude(ptrAircraft); + AircraftSpeed(ptrAircraft); } } -void AircraftRender(TYPE_PLAYER * ptrPlayer) +void AircraftSpeed(TYPE_AIRCRAFT_DATA* ptrAircraft) +{ + switch(ptrAircraft->State) + { + case STATE_FINAL: + ptrAircraft->Speed = AircraftSpeedsTable[AIRCRAFT_SPEED_DESCENT]; + break; + + case STATE_TAKEOFF: + ptrAircraft->Speed = AircraftSpeedsTable[AIRCRAFT_SPEED_TAKEOFF]; + break; + + case STATE_TAXIING: + ptrAircraft->Speed = AircraftSpeedsTable[AIRCRAFT_SPEED_TAXIING]; + break; + + case STATE_UNBOARDING: + case STATE_IDLE: + case STATE_LANDED: + default: + ptrAircraft->Speed = 0; + break; + } +} + +void AircraftRender(TYPE_PLAYER* ptrPlayer) { TYPE_AIRCRAFT_DATA* ptrAircraft; TYPE_CARTESIAN_POS cartPos; @@ -291,7 +316,7 @@ void AircraftDirection(TYPE_AIRCRAFT_DATA* ptrAircraft) if(ptrAircraft->Target[++ptrAircraft->TargetIdx] == 0) { dprintf("All targets reached!\n"); - GameTargetsReached(ptrAircraft->FlightDataIdx); + ptrAircraft->State = GameTargetsReached(ptrAircraft->FlightDataIdx); } } } diff --git a/Source/Aircraft.h b/Source/Aircraft.h index d941a13..e32a64a 100644 --- a/Source/Aircraft.h +++ b/Source/Aircraft.h @@ -16,7 +16,7 @@ void AircraftInit(void); void AircraftHandler(void); -void AircraftRender(TYPE_PLAYER * ptrPlayer); +void AircraftRender(TYPE_PLAYER* ptrPlayer); TYPE_AIRCRAFT_DATA* AircraftFromFlightDataIndex(uint8_t index); void AircraftFromFlightDataIndexAddTargets(uint8_t index, uint16_t * targets); void AircraftAddTargets(TYPE_AIRCRAFT_DATA* ptrAircraft, uint16_t * targets); diff --git a/Source/Camera.c b/Source/Camera.c index 9241455..f0f637f 100644 --- a/Source/Camera.c +++ b/Source/Camera.c @@ -17,10 +17,10 @@ * Local Prototypes * *************************************/ -static void CameraUpdateSpeed(TYPE_PLAYER * ptrPlayer); -static bool CameraSpecialConditions(TYPE_PLAYER * ptrPlayer); +static void CameraUpdateSpeed(TYPE_PLAYER* ptrPlayer); +static bool CameraSpecialConditions(TYPE_PLAYER* ptrPlayer); -void CameraInit(TYPE_PLAYER * ptrPlayer) +void CameraInit(TYPE_PLAYER* ptrPlayer) { // Center camera on screen ptrPlayer->Camera.X_Offset = CAMERA_INITIAL_X_OFFSET; @@ -30,13 +30,13 @@ void CameraInit(TYPE_PLAYER * ptrPlayer) ptrPlayer->Camera.Speed_Timer = SPEED_CALCULATION_TIME; } -void CameraApplyCoordinatesToSprite(TYPE_PLAYER * ptrPlayer, GsSprite * spr) +void CameraApplyCoordinatesToSprite(TYPE_PLAYER* ptrPlayer, GsSprite * spr) { spr->x += (short)ptrPlayer->Camera.X_Offset; spr->y += (short)ptrPlayer->Camera.Y_Offset; } -void CameraApplyCoordinatesToRectangle(TYPE_PLAYER * ptrPlayer, GsRectangle * rect) +void CameraApplyCoordinatesToRectangle(TYPE_PLAYER* ptrPlayer, GsRectangle * rect) { dprintf("Rectangle {%d, %d}\n", rect->x, @@ -46,7 +46,7 @@ void CameraApplyCoordinatesToRectangle(TYPE_PLAYER * ptrPlayer, GsRectangle * re rect->y += (short)ptrPlayer->Camera.Y_Offset; } -void CameraUpdateSpeed(TYPE_PLAYER * ptrPlayer) +void CameraUpdateSpeed(TYPE_PLAYER* ptrPlayer) { if(ptrPlayer->PadDirectionKeyPressed_Callback() == true) { @@ -128,7 +128,7 @@ void CameraUpdateSpeed(TYPE_PLAYER * ptrPlayer) } } -void CameraHandler(TYPE_PLAYER * ptrPlayer) +void CameraHandler(TYPE_PLAYER* ptrPlayer) { if(CameraSpecialConditions(ptrPlayer) == true) { @@ -151,7 +151,7 @@ void CameraHandler(TYPE_PLAYER * ptrPlayer) ptrPlayer->Camera.Y_Offset += ptrPlayer->Camera.Y_Speed; } -bool CameraSpecialConditions(TYPE_PLAYER * ptrPlayer) +bool CameraSpecialConditions(TYPE_PLAYER* ptrPlayer) { if( (ptrPlayer->ShowAircraftData == true) || @@ -165,7 +165,7 @@ bool CameraSpecialConditions(TYPE_PLAYER * ptrPlayer) return false; } -TYPE_ISOMETRIC_POS CameraGetIsoPos(TYPE_PLAYER * ptrPlayer) +TYPE_ISOMETRIC_POS CameraGetIsoPos(TYPE_PLAYER* ptrPlayer) { TYPE_ISOMETRIC_POS IsoPos; TYPE_CARTESIAN_POS CartPos; @@ -180,7 +180,7 @@ TYPE_ISOMETRIC_POS CameraGetIsoPos(TYPE_PLAYER * ptrPlayer) return IsoPos; } -void CameraMoveToIsoPos(TYPE_PLAYER * ptrPlayer, TYPE_ISOMETRIC_POS IsoPos) +void CameraMoveToIsoPos(TYPE_PLAYER* ptrPlayer, TYPE_ISOMETRIC_POS IsoPos) { TYPE_CARTESIAN_POS CartPos = GfxIsometricToCartesian(&IsoPos); diff --git a/Source/Camera.h b/Source/Camera.h index 8e6866f..887113d 100644 --- a/Source/Camera.h +++ b/Source/Camera.h @@ -18,11 +18,11 @@ * Global prototypes * *************************************/ -void CameraInit(TYPE_PLAYER * ptrPlayer); -void CameraHandler(TYPE_PLAYER * ptrPlayer); -void CameraApplyCoordinatesToSprite(TYPE_PLAYER * ptrPlayer, GsSprite * spr); -void CameraApplyCoordinatesToRectangle(TYPE_PLAYER * ptrPlayer, GsRectangle * rect); -TYPE_ISOMETRIC_POS CameraGetIsoPos(TYPE_PLAYER * ptrPlayer); -void CameraMoveToIsoPos(TYPE_PLAYER * ptrPlayer, TYPE_ISOMETRIC_POS ptrIsoPos); +void CameraInit(TYPE_PLAYER* ptrPlayer); +void CameraHandler(TYPE_PLAYER* ptrPlayer); +void CameraApplyCoordinatesToSprite(TYPE_PLAYER* ptrPlayer, GsSprite * spr); +void CameraApplyCoordinatesToRectangle(TYPE_PLAYER* ptrPlayer, GsRectangle * rect); +TYPE_ISOMETRIC_POS CameraGetIsoPos(TYPE_PLAYER* ptrPlayer); +void CameraMoveToIsoPos(TYPE_PLAYER* ptrPlayer, TYPE_ISOMETRIC_POS ptrIsoPos); #endif //__CAM_HEADER__ diff --git a/Source/Game.c b/Source/Game.c index bb7e6c3..dd5f00e 100644 --- a/Source/Game.c +++ b/Source/Game.c @@ -89,29 +89,29 @@ static void GameLoadLevel(void); static bool GamePause(void); static void GameEmergencyMode(void); static void GameCalculations(void); -static void GamePlayerHandler(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); -static void GamePlayerAddWaypoint(TYPE_PLAYER * ptrPlayer); -static void GamePlayerAddWaypoint_Ex(TYPE_PLAYER * ptrPlayer, uint16_t tile); +static void GamePlayerHandler(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); +static void GamePlayerAddWaypoint(TYPE_PLAYER* ptrPlayer); +static void GamePlayerAddWaypoint_Ex(TYPE_PLAYER* ptrPlayer, uint16_t tile); static void GameGraphics(void); -static void GameRenderLevel(TYPE_PLAYER * ptrPlayer); +static void GameRenderLevel(TYPE_PLAYER* ptrPlayer); //static void GameLoadPilots(char * strPath); static void GameClock(void); static void GameClockFlights(void); static void GameAircraftState(void); static void GameActiveAircraft(void); -static void GameStateShowAircraft(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); +static void GameStateShowAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); static void GameFirstLastAircraftIndex(void); -static void GameSelectAircraftFromList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); -static void GameStateSelectRunway(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); -static void GameStateSelectTaxiwayRunway(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); -static void GameStateSelectTaxiwayParking(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); -static void GameStateLockTarget(TYPE_PLAYER * ptrPlayer); -static void GameSelectAircraft(TYPE_PLAYER * ptrPlayer); +static void GameSelectAircraftFromList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); +static void GameStateSelectRunway(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); +static void GameStateSelectTaxiwayRunway(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); +static void GameStateSelectTaxiwayParking(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); +static void GameStateLockTarget(TYPE_PLAYER* ptrPlayer); +static void GameSelectAircraft(TYPE_PLAYER* ptrPlayer); static void GameGetRunwayArray(void); static void GameGetSelectedRunwayArray(uint16_t rwyHeader); -static void GameAssignRunwaytoAircraft(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); -static bool GameGuiShowAircraftDataSpecialConditions(TYPE_PLAYER * ptrPlayer); -static bool GamePathToTile(TYPE_PLAYER * ptrPlayer); +static void GameAssignRunwaytoAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); +static bool GameGuiShowAircraftDataSpecialConditions(TYPE_PLAYER* ptrPlayer); +static bool GamePathToTile(TYPE_PLAYER* ptrPlayer); /* ************************************* * Global Variables @@ -203,7 +203,7 @@ void Game(bool two_players) bool GamePause(void) { - TYPE_PLAYER * ptrPlayer; + TYPE_PLAYER* ptrPlayer; uint8_t i; bool pause_flag = false; @@ -487,7 +487,7 @@ uint8_t GameGetLastActiveAircraft(void) return lastActiveAircraft; } -void GamePlayerHandler(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +void GamePlayerHandler(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) { ptrPlayer->SelectedTile = 0; // Reset selected tile if no states // which use this are currently active. @@ -558,9 +558,7 @@ void GameGraphics(void) || (SystemRefreshNeeded() == false) ); - if( (PlayerData[PLAYER_ONE].Active == true) - && - (PlayerData[PLAYER_TWO].Active == true) ) + if(TwoPlayersActive == true) { split_screen = true; } @@ -584,22 +582,31 @@ void GameGraphics(void) GameRenderLevel(&PlayerData[i]); AircraftRender(&PlayerData[i]); - GameGuiAircraftNotificationRequest(&FlightData); - - GameGuiBubble(&FlightData); - - GameGuiClock(GameHour,GameMinutes); - /*for(i = 0; i < MAX_PLAYERS ; i++) {*/ GameGuiAircraftList(&PlayerData[i], &FlightData); //} - GfxDrawScene_Fast(); + GfxDrawScene_NoSwap(); + while(GfxIsGPUBusy() == true); } } + GfxDisableSplitScreen(); + + GameGuiAircraftNotificationRequest(&FlightData); + + GameGuiBubble(&FlightData); + + GameGuiClock(GameHour,GameMinutes); + + GfxDrawScene_NoSwap(); + + while(GfxIsGPUBusy() == true); + + GfxSwapBuffers(); + SystemCyclicHandler(); } @@ -717,7 +724,7 @@ void GameAircraftState(void) } -void GameRenderLevel(TYPE_PLAYER * ptrPlayer) +void GameRenderLevel(TYPE_PLAYER* ptrPlayer) { uint16_t i; uint16_t j; @@ -977,7 +984,7 @@ void GameActiveAircraft(void) } } -void GameStateShowAircraft(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +void GameStateShowAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) { if(ptrPlayer->ShowAircraftData == true) { @@ -1009,7 +1016,7 @@ void GameStateShowAircraft(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlight } } -void GameStateLockTarget(TYPE_PLAYER * ptrPlayer) +void GameStateLockTarget(TYPE_PLAYER* ptrPlayer) { if(ptrPlayer->LockTarget == true) { @@ -1023,7 +1030,7 @@ void GameStateLockTarget(TYPE_PLAYER * ptrPlayer) } } -void GameStateSelectTaxiwayRunway(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +void GameStateSelectTaxiwayRunway(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) { TYPE_ISOMETRIC_POS IsoPos = CameraGetIsoPos(ptrPlayer); uint8_t i; @@ -1105,7 +1112,7 @@ void GameStateSelectTaxiwayRunway(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * pt } } -void GameStateSelectTaxiwayParking(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +void GameStateSelectTaxiwayParking(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) { TYPE_ISOMETRIC_POS IsoPos = CameraGetIsoPos(ptrPlayer); uint8_t i; @@ -1185,7 +1192,7 @@ void GameStateSelectTaxiwayParking(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * p } } -void GameStateSelectRunway(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +void GameStateSelectRunway(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) { uint8_t i; bool success; @@ -1280,7 +1287,7 @@ void GameGetRunwayArray(void) dprintf("\n"); } -void GameSelectAircraftFromList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +void GameSelectAircraftFromList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) { FL_STATE aircraftState = ptrFlightData->State[ptrPlayer->SelectedAircraft]; @@ -1398,7 +1405,7 @@ void GameGetSelectedRunwayArray(uint16_t rwyHeader) GameGetSelectedRunwayArray(0); } -void GameAssignRunwaytoAircraft(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +void GameAssignRunwaytoAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) { uint16_t assignedRwy = GameRwy[ptrPlayer->SelectedRunway]; uint8_t aircraftIndex = ptrPlayer->SelectedAircraft; @@ -1497,8 +1504,10 @@ fix16_t GameGetYFromTile(uint16_t tile) return retVal; } -void GameTargetsReached(uint8_t index) +FL_STATE GameTargetsReached(uint8_t index) { + FL_STATE retState = STATE_IDLE; + switch(FlightData.State[index]) { case STATE_FINAL: @@ -1506,15 +1515,17 @@ void GameTargetsReached(uint8_t index) break; case STATE_TAXIING: - FlightData.State[index] = STATE_PARKED; + FlightData.State[index] = STATE_UNBOARDING; break; default: break; } + + return retState; } -bool GameGuiShowAircraftDataSpecialConditions(TYPE_PLAYER * ptrPlayer) +bool GameGuiShowAircraftDataSpecialConditions(TYPE_PLAYER* ptrPlayer) { // Aircraft list data cannot be shown under these conditions. @@ -1561,12 +1572,12 @@ uint8_t GameGetLevelColumns(void) return GameLevelColumns; } -void GamePlayerAddWaypoint(TYPE_PLAYER * ptrPlayer) +void GamePlayerAddWaypoint(TYPE_PLAYER* ptrPlayer) { GamePlayerAddWaypoint_Ex(ptrPlayer, ptrPlayer->SelectedTile); } -void GamePlayerAddWaypoint_Ex(TYPE_PLAYER * ptrPlayer, uint16_t tile) +void GamePlayerAddWaypoint_Ex(TYPE_PLAYER* ptrPlayer, uint16_t tile) { // "_Ex" function allow selecting a certain tile, whereas the other one // is a particulare case of "_Ex" for tile = ptrPlayer->SelectedTIle. @@ -1584,7 +1595,7 @@ void GamePlayerAddWaypoint_Ex(TYPE_PLAYER * ptrPlayer, uint16_t tile) ptrPlayer->Waypoints[ptrPlayer->WaypointIdx++] = tile; } -bool GamePathToTile(TYPE_PLAYER * ptrPlayer) +bool GamePathToTile(TYPE_PLAYER* ptrPlayer) { // Given an input TYPE_PLAYER structure and a selected tile, // it updates current Waypoints array with all tiles between two points. @@ -1813,7 +1824,7 @@ bool GamePathToTile(TYPE_PLAYER * ptrPlayer) return true; } -void GameSelectAircraft(TYPE_PLAYER * ptrPlayer) +void GameSelectAircraft(TYPE_PLAYER* ptrPlayer) { TYPE_ISOMETRIC_POS IsoPos = AircraftGetIsoPos(ptrPlayer->SelectedAircraft); @@ -1823,3 +1834,8 @@ void GameSelectAircraft(TYPE_PLAYER * ptrPlayer) GamePlayerAddWaypoint(ptrPlayer); } + +bool GameTwoPlayersActive(void) +{ + return TwoPlayersActive; +} diff --git a/Source/Game.h b/Source/Game.h index 712c404..6e74aee 100644 --- a/Source/Game.h +++ b/Source/Game.h @@ -38,12 +38,13 @@ extern TYPE_PLAYER PlayerData[]; void Game(bool two_players); char * GetGameLevelTitle(void); void GameSetTime(uint8_t hour, uint8_t minutes); +bool GameTwoPlayersActive(void); uint8_t GameGetFirstActiveAircraft(void); uint8_t GameGetLastActiveAircraft(void); uint8_t GameGetLevelColumns(void); fix16_t GameGetXFromTile(uint16_t tile); fix16_t GameGetYFromTile(uint16_t tile); -void GameTargetsReached(uint8_t index); +FL_STATE GameTargetsReached(uint8_t index); uint16_t GameGetTileFromIsoPosition(TYPE_ISOMETRIC_POS * IsoPos); #endif //__GAME_HEADER__ diff --git a/Source/GameGui.c b/Source/GameGui.c index dc13e6c..8a6323f 100644 --- a/Source/GameGui.c +++ b/Source/GameGui.c @@ -111,6 +111,16 @@ enum AIRCRAFT_DATA_GSGPOLY4_Y1 = AIRCRAFT_DATA_GSGPOLY4_Y0, AIRCRAFT_DATA_GSGPOLY4_Y2 = (Y_SCREEN_RESOLUTION >> 1) + 96, AIRCRAFT_DATA_GSGPOLY4_Y3 = AIRCRAFT_DATA_GSGPOLY4_Y2, + + AIRCRAFT_DATA_GSGPOLY4_X0_2PLAYER = (X_SCREEN_RESOLUTION >> 2) - (96 >> 1), + AIRCRAFT_DATA_GSGPOLY4_X1_2PLAYER = (X_SCREEN_RESOLUTION >> 2) + (96 >> 1), + AIRCRAFT_DATA_GSGPOLY4_X2_2PLAYER = AIRCRAFT_DATA_GSGPOLY4_X0, + AIRCRAFT_DATA_GSGPOLY4_X3_2PLAYER = AIRCRAFT_DATA_GSGPOLY4_X1, + + AIRCRAFT_DATA_GSGPOLY4_Y0_2PLAYER = (Y_SCREEN_RESOLUTION >> 2) - (96 >> 1), + AIRCRAFT_DATA_GSGPOLY4_Y1_2PLAYER = AIRCRAFT_DATA_GSGPOLY4_Y0, + AIRCRAFT_DATA_GSGPOLY4_Y2_2PLAYER = (Y_SCREEN_RESOLUTION >> 2) + (96 >> 1), + AIRCRAFT_DATA_GSGPOLY4_Y3_2PLAYER = AIRCRAFT_DATA_GSGPOLY4_Y2, }; enum @@ -184,7 +194,7 @@ enum * *************************************/ static void GameGuiPrepareNotificationString(TYPE_FLIGHT_DATA * ptrFlightData, uint8_t offset); -static void GameGuiShowAircraftData(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); +static void GameGuiShowAircraftData(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); /* ************************************** * Local variables * @@ -326,7 +336,7 @@ void GameGuiAircraftNotificationRequest(TYPE_FLIGHT_DATA * ptrFlightData) } } -bool GameGuiPauseDialog(TYPE_PLAYER * ptrPlayer) +bool GameGuiPauseDialog(TYPE_PLAYER* ptrPlayer) { GfxSaveDisplayData(&SecondDisplay); @@ -352,7 +362,7 @@ bool GameGuiPauseDialog(TYPE_PLAYER * ptrPlayer) return false; } -void GameGuiActiveAircraftList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +void GameGuiActiveAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) { uint8_t i; uint8_t j = 0; @@ -374,7 +384,7 @@ void GameGuiActiveAircraftList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFl } } -void GameGuiActiveAircraftPage(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +void GameGuiActiveAircraftPage(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) { while(ptrPlayer->ActiveAircraft < ptrPlayer->SelectedAircraft) { @@ -428,32 +438,34 @@ void GameGuiActiveAircraftPage(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFl } } -void GameGuiAircraftList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +void GameGuiAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) { short y_offset; uint8_t page_aircraft; if(ptrPlayer->ShowAircraftData == true) { - // Prepare RGB data and (X,Y) coordinates for aircraft - // data list request rectangle. - AircraftDataGPoly4.r[0] = AIRCRAFT_DATA_GSGPOLY4_R0; - AircraftDataGPoly4.r[1] = AIRCRAFT_DATA_GSGPOLY4_R1; - AircraftDataGPoly4.r[2] = AIRCRAFT_DATA_GSGPOLY4_R2; - AircraftDataGPoly4.r[3] = AIRCRAFT_DATA_GSGPOLY4_R3; - - AircraftDataGPoly4.g[0] = AIRCRAFT_DATA_GSGPOLY4_G0; - AircraftDataGPoly4.g[1] = AIRCRAFT_DATA_GSGPOLY4_G1; - AircraftDataGPoly4.g[2] = AIRCRAFT_DATA_GSGPOLY4_G2; - AircraftDataGPoly4.g[3] = AIRCRAFT_DATA_GSGPOLY4_G3; - - AircraftDataGPoly4.b[0] = AIRCRAFT_DATA_GSGPOLY4_B0; - AircraftDataGPoly4.b[1] = AIRCRAFT_DATA_GSGPOLY4_B1; - AircraftDataGPoly4.b[2] = AIRCRAFT_DATA_GSGPOLY4_B2; - AircraftDataGPoly4.b[3] = AIRCRAFT_DATA_GSGPOLY4_B3; - - AircraftDataGPoly4.attribute |= ENABLE_TRANS | TRANS_MODE(0); + // Prepare RGB data and (X,Y) coordinates for aircraft + // data list request rectangle. + AircraftDataGPoly4.r[0] = AIRCRAFT_DATA_GSGPOLY4_R0; + AircraftDataGPoly4.r[1] = AIRCRAFT_DATA_GSGPOLY4_R1; + AircraftDataGPoly4.r[2] = AIRCRAFT_DATA_GSGPOLY4_R2; + AircraftDataGPoly4.r[3] = AIRCRAFT_DATA_GSGPOLY4_R3; + + AircraftDataGPoly4.g[0] = AIRCRAFT_DATA_GSGPOLY4_G0; + AircraftDataGPoly4.g[1] = AIRCRAFT_DATA_GSGPOLY4_G1; + AircraftDataGPoly4.g[2] = AIRCRAFT_DATA_GSGPOLY4_G2; + AircraftDataGPoly4.g[3] = AIRCRAFT_DATA_GSGPOLY4_G3; + + AircraftDataGPoly4.b[0] = AIRCRAFT_DATA_GSGPOLY4_B0; + AircraftDataGPoly4.b[1] = AIRCRAFT_DATA_GSGPOLY4_B1; + AircraftDataGPoly4.b[2] = AIRCRAFT_DATA_GSGPOLY4_B2; + AircraftDataGPoly4.b[3] = AIRCRAFT_DATA_GSGPOLY4_B3; + + AircraftDataGPoly4.attribute |= ENABLE_TRANS | TRANS_MODE(0); + if(GameTwoPlayersActive() == true) + { AircraftDataGPoly4.x[0] = AIRCRAFT_DATA_GSGPOLY4_X0; AircraftDataGPoly4.x[1] = AIRCRAFT_DATA_GSGPOLY4_X1; AircraftDataGPoly4.x[2] = AIRCRAFT_DATA_GSGPOLY4_X2; @@ -463,8 +475,21 @@ void GameGuiAircraftList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightDa AircraftDataGPoly4.y[1] = AIRCRAFT_DATA_GSGPOLY4_Y1; AircraftDataGPoly4.y[2] = AIRCRAFT_DATA_GSGPOLY4_Y2; AircraftDataGPoly4.y[3] = AIRCRAFT_DATA_GSGPOLY4_Y3; + } + else + { + AircraftDataGPoly4.x[0] = AIRCRAFT_DATA_GSGPOLY4_X0_2PLAYER; + AircraftDataGPoly4.x[1] = AIRCRAFT_DATA_GSGPOLY4_X1_2PLAYER; + AircraftDataGPoly4.x[2] = AIRCRAFT_DATA_GSGPOLY4_X2_2PLAYER; + AircraftDataGPoly4.x[3] = AIRCRAFT_DATA_GSGPOLY4_X3_2PLAYER; - GsSortGPoly4(&AircraftDataGPoly4); + AircraftDataGPoly4.y[0] = AIRCRAFT_DATA_GSGPOLY4_Y0_2PLAYER; + AircraftDataGPoly4.y[1] = AIRCRAFT_DATA_GSGPOLY4_Y1_2PLAYER; + AircraftDataGPoly4.y[2] = AIRCRAFT_DATA_GSGPOLY4_Y2_2PLAYER; + AircraftDataGPoly4.y[3] = AIRCRAFT_DATA_GSGPOLY4_Y3_2PLAYER; + } + + GsSortGPoly4(&AircraftDataGPoly4); if(ptrPlayer->ActiveAircraft != 0) { @@ -650,7 +675,7 @@ void GameGuiClock(uint8_t hour, uint8_t min) FontPrintText(&RadioFont,CLOCK_X,CLOCK_Y,strClock); } -void GameGuiShowAircraftData(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +void GameGuiShowAircraftData(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) { uint8_t init_flight = ptrPlayer->FlightDataPage * GAME_GUI_AIRCRAFT_DATA_MAX_PAGE; uint8_t i; @@ -722,6 +747,13 @@ void GameGuiShowAircraftData(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlig "Parked" ); break; + case STATE_UNBOARDING: + FontPrintText( &SmallFont, + AIRCRAFT_DATA_DIRECTION_X + 88, + AIRCRAFT_DATA_DIRECTION_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j), + "Unboarding" ); + break; + default: break; } diff --git a/Source/GameGui.h b/Source/GameGui.h index fdd2181..0f0a223 100644 --- a/Source/GameGui.h +++ b/Source/GameGui.h @@ -27,12 +27,12 @@ * *************************************/ void GameGuiInit(void); -bool GameGuiPauseDialog(TYPE_PLAYER * ptrPlayer); +bool GameGuiPauseDialog(TYPE_PLAYER* ptrPlayer); void GameGuiAircraftNotificationRequest(TYPE_FLIGHT_DATA * ptrFlightData); void GameGuiBubble(TYPE_FLIGHT_DATA * ptrFlightData); -void GameGuiAircraftList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); +void GameGuiAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); void GameGuiClock(uint8_t hour, uint8_t min); -void GameGuiActiveAircraftList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); -void GameGuiActiveAircraftPage(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); +void GameGuiActiveAircraftList(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); +void GameGuiActiveAircraftPage(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); #endif //__GAME_GUI_HEADER__ diff --git a/Source/GameStructures.h b/Source/GameStructures.h index 3efe573..797fc91 100644 --- a/Source/GameStructures.h +++ b/Source/GameStructures.h @@ -34,6 +34,7 @@ typedef enum t_flstate { STATE_IDLE = 0, STATE_PARKED, + STATE_UNBOARDING, STATE_TAXIING, STATE_TAKEOFF, STATE_APPROACH, diff --git a/Source/Gfx.c b/Source/Gfx.c index 329ba19..27646ee 100644 --- a/Source/Gfx.c +++ b/Source/Gfx.c @@ -53,7 +53,7 @@ GsSprite PSXButtons; * Local Prototypes * *************************************/ -static void GfxSwapBuffers(void); + /* ************************************* * Local Variables @@ -122,6 +122,11 @@ void GfxDrawScene_Fast(void) GsDrawList(); } +void GfxDrawScene_NoSwap(void) +{ + GsDrawList(); +} + bool GfxReadyForDMATransfer(void) { return (GPUSTAT & 1<<28); @@ -319,11 +324,11 @@ bool GfxIsInsideScreenArea(short x, short y, short w, short h) { if( ( (x + w) >= 0) && - (x < X_SCREEN_RESOLUTION) + (x < DrawEnv.w) && ( (y + h) >= 0) && - (y < Y_SCREEN_RESOLUTION) ) + (y < DrawEnv.h) ) { return true; } @@ -515,7 +520,6 @@ TYPE_ISOMETRIC_POS GfxCartesianToIsometric(TYPE_CARTESIAN_POS * ptrCartPos) void GfxSetSplitScreen(uint8_t playerIndex) { - switch(playerIndex) { case 0: @@ -534,11 +538,6 @@ void GfxSetSplitScreen(uint8_t playerIndex) break; } - dprintf("Player idx = %d, x = %d, w = %d\n", - playerIndex, - DrawEnv.x, - DrawEnv.w); - GsSetDrawEnv(&DrawEnv); } diff --git a/Source/Gfx.h b/Source/Gfx.h index 68c0f5b..bbd041f 100644 --- a/Source/Gfx.h +++ b/Source/Gfx.h @@ -40,6 +40,10 @@ void GfxDrawScene(void); // after it. void GfxDrawScene_Slow(void); +void GfxDrawScene_NoSwap(void); + +void GfxSwapBuffers(void); + // Only renders screen and does not update any pad data or timer data. // To be used in ISR! void GfxDrawScene_Fast(void); -- cgit v1.2.3