From: timoore Date: Mon, 29 Sep 2008 08:00:20 +0000 (+0000) Subject: YASim flap changes from Vivian Meazza X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=62bca8368e0d8841d3cb2e56e852f55929782166;p=flightgear.git YASim flap changes from Vivian Meazza --- diff --git a/src/FDM/YASim/ControlMap.cpp b/src/FDM/YASim/ControlMap.cpp index 43fcb529d..def15410c 100644 --- a/src/FDM/YASim/ControlMap.cpp +++ b/src/FDM/YASim/ControlMap.cpp @@ -206,7 +206,9 @@ void ControlMap::applyControls(float dt) case CASTERING:((Gear*)obj)->setCastering(lval != 0); break; case SLAT: ((Wing*)obj)->setSlat(lval); break; case FLAP0: ((Wing*)obj)->setFlap0(lval, rval); break; + case FLAP0EFFECTIVENESS: ((Wing*)obj)->setFlap0Effectiveness(lval); break; case FLAP1: ((Wing*)obj)->setFlap1(lval, rval); break; + case FLAP1EFFECTIVENESS: ((Wing*)obj)->setFlap1Effectiveness(lval); break; case SPOILER: ((Wing*)obj)->setSpoiler(lval, rval); break; case COLLECTIVE: ((Rotor*)obj)->setCollective(lval); break; case CYCLICAIL: ((Rotor*)obj)->setCyclicail(lval,rval); break; @@ -250,6 +252,8 @@ float ControlMap::rangeMin(int type) case COLLECTIVE: return -1; case WINCHRELSPEED: return -1; case MAGNETOS: return 0; // [0:3] + case FLAP0EFFECTIVENESS: return 1; // [0:10] + case FLAP1EFFECTIVENESS: return 1; // [0:10] default: return 0; // [0:1] } } @@ -262,6 +266,8 @@ float ControlMap::rangeMax(int type) case FLAP1: return 1; case STEER: return 1; case MAGNETOS: return 3; // [0:3] + case FLAP0EFFECTIVENESS: return 10;// [0:10] + case FLAP1EFFECTIVENESS: return 10;// [0:10] default: return 1; // [0:1] } } diff --git a/src/FDM/YASim/ControlMap.hpp b/src/FDM/YASim/ControlMap.hpp index 70125bbd2..8c8e9639e 100644 --- a/src/FDM/YASim/ControlMap.hpp +++ b/src/FDM/YASim/ControlMap.hpp @@ -13,12 +13,14 @@ public: ADVANCE, REHEAT, PROP, BRAKE, STEER, EXTEND, HEXTEND, LEXTEND, INCIDENCE, FLAP0, FLAP1, SLAT, SPOILER, VECTOR, + FLAP0EFFECTIVENESS, FLAP1EFFECTIVENESS, BOOST, CASTERING, PROPPITCH, PROPFEATHER, COLLECTIVE, CYCLICAIL, CYCLICELE, ROTORENGINEON, TILTYAW, TILTPITCH, TILTROLL, ROTORBRAKE, ROTORENGINEMAXRELTORQUE, ROTORRELTARGET, ROTORBALANCE, REVERSE_THRUST, WASTEGATE, - WINCHRELSPEED, HITCHOPEN, PLACEWINCH, FINDAITOW}; + WINCHRELSPEED, HITCHOPEN, PLACEWINCH, FINDAITOW + }; enum { OPT_SPLIT = 0x01, OPT_INVERT = 0x02, diff --git a/src/FDM/YASim/FGFDM.cpp b/src/FDM/YASim/FGFDM.cpp index 921fdcf60..0e4ee3918 100644 --- a/src/FDM/YASim/FGFDM.cpp +++ b/src/FDM/YASim/FGFDM.cpp @@ -948,7 +948,9 @@ int FGFDM::parseOutput(const char* name) if(eq(name, "LEXTEND")) return ControlMap::LEXTEND; if(eq(name, "INCIDENCE")) return ControlMap::INCIDENCE; if(eq(name, "FLAP0")) return ControlMap::FLAP0; + if(eq(name, "FLAP0EFFECTIVENESS")) return ControlMap::FLAP0EFFECTIVENESS; if(eq(name, "FLAP1")) return ControlMap::FLAP1; + if(eq(name, "FLAP1EFFECTIVENESS")) return ControlMap::FLAP1EFFECTIVENESS; if(eq(name, "SLAT")) return ControlMap::SLAT; if(eq(name, "SPOILER")) return ControlMap::SPOILER; if(eq(name, "CASTERING")) return ControlMap::CASTERING; diff --git a/src/FDM/YASim/Surface.cpp b/src/FDM/YASim/Surface.cpp index 19922c438..db977f58a 100644 --- a/src/FDM/YASim/Surface.cpp +++ b/src/FDM/YASim/Surface.cpp @@ -25,6 +25,7 @@ Surface::Surface() _slatDrag = _spoilerDrag = _flapDrag = 1; _flapLift = 0; + _flapEffectiveness = 1; _slatAlpha = 0; _spoilerLift = 1; _inducedDrag = 1; @@ -132,6 +133,17 @@ void Surface::setFlap(float pos) _flapPos = pos; } +void Surface::setFlapEffectiveness(float effectiveness) +{ + _flapEffectiveness = effectiveness; +} + +double Surface::getFlapEffectiveness() +{ + return _flapEffectiveness; +} + + void Surface::setSlat(float pos) { _slatPos = pos; @@ -294,7 +306,8 @@ float Surface::stallFunc(float* v) // stall alpha float Surface::flapLift(float alpha) { - float flapLift = _cz * _flapPos * (_flapLift-1); + float flapLift = _cz * _flapPos * (_flapLift-1) * _flapEffectiveness; + if(_stalls[0] == 0) return 0; diff --git a/src/FDM/YASim/Surface.hpp b/src/FDM/YASim/Surface.hpp index 1b55e3c45..934eb26de 100644 --- a/src/FDM/YASim/Surface.hpp +++ b/src/FDM/YASim/Surface.hpp @@ -34,6 +34,10 @@ public: void setSlat(float pos); void setSpoiler(float pos); + // Modifier for flap lift coefficient, useful for simulating flap blowing etc. + void setFlapEffectiveness(float effectiveness); + double getFlapEffectiveness(); + // local -> Surface coords void setOrientation(float* o); @@ -88,6 +92,7 @@ private: float _slatDrag; float _flapLift; float _flapDrag; + float _flapEffectiveness; float _spoilerLift; float _spoilerDrag; diff --git a/src/FDM/YASim/Wing.cpp b/src/FDM/YASim/Wing.cpp index 12fb438f1..ad15410e1 100644 --- a/src/FDM/YASim/Wing.cpp +++ b/src/FDM/YASim/Wing.cpp @@ -1,6 +1,7 @@ #include "Math.hpp" #include "Surface.hpp" #include "Wing.hpp" + namespace yasim { Wing::Wing() @@ -176,6 +177,16 @@ void Wing::setFlap0(float lval, float rval) } } +void Wing::setFlap0Effectiveness(float lval) +{ + lval = Math::clamp(lval, 1, 10); + int i; + for(i=0; i<_flap0Surfs.size(); i++) { + ((Surface*)_flap0Surfs.get(i))->setFlapEffectiveness(lval); +// if(_mirror) ((Surface*)_flap0Surfs.get(++i))->setFlapEffectiveness(rval); + } +} + void Wing::setFlap1(float lval, float rval) { lval = Math::clamp(lval, -1, 1); @@ -187,6 +198,16 @@ void Wing::setFlap1(float lval, float rval) } } +void Wing::setFlap1Effectiveness(float lval) +{ + lval = Math::clamp(lval, 1, 10); + int i; + for(i=0; i<_flap1Surfs.size(); i++) { + ((Surface*)_flap1Surfs.get(i))->setFlapEffectiveness(lval); +// if(_mirror) ((Surface*)_flap1Surfs.get(++i))->setFlap(rval); + } +} + void Wing::setSpoiler(float lval, float rval) { lval = Math::clamp(lval, 0, 1); diff --git a/src/FDM/YASim/Wing.hpp b/src/FDM/YASim/Wing.hpp index 5052d7a26..114960bff 100644 --- a/src/FDM/YASim/Wing.hpp +++ b/src/FDM/YASim/Wing.hpp @@ -42,6 +42,8 @@ public: void setFlap1(float lval, float rval); void setSpoiler(float lval, float rval); void setSlat(float val); + void setFlap0Effectiveness(float lval); + void setFlap1Effectiveness(float lval); // Compile the thing into a bunch of Surface objects void compile();