- // Copy the engine values from JSBSim.
- for( i=0; i < nengines; i++ ) {
- FGEngine * eng = Propulsion->GetEngine(i);
- if(engines[i].mp_osi)
- engines[i].mp_osi->setDoubleValue( eng->getManifoldPressure_inHg());
- if(engines[i].egt_degf)
- engines[i].egt_degf->setDoubleValue( eng->getExhaustGasTemp_degF());
- if(engines[i].fuel_flow_gph)
- engines[i].fuel_flow_gph->setDoubleValue( eng->getFuelFlow_gph());
- if(engines[i].cht_degf)
- engines[i].cht_degf->setDoubleValue( eng->getCylinderHeadTemp_degF());
- if(engines[i].oil_temperature_degf)
- engines[i].oil_temperature_degf->setDoubleValue( eng->getOilTemp_degF());
- if(engines[i].oil_pressure_psi)
- engines[i].oil_pressure_psi->setDoubleValue( eng->getOilPressure_psi());
- if(engines[i].running)
- engines[i].running->setBoolValue( eng->GetRunning());
- if(engines[i].cranking)
- engines[i].cranking->setBoolValue( eng->GetCranking());
- if(engines[i].rpm)
- engines[i].rpm->setDoubleValue( Propulsion->GetThruster(i)->GetRPM());
- }
+ // Copy the engine values from JSBSim.
+ for ( i=0; i < Propulsion->GetNumEngines(); i++ ) {
+ SGPropertyNode * node = fgGetNode("engines/engine", i, true);
+ char buf[30];
+ sprintf(buf, "engines/engine[%d]/thruster", i);
+ SGPropertyNode * tnode = fgGetNode(buf, true);
+ FGThruster * thruster = Propulsion->GetEngine(i)->GetThruster();
+
+ switch (Propulsion->GetEngine(i)->GetType()) {
+ case FGEngine::etPiston:
+ { // FGPiston code block
+ FGPiston* eng = (FGPiston*)Propulsion->GetEngine(i);
+ node->setDoubleValue("egt-degf", eng->getExhaustGasTemp_degF());
+ node->setDoubleValue("oil-temperature-degf", eng->getOilTemp_degF());
+ node->setDoubleValue("oil-pressure-psi", eng->getOilPressure_psi());
+ node->setDoubleValue("mp-osi", eng->getManifoldPressure_inHg());
+ // NOTE: mp-osi is not in ounces per square inch.
+ // This error is left for reasons of backwards compatibility with
+ // existing FlightGear sound and instrument configurations.
+ node->setDoubleValue("mp-inhg", eng->getManifoldPressure_inHg());
+ node->setDoubleValue("cht-degf", eng->getCylinderHeadTemp_degF());
+ node->setDoubleValue("rpm", eng->getRPM());
+ } // end FGPiston code block
+ break;
+ case FGEngine::etRocket:
+ { // FGRocket code block
+ FGRocket* eng = (FGRocket*)Propulsion->GetEngine(i);
+ } // end FGRocket code block
+ break;
+ case FGEngine::etTurbine:
+ { // FGTurbine code block
+ FGTurbine* eng = (FGTurbine*)Propulsion->GetEngine(i);
+ node->setDoubleValue("n1", eng->GetN1());
+ node->setDoubleValue("n2", eng->GetN2());
+ node->setDoubleValue("egt_degf", 32 + eng->GetEGT()*9/5);
+ node->setBoolValue("augmentation", eng->GetAugmentation());
+ node->setBoolValue("water-injection", eng->GetInjection());
+ node->setBoolValue("ignition", eng->GetIgnition());
+ node->setDoubleValue("nozzle-pos-norm", eng->GetNozzle());
+ node->setDoubleValue("inlet-pos-norm", eng->GetInlet());
+ node->setDoubleValue("oil-pressure-psi", eng->getOilPressure_psi());
+ node->setBoolValue("reversed", eng->GetReversed());
+ node->setBoolValue("cutoff", eng->GetCutoff());
+ node->setDoubleValue("epr", eng->GetEPR());
+ globals->get_controls()->set_reverser(i, eng->GetReversed() );
+ globals->get_controls()->set_cutoff(i, eng->GetCutoff() );
+ globals->get_controls()->set_water_injection(i, eng->GetInjection() );
+ globals->get_controls()->set_augmentation(i, eng->GetAugmentation() );
+ } // end FGTurbine code block
+ break;
+ case FGEngine::etTurboprop:
+ { // FGTurboProp code block
+ FGTurboProp* eng = (FGTurboProp*)Propulsion->GetEngine(i);
+ node->setDoubleValue("n1", eng->GetN1());
+ //node->setDoubleValue("n2", eng->GetN2());
+ node->setDoubleValue("itt_degf", 32 + eng->GetITT()*9/5);
+ node->setBoolValue("ignition", eng->GetIgnition());
+ node->setDoubleValue("nozzle-pos-norm", eng->GetNozzle());
+ node->setDoubleValue("inlet-pos-norm", eng->GetInlet());
+ node->setDoubleValue("oil-pressure-psi", eng->getOilPressure_psi());
+ node->setBoolValue("reversed", eng->GetReversed());
+ node->setBoolValue("cutoff", eng->GetCutoff());
+ node->setBoolValue("starting", eng->GetEngStarting());
+ node->setBoolValue("generator-power", eng->GetGeneratorPower());
+ node->setBoolValue("damaged", eng->GetCondition());
+ node->setBoolValue("ielu-intervent", eng->GetIeluIntervent());
+ node->setDoubleValue("oil-temperature-degf", eng->getOilTemp_degF());
+// node->setBoolValue("onfire", eng->GetFire());
+ globals->get_controls()->set_reverser(i, eng->GetReversed() );
+ globals->get_controls()->set_cutoff(i, eng->GetCutoff() );
+ } // end FGTurboProp code block
+ break;
+ case FGEngine::etElectric:
+ { // FGElectric code block
+ FGElectric* eng = (FGElectric*)Propulsion->GetEngine(i);
+ node->setDoubleValue("rpm", eng->getRPM());
+ } // end FGElectric code block
+ break;
+ }