4 #include <simgear/xml/easyxml.hxx>
5 #include <simgear/props/props.hxx>
7 #include "Airplane.hpp"
15 // This class forms the "glue" to the FlightGear codebase. It handles
16 // parsing of XML airplane files, interfacing to the properties
17 // system, and providing data for the use of the FGInterface object.
18 class FGFDM : public XMLVisitor {
23 void iterate(float dt);
24 void getExternalInput(float dt=1e6);
26 Airplane* getAirplane();
28 // XML parsing callback from XMLVisitor
29 virtual void startElement(const char* name, const XMLAttributes &atts);
31 float getVehicleRadius(void) const { return _vehicle_radius; }
34 struct AxisRec { char* name; int handle; };
35 struct EngRec { char* prefix; Thruster* eng; };
36 struct WeightRec { char* prop; float size; int handle; };
37 struct PropOut { SGPropertyNode* prop; int handle, type; bool left;
40 void setOutputProperties(float dt);
42 Rotor* parseRotor(XMLAttributes* a, const char* name);
43 Wing* parseWing(XMLAttributes* a, const char* name, Version * version);
44 int parseAxis(const char* name);
45 int parseOutput(const char* name);
46 void parseWeight(XMLAttributes* a);
47 void parseTurbineEngine(XMLAttributes* a);
48 void parsePistonEngine(XMLAttributes* a);
49 void parsePropeller(XMLAttributes* a);
50 bool eq(const char* a, const char* b);
51 bool caseeq(const char* a, const char* b);
52 char* dup(const char* s);
53 int attri(XMLAttributes* atts, const char* attr);
54 int attri(XMLAttributes* atts, const char* attr, int def);
55 float attrf(XMLAttributes* atts, const char* attr);
56 float attrf(XMLAttributes* atts, const char* attr, float def);
57 double attrd(XMLAttributes* atts, const char* attr);
58 double attrd(XMLAttributes* atts, const char* attr, double def);
59 bool attrb(XMLAttributes* atts, const char* attr);
61 // The core Airplane object we manage.
64 // Aerodynamic turbulence model
67 // The list of "axes" that we expect to find as input. These are
68 // typically property names.
74 // Engine types. Contains an EngRec structure.
77 // Output properties for the ControlMap
80 // Radius of the vehicle, for intersection testing.
81 float _vehicle_radius;
83 // Parsing temporaries
91 SGPropertyNode_ptr _out_of_fuel;
92 SGPropertyNode_ptr _fuel_consumed_lbs;
98 SGPropertyNode_ptr _running, _cranking;
99 SGPropertyNode_ptr _prop_thrust, _thrust_lbs, _fuel_flow_gph;
100 SGPropertyNode_ptr _rpm, _torque_ftlb, _mp_osi, _mp_inhg;
101 SGPropertyNode_ptr _oil_temperature_degf, _boost_gauge_inhg;
102 SGPropertyNode_ptr _n1, _n2, _epr, _egt_degf;
105 SGPropertyNode_ptr _turb_magnitude_norm, _turb_rate_hz;
106 SGPropertyNode_ptr _gross_weight_lbs;
107 std::vector<SGPropertyNode_ptr> _tank_level_lbs;
108 std::vector<ThrusterProps> _thrust_props;
109 std::vector<FuelProps> _fuel_props;
112 }; // namespace yasim