#ifndef _AIRPORT_DYNAMICS_HXX_
#define _AIRPORT_DYNAMICS_HXX_
-
-#ifndef __cplusplus
-# error This library requires C++
-#endif
-
-#include <simgear/xml/easyxml.hxx>
-
#include <ATC/trafficcontrol.hxx>
#include "parking.hxx"
#include "groundnetwork.hxx"
#include "runwayprefs.hxx"
+#include "sidstar.hxx"
-//typedef vector<float> DoubleVec;
-//typedef vector<float>::iterator DoubleVecIterator;
-
+// forward decls
class FGAirport;
-
+class FGEnvironment;
class FGAirportDynamics {
private:
FGAirport* _ap;
- FGParkingVec parkings;
- FGRunwayPreference rwyPrefs;
- FGStartupController startupController;
- FGGroundNetwork groundNetwork;
- FGTowerController towerController;
+ FGParkingVec parkings;
+ FGRunwayPreference rwyPrefs;
+ FGSidStar SIDs;
+ FGStartupController startupController;
+ FGGroundNetwork groundNetwork;
+ FGTowerController towerController;
+ FGApproachController approachController;
time_t lastUpdate;
- string prevTrafficType;
+ std::string prevTrafficType;
stringVec landing;
stringVec takeoff;
stringVec milActive, comActive, genActive, ulActive;
intVec freqTower; // </TOWER>
intVec freqApproach; // </APPROACH>
- string atisInformation;
+ int atisSequenceIndex;
+ double atisSequenceTimeStamp;
+
+ std::string chooseRunwayFallback();
+ bool innerGetActiveRunway(const std::string &trafficType, int action, std::string &runway, double heading);
+ std::string chooseRwyByHeading(stringVec rwys, double heading);
+
+ double elevation;
- string chooseRunwayFallback();
- bool innerGetActiveRunway(const string &trafficType, int action, string &runway);
public:
FGAirportDynamics(FGAirport* ap);
- FGAirportDynamics(const FGAirportDynamics &other);
~FGAirportDynamics();
void addAwosFreq (int val) { freqAwos.push_back(val); };
double getElevation() const;
const string& getId() const;
- void getActiveRunway(const string& trafficType, int action, string& runway);
+ void getActiveRunway(const string& trafficType, int action, string& runway, double heading);
void addParking(FGParking& park);
bool getAvailableParking(double *lat, double *lon,
//const string &getName() const { return _name;};
// Returns degrees
+ // Departure / Arrival procedures
+ FGSidStar * getSIDs() { return &SIDs; };
+ FGAIFlightPlan * getSID(string activeRunway, double heading);
+
// ATC related functions.
- FGStartupController *getStartupController() { return &startupController; };
- FGGroundNetwork *getGroundNetwork() { return &groundNetwork; };
- FGTowerController *getTowerController() { return &towerController; };
+ FGStartupController *getStartupController() { return &startupController; };
+ FGGroundNetwork *getGroundNetwork() { return &groundNetwork; };
+ FGTowerController *getTowerController() { return &towerController; };
+ FGApproachController *getApproachController() { return &approachController; };
+
+ int getGroundFrequency(unsigned leg);
+ int getTowerFrequency (unsigned nr);
+
+ /// get current ATIS sequence letter
+ const std::string getAtisSequence();
- const string& getAtisInformation() { return atisInformation; };
- int getGroundFrequency(int leg); //{ return freqGround.size() ? freqGround[0] : 0; };
+ /// get the current ATIS sequence number, updating it if necessary
+ int updateAtisSequence(int interval, bool forceUpdate);
void setRwyUse(const FGRunwayPreference& ref);
};