virtual bool Run(void);
virtual void SetOutput(void);
inline double GetOutput (void) {return Output;}
+ inline int GetOutputIdx(void) { return OutputIdx; }
inline string GetName(void) {return Name;}
+ inline string GetType(void) { return Type; }
+ virtual double GetOutputPct(void) { return 0; }
protected:
/// Pilot/Aircraft, FCS, Autopilot inputs
Gain = 1.000;
Rows = 0;
Min = Max = 0.0;
+ OutputPct=0;
+ invert=false;
ScheduledBy = FG_UNDEF;
Type = AC_cfg->GetValue("TYPE");
*AC_cfg >> Min;
} else if (token == "MAX") {
*AC_cfg >> Max;
+ } else if (token == "INVERT") {
+ invert=true;
} else if (token == "ROWS") {
*AC_cfg >> Rows;
Table = new FGTable(Rows);
SchedGain = Table->GetValue(LookupVal);
Output = Gain * SchedGain * Input;
} else if (Type == "AEROSURFACE_SCALE") {
- if (Output >= 0.0) Output = Input * Max;
- else Output = Input * (-Min);
+ if(!invert) {
+ OutputPct = Input;
+ if (Input >= 0.0) Output = Input * Max;
+ else Output = Input * -Min;
+ } else {
+ OutputPct=-1*Input;
+ if (Input <= 0.0) Output = Input * -Max;
+ else Output = Input * Min;
+ }
Output *= Gain;
}
if (IsOutput) cout << " OUTPUT: " << sOutputIdx << endl;
cout << " MIN: " << Min << endl;
cout << " MAX: " << Max << endl;
+ if(invert) cout << " Invert mapping" << endl;
if (ScheduledBy != FG_UNDEF) {
cout << " Scheduled by parameter: " << ScheduledBy << endl;
Table->Print();
Detents.clear();
TransitionTimes.clear();
+
+ OutputPct=0;
Type = AC_cfg->GetValue("TYPE");
Name = AC_cfg->GetValue("NAME");
lastInputCmd = InputCmd;
Output = OutputPos;
}
-
+
+ if( Detents[NumDetents-1] > 0 ) {
+ OutputPct = Output / Detents[NumDetents-1];
+ }
+
if (IsOutput) SetOutput();
return true;