From f7548fec1fd9b8056dba3fdb3eaa1a47e3ad4f73 Mon Sep 17 00:00:00 2001 From: James Turner Date: Wed, 1 Dec 2010 23:57:01 +0000 Subject: [PATCH 1/5] Fix bug #185 - altitude ignored when adding waypoints to the route. --- src/Navaids/waypoint.cxx | 3 +++ 1 file changed, 3 insertions(+) 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) : From 55c0d3f4d67df88b56cf5b6e2f1b41f152365754 Mon Sep 17 00:00:00 2001 From: James Turner Date: Wed, 1 Dec 2010 23:57:18 +0000 Subject: [PATCH 2/5] Build without OSG implicit ref-ptr conversion --- src/Main/CameraGroup.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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); From a9a1734f1e1d8e2e4f52309a5965624704385c8a Mon Sep 17 00:00:00 2001 From: James Turner Date: Thu, 2 Dec 2010 00:41:29 +0000 Subject: [PATCH 3/5] Fix bug 191, uninitialised HUD color. --- src/Instrumentation/HUD/HUD.cxx | 56 ++++++++++++++++++++------------- src/Instrumentation/HUD/HUD.hxx | 2 ++ 2 files changed, 36 insertions(+), 22 deletions(-) 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; From b9976f7d3422137f505d23724662d3fba6ec7c8c Mon Sep 17 00:00:00 2001 From: James Turner Date: Thu, 2 Dec 2010 20:29:28 +0000 Subject: [PATCH 4/5] Fix for bug #72 - don't init traffic manager if disabled. Disabling the traffic-manager at runtime will prevent new flights being scheduled. --- src/Main/globals.cxx | 2 ++ src/Traffic/Schedule.cxx | 3 --- src/Traffic/TrafficMgr.cxx | 21 +++++++++++++++++++-- src/Traffic/TrafficMgr.hxx | 16 ++++++++++------ 4 files changed, 31 insertions(+), 11 deletions(-) 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/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(); From 58ca6c916f3e9b74ca2a0f3ee2f23f0ece247f4e Mon Sep 17 00:00:00 2001 From: Frederic Bouvier Date: Fri, 3 Dec 2010 08:59:14 +0100 Subject: [PATCH 5/5] Fix for bug #177 - check for empty strings --- src/Airports/simple.cxx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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);