]> git.mxchange.org Git - flightgear.git/blob - src/FDM/YASim/FGFDM.hpp
Initial checkin of a TurbineEngine implementation. This hasn't been
[flightgear.git] / src / FDM / YASim / FGFDM.hpp
1 #ifndef _FGFDM_HPP
2 #define _FGFDM_HPP
3
4 #include <simgear/xml/easyxml.hxx>
5 #include <simgear/props/props.hxx>
6
7 #include "Airplane.hpp"
8 #include "Vector.hpp"
9
10 namespace yasim {
11
12 class Wing;
13
14 // This class forms the "glue" to the FlightGear codebase.  It handles
15 // parsing of XML airplane files, interfacing to the properties
16 // system, and providing data for the use of the FGInterface object.
17 class FGFDM : public XMLVisitor {
18 public:
19     FGFDM();
20     ~FGFDM();
21     void init();
22     void iterate(float dt);
23     void getExternalInput(float dt=1e6);
24
25     Airplane* getAirplane();
26
27     // XML parsing callback from XMLVisitor
28     virtual void startElement(const char* name, const XMLAttributes &atts);
29
30 private:
31     struct AxisRec { char* name; int handle; };
32     struct EngRec { char* prefix; Thruster* eng; };
33     struct WeightRec { char* prop; float size; int handle; };
34     struct PropOut { SGPropertyNode* prop; int handle, type; bool left;
35                      float min, max; };
36
37     void setOutputProperties();
38
39     Rotor* parseRotor(XMLAttributes* a, const char* name);
40     Wing* parseWing(XMLAttributes* a, const char* name);
41     int parseAxis(const char* name);
42     int parseOutput(const char* name);
43     void parseWeight(XMLAttributes* a);
44     void parseTurbineEngine(XMLAttributes* a);
45     void parsePistonEngine(XMLAttributes* a);
46     void parsePropeller(XMLAttributes* a);
47     bool eq(const char* a, const char* b);
48     bool caseeq(const char* a, const char* b);
49     char* dup(const char* s);
50     int attri(XMLAttributes* atts, char* attr);
51     int attri(XMLAttributes* atts, char* attr, int def); 
52     float attrf(XMLAttributes* atts, char* attr);
53     float attrf(XMLAttributes* atts, char* attr, float def); 
54     bool attrb(XMLAttributes* atts, char* attr);
55
56     // The core Airplane object we manage.
57     Airplane _airplane;
58
59     // Aerodynamic turbulence model
60     Turbulence* _turb;
61
62     // The list of "axes" that we expect to find as input.  These are
63     // typically property names.
64     Vector _axes;
65
66     // Settable weights
67     Vector _weights;
68
69     // Engine types.  Contains an EngRec structure.
70     Vector _thrusters;
71
72     // Output properties for the ControlMap
73     Vector _controlProps;
74
75     // Parsing temporaries
76     void* _currObj;
77     bool _cruiseCurr;
78     int _nextEngine;
79 };
80
81 }; // namespace yasim
82 #endif // _FGFDM_HPP