]> git.mxchange.org Git - flightgear.git/blobdiff - src/Autopilot/route_mgr.cxx
Cleanup, no functional change
[flightgear.git] / src / Autopilot / route_mgr.cxx
index 3773c2e06c3f90022bcd9d9fa9f5fcc8103ee7e8..fa9e588a289d4a3ee27690bf2dbc38067439d274 100644 (file)
@@ -215,7 +215,7 @@ FGRouteMgr::FGRouteMgr() :
   input->setStringValue("");
   input->addChangeListener(listener);
   
-  SGCommandMgr* cmdMgr = SGCommandMgr::instance();
+  SGCommandMgr* cmdMgr = globals->get_commands();
   cmdMgr->addCommand("define-user-waypoint", this, &FGRouteMgr::commandDefineUserWaypoint);
   cmdMgr->addCommand("delete-user-waypoint", this, &FGRouteMgr::commandDeleteUserWaypoint);
     
@@ -234,9 +234,20 @@ FGRouteMgr::~FGRouteMgr()
   input->removeChangeListener(listener);
   delete listener;
     
-  SGCommandMgr* cmdMgr = SGCommandMgr::instance();
-  //cmdMgr->removeCommand("define-user-waypoint");
-    
+    if (_plan) {
+               _plan->removeDelegate(this);
+       }
+
+    SGCommandMgr* cmdMgr = globals->get_commands();
+    cmdMgr->removeCommand("define-user-waypoint");
+    cmdMgr->removeCommand("delete-user-waypoint");
+    cmdMgr->removeCommand("load-flightplan");
+    cmdMgr->removeCommand("save-flightplan");
+    cmdMgr->removeCommand("activate-flightplan");
+    cmdMgr->removeCommand("clear-flightplan");
+    cmdMgr->removeCommand("set-active-waypt");
+    cmdMgr->removeCommand("insert-waypt");
+    cmdMgr->removeCommand("delete-waypt");
 }
 
 
@@ -258,7 +269,7 @@ void FGRouteMgr::init() {
   departure->tie("name", SGRawValueMethods<FGRouteMgr, const char*>(*this, 
     &FGRouteMgr::getDepartureName, NULL));
   departure->tie("field-elevation-ft", SGRawValueMethods<FGRouteMgr, double>(*this, 
-                                                                               &FGRouteMgr::getDestinationFieldElevation, NULL));
+                                                                               &FGRouteMgr::getDepartureFieldElevation, NULL));
   departure->getChild("etd", 0, true);
   departure->getChild("takeoff-time", 0, true);
 
@@ -283,6 +294,7 @@ void FGRouteMgr::init() {
                                                                       &FGRouteMgr::getDestinationFieldElevation, NULL));
   
   destination->getChild("eta", 0, true);
+  destination->getChild("eta-seconds", 0, true);
   destination->getChild("touchdown-time", 0, true);
 
   alternate = fgGetNode(RM "alternate", true);
@@ -324,16 +336,19 @@ void FGRouteMgr::init() {
   wp0->getChild("id", 0, true);
   wp0->getChild("dist", 0, true);
   wp0->getChild("eta", 0, true);
+  wp0->getChild("eta-seconds", 0, true);
   wp0->getChild("bearing-deg", 0, true);
   
   wp1 = fgGetNode(RM "wp", 1, true);
   wp1->getChild("id", 0, true);
   wp1->getChild("dist", 0, true);
   wp1->getChild("eta", 0, true);
+  wp1->getChild("eta-seconds", 0, true);
   
   wpn = fgGetNode(RM "wp-last", 0, true);
   wpn->getChild("dist", 0, true);
   wpn->getChild("eta", 0, true);
+  wpn->getChild("eta-seconds", 0, true);
   
   _pathNode = fgGetNode(RM "file-path", 0, true);
 }
@@ -401,12 +416,12 @@ bool FGRouteMgr::loadRoute(const SGPath& p)
   return true;
 }
 
-FlightPlan* FGRouteMgr::flightPlan() const
+FlightPlanRef FGRouteMgr::flightPlan() const
 {
   return _plan;
 }
 
