]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/JSBSim/models/flight_control/FGSwitch.cpp
Merge branch 'next' of git://gitorious.org/fg/flightgear into next
[flightgear.git] / src / FDM / JSBSim / models / flight_control / FGSwitch.cpp
index 4e68ea7ffc2a5cefe08df67ca1cc5a6ef8b9e7bf..45b0a9921a9941335290d9ceaa831fe4cc127066 100644 (file)
@@ -69,7 +69,7 @@ using namespace std;
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id: FGSwitch.cpp,v 1.19 2009/10/24 22:59:30 jberndt Exp $";
+static const char *IdSrc = "$Id: FGSwitch.cpp,v 1.22 2011/06/17 12:12:19 jberndt Exp $";
 static const char *IdHdr = ID_SWITCH;
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -119,8 +119,11 @@ FGSwitch::FGSwitch(FGFCS* fcs, Element* element) : FGFCSComponent(fcs, element)
       tests.push_back(current_test);
     }
 
-    if (test_element->GetName() != "output"
-        && test_element->GetName() != "description") { // this is not an output element
+    string el_name = test_element->GetName();
+    if (   el_name != "output"
+        && el_name != "description"
+        && el_name != "delay" )
+    {
       value = test_element->GetAttributeValue("value");
       if (value.empty()) {
         cerr << "No VALUE supplied for switch component: " << Name << endl;
@@ -135,7 +138,13 @@ FGSwitch::FGSwitch(FGFCS* fcs, Element* element) : FGFCSComponent(fcs, element)
           } else {
             current_test->sign = 1.0;
           }
-          current_test->OutputProp = PropertyManager->GetNode(value);
+          FGPropertyManager *node = PropertyManager->GetNode(value, false);
+          if (node) {
+            current_test->OutputProp = new FGPropertyValue(node);
+          } else {
+            current_test->OutputProp = new FGPropertyValue(value,
+                                                           PropertyManager);
+          }
         }
       }
     }
@@ -151,6 +160,7 @@ FGSwitch::~FGSwitch()
 {
   for (unsigned int i=0; i<tests.size(); i++) {
     for (unsigned int j=0; j<tests[i]->conditions.size(); j++) delete tests[i]->conditions[j];
+    delete tests[i]->OutputProp;
     delete tests[i];
   }
 
@@ -189,6 +199,7 @@ bool FGSwitch::Run(void )
   
   if (!pass) Output = default_output;
 
+  if (delay != 0) Delay();
   Clip();
   if (IsOutput) SetOutput();