if ( val != NULL ) {
enable_value = val->getStringValue();
}
+ SGPropertyNode *pass = child->getChild( "honor-passive" );
+ if ( pass != NULL ) {
+ honor_passive = pass->getBoolValue();
+ }
} else if ( cname == "input" ) {
SGPropertyNode *prop = child->getChild( "prop" );
if ( prop != NULL ) {
edf_n_2 = edf_n_1;
edf_n_1 = edf_n;
- unsigned int i;
- for ( i = 0; i < output_list.size(); ++i ) {
- output_list[i]->setDoubleValue( u_n );
+ // passive_ignore == true means that we go through all the
+ // motions, but drive the outputs. This is analogous to
+ // running the autopilot with the "servos" off. This is
+ // helpful for things like flight directors which position
+ // their vbars from the autopilot computations.
+ if ( passive_mode->getBoolValue() && honor_passive ) {
+ // skip output step
+ } else {
+ unsigned int i;
+ for ( i = 0; i < output_list.size(); ++i ) {
+ output_list[i]->setDoubleValue( u_n );
+ }
}
} else if ( !enabled ) {
ep_n = 0.0;
#include <simgear/props/props.hxx>
#include <simgear/structure/subsystem_mgr.hxx>
+#include <Main/fg_props.hxx>
+
/**
* Base class for other autopilot components
string name;
SGPropertyNode_ptr enable_prop;
+ SGPropertyNode_ptr passive_mode;
string enable_value;
+ bool honor_passive;
bool enabled;
SGPropertyNode_ptr input_prop;
FGXMLAutoComponent() :
enable_prop( NULL ),
+ passive_mode( fgGetNode("/autopilot/settings/passive-mode", true) ),
enable_value( "" ),
+ honor_passive( false ),
enabled( false ),
input_prop( NULL ),
r_n_prop( NULL ),