]> git.mxchange.org Git - flightgear.git/commitdiff
YASim flap changes from Vivian Meazza
authortimoore <timoore>
Mon, 29 Sep 2008 08:00:20 +0000 (08:00 +0000)
committertimoore <timoore>
Mon, 29 Sep 2008 08:00:20 +0000 (08:00 +0000)
src/FDM/YASim/ControlMap.cpp
src/FDM/YASim/ControlMap.hpp
src/FDM/YASim/FGFDM.cpp
src/FDM/YASim/Surface.cpp
src/FDM/YASim/Surface.hpp
src/FDM/YASim/Wing.cpp
src/FDM/YASim/Wing.hpp

index 43fcb529d7189f78052c7cd92ef4b4b154a35721..def15410cb556d831a828d016739d1292c5b7096 100644 (file)
@@ -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]
     }
 }
index 70125bbd29ef8a8495b9f6fa83ce30e07c7e0e23..8c8e9639eadb3259e5bebabb57feebca069f369e 100644 (file)
@@ -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,
index 921fdcf6095ea61c67fb329cef8e6ab9f52fa2ae..0e4ee39186b2bbccc075843a37728b8e502ca0cb 100644 (file)
@@ -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;
index 19922c43872caf087b3622ef65871652d6fb3769..db977f58a943e217f2acbb7ea9d6ecf9354bf6d4 100644 (file)
@@ -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;
 
index 1b55e3c45813ead38c237e37e7f33634ca773459..934eb26de10ee12e0a44c2dbe5b7b4f59680d82d 100644 (file)
@@ -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;
 
index 12fb438f1482ba8919becf109575256576e17486..ad15410e17a7a7831e1280849a69253f4635552b 100644 (file)
@@ -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);
index 5052d7a26b4b1bf7ec393375af984ec3598c4f69..114960bff8d4b8bfbe4fafddfff89f0690811e68 100644 (file)
@@ -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();