aboutsummaryrefslogtreecommitdiff
path: root/Source/PltParser.c
diff options
context:
space:
mode:
authorXaviDCR92 <xavi.dcr@gmail.com>2018-02-25 05:25:33 +0100
committerXaviDCR92 <xavi.dcr@gmail.com>2018-02-25 05:25:33 +0100
commitbaa647ad7caf95ea2619d8456bcfd0f04a08a719 (patch)
tree7a7f5408a8ae0cc18a70d7795a2a47af30cf59f5 /Source/PltParser.c
parent81d9242514b4e8e3fe97cf7063a15680f610bf2f (diff)
downloadairport-baa647ad7caf95ea2619d8456bcfd0f04a08a719.tar.gz
+ Added Message module, used for tutorials.
+ Added first tutorial level. * Font now inserts line feed automatically if the next word is too long to fit. * Gfx.c: added primitive list double buffering in order to gain some performance. * MapEditor: now airport can be defined inside the tool.
Diffstat (limited to 'Source/PltParser.c')
-rw-r--r--Source/PltParser.c123
1 files changed, 97 insertions, 26 deletions
diff --git a/Source/PltParser.c b/Source/PltParser.c
index 8bcbc0f..29d1692 100644
--- a/Source/PltParser.c
+++ b/Source/PltParser.c
@@ -5,12 +5,14 @@
#include "PltParser.h"
#include "System.h"
#include "Game.h"
+#include "Message.h"
/* *************************************
* Defines
* *************************************/
-#define LINE_MAX_CHARACTERS 100
+#define LINE_MAX_CHARACTERS MAX_MESSAGE_STR_SIZE
+#define MESSAGE_HEADER_STR "MESSAGE"
/* **************************************
* Structs and enums *
@@ -28,22 +30,12 @@ static void PltParserResetBuffers(TYPE_FLIGHT_DATA* ptrFlightData);
bool PltParserLoadFile(char* strPath, TYPE_FLIGHT_DATA* ptrFlightData)
{
- enum
- {
- DEPARTURE_ARRIVAL_INDEX = 0,
- FLIGHT_NUMBER_INDEX,
- PASSENGERS_INDEX,
- HOURS_MINUTES_INDEX,
- PARKING_INDEX,
- REMAINING_TIME_INDEX
- };
-
- enum
- {
- PLT_HOUR_MINUTE_CHARACTERS = 2,
- PLT_FIRST_LINE_CHARACTERS = 5,
- PLT_COLON_POSITION = 2
- };
+ enum
+ {
+ PLT_HOUR_MINUTE_CHARACTERS = 2,
+ PLT_FIRST_LINE_CHARACTERS = 5,
+ PLT_COLON_POSITION = 2
+ };
uint8_t i;
uint8_t j;
@@ -138,6 +130,15 @@ bool PltParserLoadFile(char* strPath, TYPE_FLIGHT_DATA* ptrFlightData)
}
else
{
+ typedef enum t_lineType
+ {
+ MESSAGE_INFO,
+ AIRCRAFT_DATA
+ }TYPE_LINE;
+
+ TYPE_LINE tLine = AIRCRAFT_DATA; // Default value
+ TYPE_MESSAGE_DATA tMessage = {0};
+
// File header (initial game time) has already been read
strncpy(lineBuffer, buffer, LINE_MAX_CHARACTERS);
@@ -151,6 +152,25 @@ bool PltParserLoadFile(char* strPath, TYPE_FLIGHT_DATA* ptrFlightData)
{
switch(i)
{
+ enum
+ {
+ DEPARTURE_ARRIVAL_INDEX = 0,
+ FLIGHT_NUMBER_INDEX,
+ PASSENGERS_INDEX,
+ HOURS_MINUTES_INDEX,
+ PARKING_INDEX,
+ REMAINING_TIME_INDEX
+ };
+
+ enum
+ {
+ MESSAGE_HEADER_INDEX = 0,
+ MESSAGE_TIMEOUT_INDEX,
+ MESSAGE_STR_INDEX
+ };
+
+ //case MESSAGE_HEADER_INDEX:
+ // Fall through
case DEPARTURE_ARRIVAL_INDEX:
if (strncmp(lineBufferPtr,"DEPARTURE",strlen("DEPARTURE") ) == 0)
@@ -163,21 +183,69 @@ bool PltParserLoadFile(char* strPath, TYPE_FLIGHT_DATA* ptrFlightData)
ptrFlightData->FlightDirection[aircraftIndex] = ARRIVAL;
Serial_printf("Aircraft %d set to ARRIVAL.\n",aircraftIndex);
}
+ else if (strncmp(lineBufferPtr, MESSAGE_HEADER_STR, strlen(MESSAGE_HEADER_STR) ) == 0)
+ {
+ tLine = MESSAGE_INFO;
+ }
else
{
Serial_printf("Flight direction is not correct!\n");
}
break;
+ //case MESSAGE_TIMEOUT_INDEX:
+ // Fall through
case FLIGHT_NUMBER_INDEX:
- strncpy(ptrFlightData->strFlightNumber[aircraftIndex],lineBufferPtr,GAME_MAX_CHARACTERS);
- ptrFlightData->strFlightNumber[aircraftIndex][GAME_MAX_CHARACTERS - 1] = '\0';
- Serial_printf("Aircraft %d flight number set to %s.\n",aircraftIndex,ptrFlightData->strFlightNumber[aircraftIndex]);
+
+ if (tLine == MESSAGE_INFO)
+ {
+ uint8_t Hours;
+ uint8_t Minutes;
+
+ if ( strlen(lineBufferPtr) != strlen("HH:MM") )
+ {
+ Serial_printf("Hour minute format is not correct! Read %s\n", lineBufferPtr);
+ break;
+ }
+
+ // Copy hour
+ strHour[0] = lineBufferPtr[0];
+ strHour[1] = lineBufferPtr[1];
+ // Copy minutes
+ strMinutes[0] = lineBufferPtr[3];
+ strMinutes[1] = lineBufferPtr[4];
+
+ Hours = (uint8_t)atoi(strHour);
+ Minutes = (uint8_t)atoi(strMinutes);
+
+ tMessage.Timeout = (uint32_t)(Hours * 60) + Minutes;
+
+ Serial_printf("Message timeout: %d seconds.\n", tMessage.Timeout);
+ }
+ else
+ {
+ strncpy(ptrFlightData->strFlightNumber[aircraftIndex],lineBufferPtr,GAME_MAX_CHARACTERS);
+ ptrFlightData->strFlightNumber[aircraftIndex][GAME_MAX_CHARACTERS - 1] = '\0';
+ Serial_printf("Aircraft %d flight number set to %s.\n",aircraftIndex,ptrFlightData->strFlightNumber[aircraftIndex]);
+ }
+
break;
+ // case MESSAGE_STR_INDEX:
+ // Fall through
case PASSENGERS_INDEX:
- ptrFlightData->Passengers[aircraftIndex] = atoi(lineBufferPtr);
- Serial_printf("Aircraft %d passengers set to %d.\n",aircraftIndex,ptrFlightData->Passengers[aircraftIndex]);
+ if (tLine == MESSAGE_INFO)
+ {
+ strncpy(tMessage.strMessage, lineBufferPtr, MAX_MESSAGE_STR_SIZE);
+ MessageCreate(&tMessage);
+
+ bzero(&tMessage, sizeof(tMessage));
+ }
+ else
+ {
+ ptrFlightData->Passengers[aircraftIndex] = atoi(lineBufferPtr);
+ Serial_printf("Aircraft %d passengers set to %d.\n",aircraftIndex,ptrFlightData->Passengers[aircraftIndex]);
+ }
break;
case PARKING_INDEX:
@@ -210,8 +278,8 @@ bool PltParserLoadFile(char* strPath, TYPE_FLIGHT_DATA* ptrFlightData)
ptrFlightData->Minutes[aircraftIndex] = (uint8_t)atoi(strMinutes);
Serial_printf("Aircraft %d time set to %.2d:%.2d.\n", aircraftIndex,
- ptrFlightData->Hours[aircraftIndex],
- ptrFlightData->Minutes[aircraftIndex] );
+ ptrFlightData->Hours[aircraftIndex],
+ ptrFlightData->Minutes[aircraftIndex] );
break;
case REMAINING_TIME_INDEX:
@@ -228,8 +296,11 @@ bool PltParserLoadFile(char* strPath, TYPE_FLIGHT_DATA* ptrFlightData)
i++;
}
- ptrFlightData->State[aircraftIndex] = STATE_IDLE;
- aircraftIndex++;
+ if (tLine == AIRCRAFT_DATA)
+ {
+ ptrFlightData->State[aircraftIndex] = STATE_IDLE;
+ aircraftIndex++;
+ }
}
buffer = strtok_r(NULL,"\n",&pltBufferSavePtr);