1#ifndef COMPETITIONLOGIC_HPP
2#define COMPETITIONLOGIC_HPP
30 bool evaluateOffCourse(
Track& track,
double time, Eigen::Vector3d& position, Eigen::Vector3d& orientation);
32 void evaluateConeHit(
Track& track,
double time, Eigen::Vector3d& position, Eigen::Vector3d& orientation);
35 Eigen::Vector3d lm1, Eigen::Vector3d lm2, Eigen::Vector3d& position, Eigen::Vector3d& orientation);
41 bool checkUSS(
Track track,
double time, Eigen::Vector3d position);
43 bool checkDNF(
Track track,
double time, Eigen::Vector3d position);
45 bool performAllChecks(
Track& track,
double time, Eigen::Vector3d& position, Eigen::Vector3d& orientation);
52 bool pointInTriangle(Eigen::Vector2d a, Eigen::Vector2d b, Eigen::Vector2d c, Eigen::Vector2d point);
56 bool pointInPolygon(std::vector<Eigen::Vector2d> polyPoints, Eigen::Vector2d point);
59 Eigen::Vector2d a, Eigen::Vector2d b, Eigen::Vector2d rayOrigin, Eigen::Vector2d rayDirection);
61 double cross2d(Eigen::Vector2d a, Eigen::Vector2d b);
65 bool carConePolyIntersect(std::vector<Eigen::Vector2d> carPoly, std::vector<Eigen::Vector2d> conePoly);
69 bool inLineSegement(Eigen::Vector2d a, Eigen::Vector2d b, Eigen::Vector2d position);
double timeout_trackdrive_total
bool checkUSS(Track track, double time, Eigen::Vector3d position)
std::vector< std::vector< double > > sectorTimes
double cross2d(Eigen::Vector2d a, Eigen::Vector2d b)
std::vector< double > currentSectorTimes
bool evaluateOffCourse(Track &track, double time, Eigen::Vector3d &position, Eigen::Vector3d &orientation)
bool pointInTriangle(Eigen::Vector2d a, Eigen::Vector2d b, Eigen::Vector2d c, Eigen::Vector2d point)
std::vector< bool > pointsInTrackConnected(Track &track, std::vector< Eigen::Vector2d > points)
bool checkDNF(Track track, double time, Eigen::Vector3d position)
std::vector< int > timeKeepingStatuses
std::vector< Penalty > penalties
double timeout_trackdrive_first
bool carConePolyIntersect(std::vector< Eigen::Vector2d > carPoly, std::vector< Eigen::Vector2d > conePoly)
bool inLineSegement(Eigen::Vector2d a, Eigen::Vector2d b, Eigen::Vector2d position)
int timeKeepingStatus(Eigen::Vector3d lm1, Eigen::Vector3d lm2, Eigen::Vector3d &position, Eigen::Vector3d &orientation)
std::vector< bool > pointsInTrackNotConnected(Track &track, std::vector< Eigen::Vector2d > points)
bool pointInPolygon(std::vector< Eigen::Vector2d > polyPoints, Eigen::Vector2d point)
std::string discipline2str(Discipline d)
std::vector< double > lapTimes
std::vector< int > timeKeepingFirstTriggerStatuses
std::vector< std::vector< double > > triggerTimes
void evaluateTimeKeepings(Track &track, Eigen::Vector3d &position, Eigen::Vector3d &orientation, double time)
bool checkFinishConditionsMet(double time)
bool performAllChecks(Track &track, double time, Eigen::Vector3d &position, Eigen::Vector3d &orientation)
std::pair< bool, bool > rayIntersectLineSegment(Eigen::Vector2d a, Eigen::Vector2d b, Eigen::Vector2d rayOrigin, Eigen::Vector2d rayDirection)
void evaluateTimeKeepingGateTrigger(Track track, double time, int index)
void fillReport(Report &report, double time)
double finishConditionsMetFirstTime
std::string penalty2str(PENALTY_TYPE p)
bool checkTimeout(double time)
double timeout_acceleration
void evaluateConeHit(Track &track, double time, Eigen::Vector3d &position, Eigen::Vector3d &orientation)
double determinantLinePoint(Eigen::Vector2d a, Eigen::Vector2d b, Eigen::Vector2d c)
std::shared_ptr< Logger > logger