]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/JSBSim/FGEngine.cpp
Check return value of FDM::init().
[flightgear.git] / src / FDM / JSBSim / FGEngine.cpp
index 7e4de5684055db8235096f1f3d673d3d28b626b1..5e673eabf22cdfbac597c6c62d6fc0643db45159 100644 (file)
@@ -1,39 +1,39 @@
 /*******************************************************************************
-
  Module:       FGEngine.cpp
  Author:       Jon Berndt
  Date started: 01/21/99
  Called by:    FGAircraft
-
  ------------- Copyright (C) 1999  Jon S. Berndt (jsb@hal-pc.org) -------------
-
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
  Foundation; either version 2 of the License, or (at your option) any later
  version.
-
  This program is distributed in the hope that it will be useful, but WITHOUT
  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
  details.
-
  You should have received a copy of the GNU General Public License along with
  this program; if not, write to the Free Software Foundation, Inc., 59 Temple
  Place - Suite 330, Boston, MA  02111-1307, USA.
-
  Further information about the GNU General Public License can also be found on
  the world wide web at http://www.gnu.org.
-
 FUNCTIONAL DESCRIPTION
 --------------------------------------------------------------------------------
 See header file.
-
 HISTORY
 --------------------------------------------------------------------------------
 01/21/99   JSB   Created
 09/03/99   JSB   Changed Rocket thrust equation to correct -= Thrust instead of
                  += Thrust (thanks to Tony Peden)
-
 ********************************************************************************
 INCLUDES
 *******************************************************************************/
@@ -62,13 +62,15 @@ INCLUDES
 #include "FGOutput.h"
 #include "FGDefs.h"
 
+static const char *IdSrc = "$Header$";
+static const char *IdHdr = "ID_ENGINE";
+
 /*******************************************************************************
 ************************************ CODE **************************************
 *******************************************************************************/
 
 
-FGEngine::FGEngine(FGFDMExec* fdex, string enginePath, string engineName, int num)
-{
+FGEngine::FGEngine(FGFDMExec* fdex, string enginePath, string engineName, int num) {
   string fullpath;
   string tag;
 
@@ -85,7 +87,14 @@ FGEngine::FGEngine(FGFDMExec* fdex, string enginePath, string engineName, int nu
   Output      = FDMExec->GetOutput();
 
   Name = engineName;
-  fullpath = enginePath + "/" + engineName + ".dat";
+
+# ifndef macintosh  
+    fullpath = enginePath + "/" + engineName + ".xml";
+# else
+    fullpath = enginePath + ";" + engineName + ".xml";
+# endif
+      
+  cout << "    Reading engine: " << engineName << " from file: " << fullpath << endl;
   ifstream enginefile(fullpath.c_str());
 
   if (enginefile) {
@@ -97,8 +106,11 @@ FGEngine::FGEngine(FGFDMExec* fdex, string enginePath, string engineName, int nu
     else if (tag == "TURBOJET")  Type = etTurboJet;
     else                         Type = etUnknown;
 
-    switch(Type)
-    {
+    switch(Type) {
+    case etTurboProp:
+    case etTurboJet: 
+      cerr << "Unsupported Engine type" << tag << endl;
+      break;
     case etUnknown:
       cerr << "Unknown engine type: " << tag << endl;
       break;
@@ -106,6 +118,8 @@ FGEngine::FGEngine(FGFDMExec* fdex, string enginePath, string engineName, int nu
       enginefile >> X;
       enginefile >> Y;
       enginefile >> Z;
+      enginefile >> EnginePitch;
+      enginefile >> EngineYaw;
       enginefile >> BrakeHorsePower;
       enginefile >> MaxThrottle;
       enginefile >> MinThrottle;
@@ -119,6 +133,8 @@ FGEngine::FGEngine(FGFDMExec* fdex, string enginePath, string engineName, int nu
       enginefile >> X;
       enginefile >> Y;
       enginefile >> Z;
+      enginefile >> EnginePitch;
+      enginefile >> EngineYaw;
       enginefile >> SLThrustMax;
       enginefile >> VacThrustMax;
       enginefile >> MaxThrottle;
@@ -130,22 +146,20 @@ FGEngine::FGEngine(FGFDMExec* fdex, string enginePath, string engineName, int nu
 
     enginefile.close();
   } else {
-    cerr << "Unable to open engine definition file " << fullpath << endl;
+    cerr << "Unable to open engine definition file " << fullpath.c_str() << endl;
   }
 
   EngineNumber = num;
-  Thrust = 0.0;
+  Thrust = PctPower = 0.0;
   Starved = Flameout = false;
+  Running = true;
 }
 
 
-FGEngine::~FGEngine(void)
-{
-}
+FGEngine::~FGEngine(void) {}
 
 
-float FGEngine::CalcRocketThrust(void)
-{
+float FGEngine::CalcRocketThrust(void) {
   float lastThrust;
 
   Throttle = FCS->GetThrottlePos(EngineNumber);
@@ -161,44 +175,52 @@ float FGEngine::CalcRocketThrust(void)
     Flameout = false;
   }
 
-  Thrust -= 0.8*(Thrust - lastThrust); // actual thrust
+
+  if(State->Getdt() > 0.0) {
+    Thrust -= 0.8*(Thrust - lastThrust); // actual thrust
+  }
 
   return Thrust;
 }
 
 
-float FGEngine::CalcPistonThrust(void)
-{
+float FGEngine::CalcPistonThrust(void) {
   float v,h,pa;
 
   Throttle = FCS->GetThrottlePos(EngineNumber);
   Throttle /= 100;
-  v=State->GetVt();
-  h=State->Geth();
-  if(v < 10)
-    v=10;
-  if(h < 0)
-    h=0;
+
+  v = Translation->GetVt();
+  h = Position->Geth();
+
+  if (v < 10)
+    v = 10;
+  if (h < 0)
+    h = 0;
+
   pa=(SpeedSlope*v + SpeedIntercept)*(1 +AltitudeSlope*h)*BrakeHorsePower;
-  Thrust= Throttle*(pa*HPTOFTLBSSEC)/v;
+
+  Thrust = Throttle*(pa*HPTOFTLBSSEC)/v;
 
   return Thrust;
 }
 
 
-float FGEngine::CalcThrust(void)
-{
-  switch(Type) {
-  case etRocket:
-    return CalcRocketThrust();
-    // break;
-  case etPiston:
-    return CalcPistonThrust();
-    // break;
-  default:
-    return 9999.0;
-    // break;
+float FGEngine::CalcThrust(void) {
+  if(Running) {
+    switch(Type) {
+    case etRocket:
+      return CalcRocketThrust();
+      // break;
+    case etPiston:
+      return CalcPistonThrust();
+      // break;
+    default:
+      return 9999.0;
+      // break;
+    }
+  } else {
+    return 0;
   }
 }