1
0
Fork 0
flightgear/src/FDM/YASim/ControlMap.hpp

86 lines
2.8 KiB
C++
Raw Normal View History

#ifndef _CONTROL_MAP_HPP
#define _CONTROL_MAP_HPP
2001-12-06 18:16:22 +00:00
#include "Vector.hpp"
namespace yasim {
class ControlMap {
public:
~ControlMap();
enum OutputType { THROTTLE, MIXTURE, CONDLEVER, STARTER, MAGNETOS,
ADVANCE, REHEAT, PROP,
BRAKE, STEER, EXTEND,
2001-12-24 13:54:03 +00:00
INCIDENCE, FLAP0, FLAP1, SLAT, SPOILER, VECTOR,
BOOST, CASTERING, PROPPITCH, PROPFEATHER,
COLLECTIVE, CYCLICAIL, CYCLICELE, ROTORENGINEON,
REVERSE_THRUST };
2001-12-07 20:00:59 +00:00
enum { OPT_SPLIT = 0x01,
OPT_INVERT = 0x02,
OPT_SQUARE = 0x04 };
// Returns a new, not-yet-used "input handle" for addMapping and
// setInput. This typically corresponds to one user axis.
int newInput();
// Adds a mapping to between input handle and a particular setting
// on an output object. The value of output MUST match the type
// of object!
void addMapping(int input, int output, void* object, int options=0);
2001-12-24 13:54:03 +00:00
// An additional form to specify a mapping range. Input values
// outside of [src0:src1] are clamped, and are then mapped to
// [dst0:dst1] before being set on the object.
void addMapping(int input, int output, void* object, int options,
float src0, float src1, float dst0, float dst1);
// Resets our accumulated input values. Call before any
// setInput() invokations.
void reset();
// Sets the specified input (as returned by newInput) to the
// specified value.
void setInput(int input, float value);
// Calculates and applies the settings received since the last reset().
void applyControls(float dt);
// Returns the input/output range appropriate for the given
// control. Ailerons go from -1 to 1, while throttles are never
// lower than zero, etc...
static float rangeMin(int type);
static float rangeMax(int type);
// Each output record is identified by both an object/type tuple
// and a numeric handle.
int getOutputHandle(void* obj, int type);
// Sets the transition time for the control output to swing
// through its full range.
void setTransitionTime(int handle, float time);
// Retrieves the current value of the control output. Controls
// with OPT_SPLIT settable on inputs will have a separately
// computed "right side" value.
float getOutput(int handle);
float getOutputR(int handle);
private:
struct OutRec { int type; void* object; Vector maps;
float oldL, oldR, time; };
2001-12-24 13:54:03 +00:00
struct MapRec { OutRec* out; int idx; int opt; float val;
float src0; float src1; float dst0; float dst1; };
// A list of (sub)Vectors containing a bunch of MapRec objects for
// each input handle.
Vector _inputs;
// An unordered list of output settings.
Vector _outputs;
};
}; // namespace yasim
#endif // _CONTROL_MAP_HPP