From 5a9c5d80c89f738ba1f94de765905b35f0d61409 Mon Sep 17 00:00:00 2001 From: andy Date: Fri, 30 Jan 2004 23:21:26 +0000 Subject: [PATCH] Thrust reversers. Very simple implementation. --- src/FDM/YASim/ControlMap.cpp | 7 ++++--- src/FDM/YASim/ControlMap.hpp | 3 ++- src/FDM/YASim/FGFDM.cpp | 2 ++ src/FDM/YASim/Jet.cpp | 4 ++++ src/FDM/YASim/Jet.hpp | 8 ++++++++ 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/FDM/YASim/ControlMap.cpp b/src/FDM/YASim/ControlMap.cpp index fd4f99b7c..9854cac28 100644 --- a/src/FDM/YASim/ControlMap.cpp +++ b/src/FDM/YASim/ControlMap.cpp @@ -200,10 +200,11 @@ void ControlMap::applyControls(float dt) case FLAP0: ((Wing*)obj)->setFlap0(lval, rval); break; case FLAP1: ((Wing*)obj)->setFlap1(lval, rval); break; case SPOILER: ((Wing*)obj)->setSpoiler(lval, rval); break; - case COLLECTIVE: ((Rotor*)obj)->setCollective(lval); break; - case CYCLICAIL: ((Rotor*)obj)->setCyclicail(lval,rval); break; - case CYCLICELE: ((Rotor*)obj)->setCyclicele(lval,rval); break; + case COLLECTIVE: ((Rotor*)obj)->setCollective(lval); break; + case CYCLICAIL: ((Rotor*)obj)->setCyclicail(lval,rval); break; + case CYCLICELE: ((Rotor*)obj)->setCyclicele(lval,rval); break; case ROTORENGINEON: ((Rotor*)obj)->setEngineOn((int)lval); break; + case REVERSE_THRUST: ((Jet*)obj)->setReverse(lval != 0); break; case BOOST: ((Thruster*)obj)->getPistonEngine()->setBoost(lval); break; diff --git a/src/FDM/YASim/ControlMap.hpp b/src/FDM/YASim/ControlMap.hpp index c3dbda2ee..07d15f301 100644 --- a/src/FDM/YASim/ControlMap.hpp +++ b/src/FDM/YASim/ControlMap.hpp @@ -14,7 +14,8 @@ public: BRAKE, STEER, EXTEND, INCIDENCE, FLAP0, FLAP1, SLAT, SPOILER, VECTOR, BOOST, CASTERING, PROPPITCH, - COLLECTIVE, CYCLICAIL, CYCLICELE, ROTORENGINEON}; + COLLECTIVE, CYCLICAIL, CYCLICELE, ROTORENGINEON, + REVERSE_THRUST }; enum { OPT_SPLIT = 0x01, OPT_INVERT = 0x02, diff --git a/src/FDM/YASim/FGFDM.cpp b/src/FDM/YASim/FGFDM.cpp index ed0bd1504..7f3077fce 100644 --- a/src/FDM/YASim/FGFDM.cpp +++ b/src/FDM/YASim/FGFDM.cpp @@ -159,6 +159,7 @@ void FGFDM::startElement(const char* name, const XMLAttributes &atts) j->setMaxThrust(attrf(a, "thrust") * LBS2N, attrf(a, "afterburner", 0) * LBS2N); j->setVectorAngle(attrf(a, "rotate", 0) * DEG2RAD); + j->setReverseThrust(attrf(a, "reverse", 0.2)); float n1min = attrf(a, "n1-idle", 55); float n1max = attrf(a, "n1-max", 102); @@ -680,6 +681,7 @@ int FGFDM::parseOutput(const char* name) if(eq(name, "CYCLICAIL")) return ControlMap::CYCLICAIL; if(eq(name, "CYCLICELE")) return ControlMap::CYCLICELE; if(eq(name, "ROTORENGINEON")) return ControlMap::ROTORENGINEON; + if(eq(name, "REVERSE_THRUST")) return ControlMap::REVERSE_THRUST; SG_LOG(SG_FLIGHT,SG_ALERT,"Unrecognized control type '" << name << "' in YASim aircraft description."); exit(1); diff --git a/src/FDM/YASim/Jet.cpp b/src/FDM/YASim/Jet.cpp index edd364bee..afbb669cd 100644 --- a/src/FDM/YASim/Jet.cpp +++ b/src/FDM/YASim/Jet.cpp @@ -10,6 +10,7 @@ Jet::Jet() _reheat = 0; _rotControl = 0; _maxRot = 0; + _reverseThrust = false; // Initialize parameters for an early-ish subsonic turbojet. More // recent turbofans will typically have a lower vMax, epr0, and @@ -193,6 +194,9 @@ void Jet::integrate(float dt) // 3.5 times as much // fuel per thrust unit _egt = T0 + beta*ibeta0 * (_egt0 - T0); + + // Thrust reverse handling: + if(_reverseThrust) _thrust *= -_reverseEff; } bool Jet::isRunning() diff --git a/src/FDM/YASim/Jet.hpp b/src/FDM/YASim/Jet.hpp index b5d5f92f5..2376aa950 100644 --- a/src/FDM/YASim/Jet.hpp +++ b/src/FDM/YASim/Jet.hpp @@ -28,6 +28,12 @@ public: // Sets the thrust vector control (0-1) void setRotation(float rot); + // Thrust reverser control. + void setReverse(bool reverse) { _reverseThrust = reverse; } + + // Thrust reverser effectiveness. + void setReverseThrust(float eff) { _reverseEff = eff; } + float getN1(); float getN2(); float getEPR(); @@ -45,6 +51,7 @@ public: private: float _reheat; + bool _reverseThrust; float _maxThrust; // Max dry thrust at sea level float _abFactor; // Afterburner thrust multiplier @@ -61,6 +68,7 @@ private: float _n1Max; // N1 at takeoff thrust float _n2Min; // N2 at ground idle float _n2Max; // N2 at takeoff thrust + float _reverseEff; // Thrust reverser effectiveness (fraction) bool _running; // Is the engine running? bool _cranking; // Is the engine cranking? -- 2.39.5