X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FSystems%2Felectrical.cxx;h=4f8329af5706e2675feae2a6782212bbbdb93ceb;hb=198b88ca9b4a4b123b2e9ccdc85ea17eeaea70c6;hp=75a1a4fbcda8a8441063f19c58c644d486d3ee5f;hpb=9adaa93b1928a6bb0a5e8a8d8453c35a3909de3f;p=flightgear.git diff --git a/src/Systems/electrical.cxx b/src/Systems/electrical.cxx index 75a1a4fbc..4f8329af5 100644 --- a/src/Systems/electrical.cxx +++ b/src/Systems/electrical.cxx @@ -56,6 +56,7 @@ FGElectricalSupplier::FGElectricalSupplier ( SGPropertyNode *node ) { } volts = node->getDoubleValue("volts"); amps = node->getDoubleValue("amps"); + rpm_src = node->getStringValue("rpm-source"); int i; for ( i = 0; i < node->nChildren(); ++i ) { @@ -69,7 +70,7 @@ FGElectricalSupplier::FGElectricalSupplier ( SGPropertyNode *node ) { } } - _rpm_node = fgGetNode("/engines/engine[0]/rpm", true); + _rpm_node = fgGetNode( rpm_src.c_str(), true); } @@ -180,9 +181,33 @@ FGElectricalConnector::FGElectricalConnector ( SGPropertyNode *node, add_switch( fgGetNode( child->getStringValue(), true ) ); } } + + // do a 2nd pass to pick up starting switch value if specified + for ( i = 0; i < node->nChildren(); ++i ) { + SGPropertyNode *child = node->getChild(i); + string cname = child->getName(); + string cval = child->getStringValue(); + // cout << " " << cname << " = " << cval << endl; + if ( cname == "initial-state" ) { + if ( cval == "off" ) { + set_switches( false ); + } else { + set_switches( true ); + } + } + } } +// set all switches to the specified state +void FGElectricalConnector::set_switches( bool state ) { + // cout << "setting switch state to " << state << endl; + for ( unsigned int i = 0; i < switches.size(); ++i ) { + switches[i]->setBoolValue( state ); + } +} + + // return true if all switches are true, false otherwise. A connector // could have multiple switches, but they all need to be true(closed) // for current to get through. @@ -277,10 +302,10 @@ void FGElectricalSystem::update (double dt) { connectors[i]->set_value( 0.0 ); } - // for each supplier, propogate the electrical current + // for each supplier, propagate the electrical current for ( i = 0; i < suppliers.size(); ++i ) { // cout << " Updating: " << suppliers[i]->get_name() << endl; - propogate( suppliers[i], 0.0, " " ); + propagate( suppliers[i], 0.0, " " ); } } @@ -322,8 +347,8 @@ bool FGElectricalSystem::build () { } -// propogate the electrical current through the network -void FGElectricalSystem::propogate( FGElectricalComponent *node, double val, +// propagate the electrical current through the network +void FGElectricalSystem::propagate( FGElectricalComponent *node, double val, string s ) { s += " "; @@ -364,9 +389,9 @@ void FGElectricalSystem::propogate( FGElectricalComponent *node, double val, } // cout << s << node->get_name() << " -> " << node->get_value() << endl; - // propogate to all children + // propagate to all children for ( i = 0; i < node->get_num_outputs(); ++i ) { - propogate( node->get_output(i), current, s ); + propagate( node->get_output(i), current, s ); } }