#include <simgear/structure/event_mgr.hxx>
#include <simgear/sound/soundmgr_openal.hxx>
#include <simgear/misc/ResourceManager.hxx>
+#include <simgear/props/propertyObject.hxx>
#include <Aircraft/controls.hxx>
#include <Airports/runways.hxx>
channellist( NULL )
{
simgear::ResourceManager::instance()->addProvider(new AircraftResourceProvider());
+ simgear::PropertyObjectBase::setDefaultRoot(props);
}
/******************************************************************************
* TrafficManager
*****************************************************************************/
-FGTrafficManager::FGTrafficManager()
+FGTrafficManager::FGTrafficManager() :
+ inited(false),
+ enabled("/sim/traffic-manager/enabled"),
+ aiEnabled("/sim/ai/enabled"),
+ metarValid("/environment/metar/valid")
{
//score = 0;
//runCount = 0;
void FGTrafficManager::init()
{
+ if (!enabled || !aiEnabled) {
+ return;
+ }
+
heuristicsVector heuristics;
HeuristicMap heurMap;
compareSchedules);
currAircraft = scheduledAircraft.begin();
currAircraftClosest = scheduledAircraft.begin();
+
+ inited = true;
}
void FGTrafficManager::update(double /*dt */ )
{
- if (fgGetBool("/environment/metar/valid") == false) {
+ if (!enabled || !aiEnabled || !metarValid) {
return;
}
+
+ if (!inited) {
+ // lazy-initialization, we've been enabled at run-time
+ SG_LOG(SG_GENERAL, SG_INFO, "doing lazy-init of TrafficManager");
+ init();
+ }
+
time_t now = time(NULL) + fgGetLong("/sim/time/warp");
if (scheduledAircraft.size() == 0) {
return;
#define _TRAFFICMGR_HXX_
#include <simgear/structure/subsystem_mgr.hxx>
+#include <simgear/props/propertyObject.hxx>
#include <simgear/xml/easyxml.hxx>
#include <simgear/misc/sg_path.hxx>
#include "Schedule.hxx"
-typedef vector<int> IdList;
-typedef vector<int>::iterator IdListIterator;
+typedef std::vector<int> IdList;
+typedef std::vector<int>::iterator IdListIterator;
class Heuristic
{
public:
- string registration;
+ std::string registration;
unsigned int runCount;
unsigned int hits;
};
-typedef vector<Heuristic> heuristicsVector;
-typedef vector<Heuristic>::iterator heuristicsVectorIterator;
+typedef std::vector<Heuristic> heuristicsVector;
+typedef std::vector<Heuristic>::iterator heuristicsVectorIterator;
typedef std::map < std::string, Heuristic> HeuristicMap;
typedef HeuristicMap::iterator HeuristicMapIterator;
class FGTrafficManager : public SGSubsystem, public XMLVisitor
{
private:
+ bool inited;
+
ScheduleVector scheduledAircraft;
ScheduleVectorIterator currAircraft, currAircraftClosest;
vector<string> elementValueStack;
- string mdl, livery, registration, callsign, fltrules,
+ std::string mdl, livery, registration, callsign, fltrules,
port, timeString, departurePort, departureTime, arrivalPort, arrivalTime,
repeat, acType, airline, m_class, flighttype, requiredAircraft, homePort;
int cruiseAlt;
void readTimeTableFromFile(SGPath infilename);
void Tokenize(const string& str, vector<string>& tokens, const string& delimiters = " ");
+ simgear::PropertyObject<bool> enabled, aiEnabled, metarValid;
public:
FGTrafficManager();
~FGTrafficManager();