]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/YASim/FGFDM.cpp
Use bool where the source and destination variable is bool.
[flightgear.git] / src / FDM / YASim / FGFDM.cpp
index 3bf8c80792673a3803dcf3b8c2655e8d6e87d78e..426a35ed43a92d1e26e4547a144366be4a3bb31b 100644 (file)
@@ -83,6 +83,7 @@ FGFDM::~FGFDM()
     }
     for(i=0; i<_controlProps.size(); i++)
         delete (PropOut*)_controlProps.get(i);
+    delete _turb;
 }
 
 void FGFDM::iterate(float dt)
@@ -287,8 +288,9 @@ void FGFDM::startElement(const char* name, const XMLAttributes &atts)
        l->setHoldbackMount(v);
         float length = attrf(a, "length", 1.0);
         l->setLength(length);
-        l->setDownAngle(attrf(a, "down-angle", 30) * DEG2RAD);
-        l->setUpAngle(attrf(a, "up-angle", -30) * DEG2RAD);
+        l->setDownAngle(attrf(a, "down-angle", 45) * DEG2RAD);
+        l->setUpAngle(attrf(a, "up-angle", -45) * DEG2RAD);
+        l->setHoldbackLength(attrf(a, "holdback-length", 2.0));
        _airplane.addLaunchbar(l);
     } else if(eq(name, "fuselage")) {
        float b[3];
@@ -583,8 +585,12 @@ Wing* FGFDM::parseWing(XMLAttributes* a, const char* type)
     w->setTaper(attrf(a, "taper", 1));
     w->setDihedral(attrf(a, "dihedral", defDihed) * DEG2RAD);
     w->setCamber(attrf(a, "camber", 0));
-    w->setIncidence(attrf(a, "incidence", 0) * DEG2RAD);
-    w->setTwist(attrf(a, "twist", 0) * DEG2RAD);
+
+    // These come in with positive indicating positive AoA, but the
+    // internals expect a rotation about the left-pointing Y axis, so
+    // invert the sign.
+    w->setIncidence(attrf(a, "incidence", 0) * DEG2RAD * -1);
+    w->setTwist(attrf(a, "twist", 0) * DEG2RAD * -1);
 
     // The 70% is a magic number that sorta kinda seems to match known
     // throttle settings to approach speed.
@@ -695,8 +701,12 @@ void FGFDM::parsePistonEngine(XMLAttributes* a)
         float mul = attrf(a, "turbo-mul");
         float mp = attrf(a, "wastegate-mp", 1e6) * INHG2PA;
         eng->setTurboParams(mul, mp);
+        eng->setTurboLag(attrf(a, "turbo-lag", 2));
     }
 
+    if(a->hasAttribute("supercharger"))
+        eng->setSupercharger(attrb(a, "supercharger"));
+
     ((PropEngine*)_currObj)->setEngine(eng);
 }
 
@@ -758,6 +768,11 @@ void FGFDM::parsePropeller(XMLAttributes* a)
     PropEngine* thruster = new PropEngine(prop, eng, moment);
     _airplane.addThruster(thruster, mass, cg);
 
+    // Set the stops (fine = minimum pitch, coarse = maximum pitch)
+    float fine_stop = attrf(a, "fine-stop", 0.25f);
+    float coarse_stop = attrf(a, "coarse-stop", 4.0f);
+    prop->setStops(fine_stop, coarse_stop);
+
     if(a->hasAttribute("takeoff-power")) {
        float power0 = attrf(a, "takeoff-power") * HP2W;
        float omega0 = attrf(a, "takeoff-rpm") * RPM2RAD;
@@ -840,6 +855,7 @@ int FGFDM::parseOutput(const char* name)
     if(eq(name, "CYCLICELE")) return ControlMap::CYCLICELE;
     if(eq(name, "ROTORENGINEON")) return ControlMap::ROTORENGINEON;
     if(eq(name, "REVERSE_THRUST")) return ControlMap::REVERSE_THRUST;
+    if(eq(name, "WASTEGATE")) return ControlMap::WASTEGATE;
     SG_LOG(SG_FLIGHT,SG_ALERT,"Unrecognized control type '"
            << name << "' in YASim aircraft description.");
     exit(1);