-void FGRouteMgr::setFlightPlan(FlightPlan* plan)
+void FGRouteMgr::setFlightPlan(const FlightPlanRef& plan)
 {
   if (plan == _plan) {
     return;
@@ -414,7 +429,6 @@ void FGRouteMgr::setFlightPlan(FlightPlan* plan)
   
   if (_plan) {
     _plan->removeDelegate(this);
-    delete _plan;
     active->setBoolValue(false);
   }
   
@@ -477,7 +491,7 @@ void FGRouteMgr::update( double dt )
   wp0->setDoubleValue("true-bearing-deg", courseDeg);
   courseDeg -= magvar->getDoubleValue(); // expose magnetic bearing
   wp0->setDoubleValue("bearing-deg", courseDeg);
-  setETAPropertyFromDistance(wp0->getChild("eta"), distanceM);
+  setETAPropertyFromDistance(wp0, distanceM);
   
   double totalPathDistanceNm = _plan->totalDistanceNm();
   double totalDistanceRemaining = distanceM * SG_METER_TO_NM; // distance to current waypoint
@@ -499,7 +513,7 @@ void FGRouteMgr::update( double dt )
     wp1->setDoubleValue("true-bearing-deg", courseDeg);
     courseDeg -= magvar->getDoubleValue(); // expose magnetic bearing
     wp1->setDoubleValue("bearing-deg", courseDeg);
-    setETAPropertyFromDistance(wp1->getChild("eta"), distanceM);    
+    setETAPropertyFromDistance(wp1, distanceM);    
     wp1->setDoubleValue("distance-along-route-nm", 
                         nextLeg->distanceAlongRoute());
     wp1->setDoubleValue("remaining-distance-nm", 
@@ -509,7 +523,7 @@ void FGRouteMgr::update( double dt )
   distanceToGo->setDoubleValue(totalDistanceRemaining);
   wpn->setDoubleValue("dist", totalDistanceRemaining);
   ete->setDoubleValue(totalDistanceRemaining / gs * 3600.0);
-  setETAPropertyFromDistance(wpn->getChild("eta"), totalDistanceRemaining);
+  setETAPropertyFromDistance(wpn, totalDistanceRemaining);
 }
 
 void FGRouteMgr::clearRoute()
@@ -565,6 +579,7 @@ void FGRouteMgr::setETAPropertyFromDistance(SGPropertyNode_ptr aProp, double aDi
 
   char eta_str[64];
   double eta = aDistance * SG_METER_TO_NM / speed;
+  aProp->getChild("eta-seconds")->setIntValue( eta * 3600 );
   if ( eta >= 100.0 ) { 
       eta = 99.999; // clamp
   }
@@ -576,7 +591,7 @@ void FGRouteMgr::setETAPropertyFromDistance(SGPropertyNode_ptr aProp, double aDi
   int major = (int)eta, 
       minor = (int)((eta - (int)eta) * 60.0);
   snprintf( eta_str, 64, "%d:%02d", major, minor );
-  aProp->setStringValue( eta_str );
+  aProp->getChild("eta")->setStringValue( eta_str );
 }
 
 void FGRouteMgr::removeLegAtIndex(int aIndex)
@@ -792,6 +807,10 @@ const char* FGRouteMgr::getDepartureRunway() const
 
 void FGRouteMgr::setDepartureRunway(const char* aIdent)
 {
+    if (!_plan) {
+        return;
+    }
+    
   FGAirport* apt = _plan->departureAirport();
   if (!apt || (aIdent == NULL)) {
     _plan->setDeparture(apt);
@@ -802,6 +821,10 @@ void FGRouteMgr::setDepartureRunway(const char* aIdent)
 
 void FGRouteMgr::setDepartureICAO(const char* aIdent)
 {
+    if (!_plan) {
+        return;
+    }
+    
   if ((aIdent == NULL) || (strlen(aIdent) < 4)) {
     _plan->setDeparture((FGAirport*) NULL);
   } else {
@@ -883,6 +906,10 @@ flightgear::SID* createDefaultSID(FGRunway* aRunway, double enrouteCourse)
 
 void FGRouteMgr::setSID(const char* aIdent)
 {
+    if (!_plan) {
+        return;
+    }
+    
   FGAirport* apt = _plan->departureAirport();
   if (!apt || (aIdent == NULL)) {
     _plan->setSID((flightgear::SID*) NULL);
@@ -933,6 +960,10 @@ const char* FGRouteMgr::getDestinationName() const
 
 void FGRouteMgr::setDestinationICAO(const char* aIdent)
 {
+    if (!_plan) {
+        return;
+    }
+    
   if ((aIdent == NULL) || (strlen(aIdent) < 4)) {
     _plan->setDestination((FGAirport*) NULL);
   } else {
@@ -951,6 +982,10 @@ const char* FGRouteMgr::getDestinationRunway() const
 
 void FGRouteMgr::setDestinationRunway(const char* aIdent)
 {
+    if (!_plan) {
+        return;
+    }
+    
   FGAirport* apt = _plan->destinationAirport();
   if (!apt || (aIdent == NULL)) {
     _plan->setDestination(apt);
@@ -1030,6 +1065,10 @@ flightgear::Approach* createDefaultApproach(FGRunway* aRunway, double aEnrouteCo
 
 void FGRouteMgr::setApproach(const char* aIdent)
 {
+    if (!_plan) {
+        return;
+    }
+    
   FGAirport* apt = _plan->destinationAirport();
   if (!strcmp(aIdent, "DEFAULT")) {
     double enrouteCourse = -1.0;
@@ -1059,6 +1098,10 @@ const char* FGRouteMgr::getSTAR() const
 
 void FGRouteMgr::setSTAR(const char* aIdent)
 {
+    if (!_plan) {
+        return;
+    }
+    
   FGAirport* apt = _plan->destinationAirport();
   if (!apt || (aIdent == NULL)) {
     _plan->setSTAR((STAR*) NULL);