}
}
- resetPropertyState();
-
fdmex = new FGFDMExec( (FGPropertyManager*)globals->get_props() );
// Register ground callback.
/******************************************************************************/
+void checkTied ( FGPropertyManager *node )
+{
+ int N = node->nChildren();
+ string name;
+
+ for (int i=0; i<N; i++) {
+ if (node->getChild(i)->nChildren() ) {
+ checkTied( (FGPropertyManager*)node->getChild(i) );
+ }
+ if ( node->getChild(i)->isTied() ) {
+ name = ((FGPropertyManager*)node->getChild(i))->GetFullyQualifiedName();
+ node->Untie(name);
+ }
+ }
+}
+
+/******************************************************************************/
+
+void FGJSBsim::unbind()
+{
+ SGPropertyNode* instance = globals->get_props()->getNode("/fdm/jsbsim");
+ checkTied((FGPropertyManager*)instance);
+ FGInterface::unbind();
+}
+
+/******************************************************************************/
+
// Run an iteration of the EOM (equations of motion)
void FGJSBsim::update( double dt )
fgSetDouble("/fdm/jsbsim/systems/hook/tailhook-pos-deg", fi);
}
-void FGJSBsim::resetPropertyState()
-{
-// this code works-around bug #222:
-// http://code.google.com/p/flightgear-bugs/issues/detail?id=222
-// for whatever reason, having an existing value for the WOW
-// property causes the NaNs. Should that be fixed, this code can die
- SGPropertyNode* gear = fgGetNode("/fdm/jsbsim/gear", false);
- if (!gear) {
- return;
- }
-
- int index = 0;
- SGPropertyNode* unitNode = NULL;
- for (; (unitNode = gear->getChild("unit", index)) != NULL; ++index) {
- unitNode->removeChild("WOW", 0, false);
- }
-}
-
/// Reset flight params to a specific position
void init();
+ /// Unbind properties
+ void unbind();
+
/// @name Position Parameter Set
//@{
/** Set geocentric latitude
void update_gear(void);
void update_external_forces(double t_off);
-
- void resetPropertyState();
};
try {
if (type == "piston_engine") {
HavePistonEngine = true;
+ if (!IsBound) bind();
Engines.push_back(new FGPiston(FDMExec, document, numEngines));
} else if (type == "turbine_engine") {
HaveTurbineEngine = true;
+ if (!IsBound) bind();
Engines.push_back(new FGTurbine(FDMExec, document, numEngines));
} else if (type == "turboprop_engine") {
HaveTurboPropEngine = true;
+ if (!IsBound) bind();
Engines.push_back(new FGTurboProp(FDMExec, document, numEngines));
} else if (type == "rocket_engine") {
HaveRocketEngine = true;
+ if (!IsBound) bind();
Engines.push_back(new FGRocket(FDMExec, document, numEngines));
} else if (type == "electric_engine") {
HaveElectricEngine = true;
+ if (!IsBound) bind();
Engines.push_back(new FGElectric(FDMExec, document, numEngines));
} else {
cerr << "Unknown engine type: " << type << endl;
if (el->FindElement("dump-rate"))
DumpRate = el->FindElementValueAsNumberConvertTo("dump-rate", "LBS/MIN");
- if (!IsBound) bind();
PostLoad(el, PropertyManager);
return true;
typedef int (FGPropulsion::*iPMF)(void) const;
IsBound = true;
- PropertyManager->Tie("propulsion/set-running", this, (iPMF)0, &FGPropulsion::InitRunning, true);
+ PropertyManager->Tie("propulsion/set-running", this, (iPMF)0, &FGPropulsion::InitRunning, false);
if (HaveTurbineEngine) {
PropertyManager->Tie("propulsion/starter_cmd", this, (iPMF)0, &FGPropulsion::SetStarter, true);
PropertyManager->Tie("propulsion/cutoff_cmd", this, (iPMF)0, &FGPropulsion::SetCutoff, true);