}
_airplane.calcFuelWeights();
- setOutputProperties();
+ setOutputProperties(dt);
}
Airplane* FGFDM::getAirplane()
g->setSpring(attrf(a, "spring", 1));
g->setDamping(attrf(a, "damp", 1));
_airplane.addGear(g);
+ } else if(eq(name, "hook")) {
+ } else if(eq(name, "launchbar")) {
} else if(eq(name, "fuselage")) {
float b[3];
v[0] = attrf(a, "ax");
}
}
-void FGFDM::setOutputProperties()
+// Linearly "seeks" a property by the specified fraction of the way to
+// the target value. Used to emulate "slowly changing" output values.
+static void moveprop(SGPropertyNode* node, const char* prop,
+ float target, float frac)
+{
+ float val = node->getFloatValue(prop);
+ if(frac > 1) frac = 1;
+ if(frac < 0) frac = 0;
+ val += (target - val) * frac;
+ node->setFloatValue(prop, val);
+}
+
+void FGFDM::setOutputProperties(float dt)
{
// char buf[256];
int i;
node->setFloatValue("epr", j->getEPR());
node->setFloatValue("egr-degf",
j->getEGT() * K2DEGF + K2DEGFOFFSET);
+
+ // These are "unmodeled" values that are still needed for
+ // many cockpits. Tie them all to the N1 speed, but
+ // normalize the numbers to the range [0:1] so the
+ // cockpit code can scale them to the right values.
+ float pnorm = j->getPerfNorm();
+ moveprop(node, "oilp-norm", pnorm, dt/3); // 3s seek time
+ moveprop(node, "oilt-norm", pnorm, dt/30); // 30s
+ moveprop(node, "itt-norm", pnorm, dt/1); // 1s
}
}
}
float flatRating = attrf(a, "flat-rating") * HP2W;
TurbineEngine* eng = new TurbineEngine(power, omega, alt, flatRating);
- if(a->hasAttribute("min-n2"))
- eng->setN2Range(attrf(a, "min-n2"), attrf(a, "max-n2"));
+ if(a->hasAttribute("n2-low-idle"))
+ eng->setN2Range(attrf(a, "n2-low-idle"), attrf(a, "n2-high-idle"),
+ attrf(a, "n2-max"));
// Nasty units conversion: lbs/hr per hp -> kg/s per watt
if(a->hasAttribute("bsfc"))
thruster->setVariableProp(min, max);
}
+ if(attrb(a, "contra"))
+ thruster->setContraPair(true);
+
if(a->hasAttribute("manual-pitch")) {
prop->setManualPitch();
}
if(eq(name, "BRAKE")) return ControlMap::BRAKE;
if(eq(name, "STEER")) return ControlMap::STEER;
if(eq(name, "EXTEND")) return ControlMap::EXTEND;
+ if(eq(name, "HEXTEND")) return ControlMap::HEXTEND;
+ if(eq(name, "LEXTEND")) return ControlMap::LEXTEND;
if(eq(name, "INCIDENCE")) return ControlMap::INCIDENCE;
if(eq(name, "FLAP0")) return ControlMap::FLAP0;
if(eq(name, "FLAP1")) return ControlMap::FLAP1;