diff --git a/src/Airports/simple.cxx b/src/Airports/simple.cxx index c7e486f45..7eceffe5b 100644 --- a/src/Airports/simple.cxx +++ b/src/Airports/simple.cxx @@ -143,7 +143,10 @@ FGRunway* FGAirport::getRunwayByIdent(const string& aIdent) const FGAirport::Runway_iterator FGAirport::getIteratorForRunwayIdent(const string& aIdent) const -{ +{ + if (aIdent.empty()) + return mRunways.end(); + loadRunways(); string ident(aIdent); diff --git a/src/Instrumentation/HUD/HUD.cxx b/src/Instrumentation/HUD/HUD.cxx index 4a7d6a542..eace97cc0 100644 --- a/src/Instrumentation/HUD/HUD.cxx +++ b/src/Instrumentation/HUD/HUD.cxx @@ -137,6 +137,8 @@ void HUD::init() _font_renderer->setPointSize(_font_size); _text_list.setFont(_font_renderer); + currentColorChanged(); + _path->fireValueChanged(); } @@ -446,29 +448,9 @@ void HUD::valueChanged(SGPropertyNode *node) load(fgGetString("/sim/hud/path[1]", "Huds/default.xml")); if (!strcmp(node->getName(), "current-color")) { - int i = node->getIntValue(); - if (i < 0) - i = 0; - SGPropertyNode *n = fgGetNode("/sim/hud/palette", true); - if ((n = n->getChild("color", i, false))) { - if (n->hasValue("red")) - _red->setFloatValue(n->getFloatValue("red", 1.0)); - if (n->hasValue("green")) - _green->setFloatValue(n->getFloatValue("green", 1.0)); - if (n->hasValue("blue")) - _blue->setFloatValue(n->getFloatValue("blue", 1.0)); - if (n->hasValue("alpha")) - _alpha->setFloatValue(n->getFloatValue("alpha", 0.67)); - if (n->hasValue("alpha-clamp")) - _alpha_clamp->setFloatValue(n->getFloatValue("alpha-clamp", 0.01)); - if (n->hasValue("brightness")) - _brightness->setFloatValue(n->getFloatValue("brightness", 0.75)); - if (n->hasValue("antialiased")) - _antialiasing->setBoolValue(n->getBoolValue("antialiased", false)); - if (n->hasValue("transparent")) - _transparency->setBoolValue(n->getBoolValue("transparent", false)); - } + currentColorChanged(); } + _scr_width = _scr_widthN->getIntValue(); _scr_height = _scr_heightN->getIntValue(); @@ -487,6 +469,36 @@ void HUD::valueChanged(SGPropertyNode *node) _listener_active = false; } +void HUD::currentColorChanged() +{ + SGPropertyNode *n = fgGetNode("/sim/hud/palette", true); + int index = _current->getIntValue(); + if (index < 0) { + index = 0; + } + + n = n->getChild("color", index, false); + if (!n) { + return; + } + + if (n->hasValue("red")) + _red->setFloatValue(n->getFloatValue("red", 1.0)); + if (n->hasValue("green")) + _green->setFloatValue(n->getFloatValue("green", 1.0)); + if (n->hasValue("blue")) + _blue->setFloatValue(n->getFloatValue("blue", 1.0)); + if (n->hasValue("alpha")) + _alpha->setFloatValue(n->getFloatValue("alpha", 0.67)); + if (n->hasValue("alpha-clamp")) + _alpha_clamp->setFloatValue(n->getFloatValue("alpha-clamp", 0.01)); + if (n->hasValue("brightness")) + _brightness->setFloatValue(n->getFloatValue("brightness", 0.75)); + if (n->hasValue("antialiased")) + _antialiasing->setBoolValue(n->getBoolValue("antialiased", false)); + if (n->hasValue("transparent")) + _transparency->setBoolValue(n->getBoolValue("transparent", false)); +} void HUD::setColor() const { diff --git a/src/Instrumentation/HUD/HUD.hxx b/src/Instrumentation/HUD/HUD.hxx index 3408e54c5..8539330f1 100644 --- a/src/Instrumentation/HUD/HUD.hxx +++ b/src/Instrumentation/HUD/HUD.hxx @@ -202,6 +202,8 @@ private: void draw3D(); void draw2D(GLfloat, GLfloat, GLfloat, GLfloat); + void currentColorChanged(); + class Input; class Item; class Label; diff --git a/src/Main/CameraGroup.cxx b/src/Main/CameraGroup.cxx index 305c68363..1c0bb6cca 100644 --- a/src/Main/CameraGroup.cxx +++ b/src/Main/CameraGroup.cxx @@ -162,7 +162,7 @@ CameraInfo* CameraGroup::addCamera(unsigned flags, Camera* camera, if (bufferMap.count(Camera::COLOR_BUFFER) != 0) { farCamera->attach( Camera::COLOR_BUFFER, - bufferMap.find(Camera::COLOR_BUFFER)->second._texture); + bufferMap.find(Camera::COLOR_BUFFER)->second._texture.get()); } _viewer->addSlave(farCamera, projection, view, useMasterSceneData); installCullVisitor(farCamera); diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx index 2e72e8276..c560f2765 100644 --- a/src/Main/globals.cxx +++ b/src/Main/globals.cxx @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -148,6 +149,7 @@ FGGlobals::FGGlobals() : channellist( NULL ) { simgear::ResourceManager::instance()->addProvider(new AircraftResourceProvider()); + simgear::PropertyObjectBase::setDefaultRoot(props); } diff --git a/src/Navaids/waypoint.cxx b/src/Navaids/waypoint.cxx index 5992774b1..12cee7744 100644 --- a/src/Navaids/waypoint.cxx +++ b/src/Navaids/waypoint.cxx @@ -39,6 +39,9 @@ BasicWaypt::BasicWaypt(const SGGeod& aPos, const string& aIdent, Route* aOwner) _pos(aPos), _ident(aIdent) { + if (aPos.getElevationFt() > -999.0) { + setAltitude(aPos.getElevationFt(), RESTRICT_AT); + } } BasicWaypt::BasicWaypt(const SGWayPoint& aWP, Route* aOwner) : diff --git a/src/Traffic/Schedule.cxx b/src/Traffic/Schedule.cxx index 3b8e7636d..cb7fafb3d 100644 --- a/src/Traffic/Schedule.cxx +++ b/src/Traffic/Schedule.cxx @@ -187,9 +187,6 @@ bool FGAISchedule::init() bool FGAISchedule::update(time_t now, const SGVec3d& userCart) { - if (!fgGetBool("/sim/traffic-manager/enabled")) - return true; - time_t totalTimeEnroute, elapsedTimeEnroute, diff --git a/src/Traffic/TrafficMgr.cxx b/src/Traffic/TrafficMgr.cxx index d9fcb6fff..765c870fd 100644 --- a/src/Traffic/TrafficMgr.cxx +++ b/src/Traffic/TrafficMgr.cxx @@ -75,7 +75,11 @@ using std::strcmp; /****************************************************************************** * TrafficManager *****************************************************************************/ -FGTrafficManager::FGTrafficManager() +FGTrafficManager::FGTrafficManager() : + inited(false), + enabled("/sim/traffic-manager/enabled"), + aiEnabled("/sim/ai/enabled"), + metarValid("/environment/metar/valid") { //score = 0; //runCount = 0; @@ -125,6 +129,10 @@ FGTrafficManager::~FGTrafficManager() void FGTrafficManager::init() { + if (!enabled || !aiEnabled) { + return; + } + heuristicsVector heuristics; HeuristicMap heurMap; @@ -218,13 +226,22 @@ void FGTrafficManager::init() 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; diff --git a/src/Traffic/TrafficMgr.hxx b/src/Traffic/TrafficMgr.hxx index 862c87be4..a9bb9a305 100644 --- a/src/Traffic/TrafficMgr.hxx +++ b/src/Traffic/TrafficMgr.hxx @@ -47,6 +47,7 @@ #define _TRAFFICMGR_HXX_ #include +#include #include #include @@ -54,19 +55,19 @@ #include "Schedule.hxx" -typedef vector IdList; -typedef vector::iterator IdListIterator; +typedef std::vector IdList; +typedef std::vector::iterator IdListIterator; class Heuristic { public: - string registration; + std::string registration; unsigned int runCount; unsigned int hits; }; -typedef vector heuristicsVector; -typedef vector::iterator heuristicsVectorIterator; +typedef std::vector heuristicsVector; +typedef std::vector::iterator heuristicsVectorIterator; typedef std::map < std::string, Heuristic> HeuristicMap; typedef HeuristicMap::iterator HeuristicMapIterator; @@ -77,11 +78,13 @@ typedef HeuristicMap::iterator HeuristicMapIterator; class FGTrafficManager : public SGSubsystem, public XMLVisitor { private: + bool inited; + ScheduleVector scheduledAircraft; ScheduleVectorIterator currAircraft, currAircraftClosest; vector 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; @@ -96,6 +99,7 @@ private: void readTimeTableFromFile(SGPath infilename); void Tokenize(const string& str, vector& tokens, const string& delimiters = " "); + simgear::PropertyObject enabled, aiEnabled, metarValid; public: FGTrafficManager(); ~FGTrafficManager();