diff --git a/file/include/logbook/logbookEntry.hpp b/file/include/logbook/logbookEntry.hpp index a241015..3160001 100644 --- a/file/include/logbook/logbookEntry.hpp +++ b/file/include/logbook/logbookEntry.hpp @@ -20,32 +20,32 @@ namespace file * ---------+---------------+----------+------------- * DATE | FLIGHT NUMBER | AIRCRAFT | REGISTRATION - * Departure Airport Name (2...256) + * Departure Airport Name (1...257) * UINT8 | CHAR[] * -------+------- * STRLEN | STRING - * Departure Gate Name (2...256) + * Departure Gate Name (1...257) * UINT8 | CHAR[] * -------+------- * STRLEN | STRING - * Departure Runway Name (2...256) + * Departure Runway Name (1...257) * UINT8 | CHAR[] * -------+------- * STRLEN | STRING - * Arrival Airport Name (2...256) + * Arrival Airport Name (1...257) * UINT8 | CHAR[] * -------+------- * STRLEN | STRING - * Arrival Gate Name (2...256) + * Arrival Gate Name (1...257) * UINT8 | CHAR[] * -------+------- * STRLEN | STRING - * Arrival Runway Name (2...256) + * Arrival Runway Name (1...257) * UINT8 | CHAR[] * -------+------- * STRLEN | STRING @@ -70,7 +70,7 @@ namespace file * ---------+---------- +------------ * MAX RATE | TOUCHDOWNS | MAX G-FORCE - * Recording Filename (2...256) + * Recording Filename (1...257) * UINT8 | CHAR[] * -------+------- * STRLEN | STRING @@ -81,9 +81,9 @@ namespace file * POINTS | FLAGS * Flags Bitfield - * 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 - * ----+-----+-----+-----+-----+-----+-----+------ - * NIL | NIL | NIL | NIL | NIL | NIL | NIL | FILED + * 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 + * ----+-----+-----+-----+------+------+--------+------ + * NIL | NIL | NIL | NIL | SYNC | IVAO | VATSIM | FILED */ class LogbookEntry { diff --git a/file/include/simdata/runway.hpp b/file/include/simdata/runway.hpp index d248af9..caa923a 100644 --- a/file/include/simdata/runway.hpp +++ b/file/include/simdata/runway.hpp @@ -8,6 +8,7 @@ #include #include #include +#include #include "geodata.hpp" #include "helpers.hpp" @@ -73,7 +74,37 @@ namespace file inline bool containsPoint(const geodata::point point) const { - return false; + size_t j = 3; + bool c = false; + std::vector poly{this->bounds.topLeft, + this->bounds.topRight, + this->bounds.bottomRight, + this->bounds.bottomLeft}; + + for (size_t i = 0; i < poly.size(); i++) { + if ((point.latitude == poly[i].latitude) && + (point.longitude == poly[i].longitude)) { + // point is a corner + return true; + } + if (((poly[i].longitude > point.longitude) != + (poly[j].longitude > point.longitude))) { + double slope = (point.latitude - poly[i].latitude) * + (poly[j].longitude - poly[i].longitude) - + (poly[j].latitude - poly[i].latitude) * + (point.longitude - poly[i].longitude); + if (slope == 0) { + // point is on boundary + return true; + } + if ((slope < 0) != (poly[j].longitude < poly[i].longitude)) { + c = !c; + } + } + j = i; + } + + return c; } inline void toFile(std::ofstream &out) const