X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FSystems%2Fvacuum.cxx;h=9bf84e284d48fb5a4f992cb8122fb61426c1162c;hb=b838691f50ecd639c9a6d8a675e8d8986d4f2b49;hp=256e6efaff80c07a9290f13df02126a39fe84861;hpb=2c72f131639d4c2c2f1de7cff65f7ceab95f61c4;p=flightgear.git diff --git a/src/Systems/vacuum.cxx b/src/Systems/vacuum.cxx index 256e6efaf..9bf84e284 100644 --- a/src/Systems/vacuum.cxx +++ b/src/Systems/vacuum.cxx @@ -3,48 +3,30 @@ // // This file is in the Public Domain and comes with no warranty. +#ifdef HAVE_CONFIG_H +# include +#endif + #include "vacuum.hxx" + +#include + #include
VacuumSystem::VacuumSystem ( SGPropertyNode *node ) : - name("vacuum"), - num(0), - rpm("/engines/engine[0]/rpm"), - scale(1.0) - + _name(node->getStringValue("name", "vacuum")), + _num(node->getIntValue("number", 0)), + _scale(node->getDoubleValue("scale", 1.0)) { - int i; - for ( i = 0; i < node->nChildren(); ++i ) { + for ( int i = 0; i < node->nChildren(); ++i ) { SGPropertyNode *child = node->getChild(i); - string cname = child->getName(); - string cval = child->getStringValue(); - if ( cname == "name" ) { - name = cval; - } else if ( cname == "number" ) { - num = child->getIntValue(); - } else if ( cname == "rpm" ) { - rpm = cval; - } else if ( cname == "scale" ) { - scale = child->getDoubleValue(); - } else { - SG_LOG( SG_SYSTEMS, SG_WARN, "Error in vacuum config logic" ); - if ( name.length() ) { - SG_LOG( SG_SYSTEMS, SG_WARN, "Section = " << name ); - } - } + if (!strcmp(child->getName(), "rpm")) + _rpms.push_back(child->getStringValue()); } } -VacuumSystem::VacuumSystem( int i ) -{ - name = "vacuum"; - num = i; - rpm = "/engines/engine[0]/rpm"; - scale = 1.0; -} - VacuumSystem::~VacuumSystem () { } @@ -52,14 +34,26 @@ VacuumSystem::~VacuumSystem () void VacuumSystem::init() { - string branch; - branch = "/systems/" + name; + unsigned int i; + std::string branch; + branch = "/systems/" + _name; - SGPropertyNode *node = fgGetNode(branch.c_str(), num, true ); + SGPropertyNode *node = fgGetNode(branch.c_str(), _num, true ); _serviceable_node = node->getChild("serviceable", 0, true); - _rpm_node = fgGetNode(rpm.c_str(), true); + for ( i = 0; i < _rpms.size(); i++ ) { + SGPropertyNode_ptr _rpm_node = fgGetNode(_rpms[i].c_str(), true); + _rpm_nodes.push_back( _rpm_node ); + } _pressure_node = fgGetNode("/environment/pressure-inhg", true); _suction_node = node->getChild("suction-inhg", 0, true); + + reinit(); +} + +void +VacuumSystem::reinit() +{ + _suction_node->setDoubleValue(0.0); } void @@ -78,11 +72,19 @@ VacuumSystem::update (double dt) // Model taken from steam.cxx double suction; + unsigned int i; if (!_serviceable_node->getBoolValue()) { suction = 0.0; } else { - double rpm = _rpm_node->getDoubleValue() * scale; + // select the source with the max rpm + double rpm = 0.0; + for ( i = 0; i < _rpm_nodes.size(); i++ ) { + double tmp = _rpm_nodes[i]->getDoubleValue() * _scale; + if ( tmp > rpm ) { + rpm = tmp; + } + } double pressure = _pressure_node->getDoubleValue(); // This magic formula yields about 4 inhg at 700 rpm suction = pressure * rpm / (rpm + 4875.0);