2001-12-01 06:22:24 +00:00
|
|
|
#ifndef _FGFDM_HPP
|
|
|
|
#define _FGFDM_HPP
|
|
|
|
|
2001-12-16 22:00:35 +00:00
|
|
|
#include <simgear/xml/easyxml.hxx>
|
2003-05-06 23:46:24 +00:00
|
|
|
#include <simgear/props/props.hxx>
|
2001-12-01 06:22:24 +00:00
|
|
|
|
|
|
|
#include "Airplane.hpp"
|
2001-12-06 18:16:22 +00:00
|
|
|
#include "Vector.hpp"
|
2001-12-01 06:22:24 +00:00
|
|
|
|
|
|
|
namespace yasim {
|
|
|
|
|
|
|
|
class Wing;
|
|
|
|
|
|
|
|
// This class forms the "glue" to the FlightGear codebase. It handles
|
|
|
|
// parsing of XML airplane files, interfacing to the properties
|
|
|
|
// system, and providing data for the use of the FGInterface object.
|
|
|
|
class FGFDM : public XMLVisitor {
|
|
|
|
public:
|
|
|
|
FGFDM();
|
|
|
|
~FGFDM();
|
|
|
|
void init();
|
|
|
|
void iterate(float dt);
|
2001-12-24 13:54:03 +00:00
|
|
|
void getExternalInput(float dt=1e6);
|
2001-12-01 06:22:24 +00:00
|
|
|
|
|
|
|
Airplane* getAirplane();
|
|
|
|
|
|
|
|
// XML parsing callback from XMLVisitor
|
|
|
|
virtual void startElement(const char* name, const XMLAttributes &atts);
|
|
|
|
|
|
|
|
private:
|
|
|
|
struct AxisRec { char* name; int handle; };
|
2001-12-24 13:54:03 +00:00
|
|
|
struct EngRec { char* prefix; Thruster* eng; };
|
2001-12-01 06:22:24 +00:00
|
|
|
struct WeightRec { char* prop; float size; int handle; };
|
2002-03-01 06:47:28 +00:00
|
|
|
struct PropOut { SGPropertyNode* prop; int handle, type; bool left;
|
|
|
|
float min, max; };
|
2001-12-01 06:22:24 +00:00
|
|
|
|
|
|
|
void setOutputProperties();
|
|
|
|
|
2003-10-16 14:56:13 +00:00
|
|
|
Rotor* parseRotor(XMLAttributes* a, const char* name);
|
2001-12-01 06:22:24 +00:00
|
|
|
Wing* parseWing(XMLAttributes* a, const char* name);
|
|
|
|
int parseAxis(const char* name);
|
|
|
|
int parseOutput(const char* name);
|
|
|
|
void parseWeight(XMLAttributes* a);
|
|
|
|
void parsePropeller(XMLAttributes* a);
|
|
|
|
bool eq(const char* a, const char* b);
|
|
|
|
char* dup(const char* s);
|
|
|
|
int attri(XMLAttributes* atts, char* attr);
|
|
|
|
int attri(XMLAttributes* atts, char* attr, int def);
|
|
|
|
float attrf(XMLAttributes* atts, char* attr);
|
|
|
|
float attrf(XMLAttributes* atts, char* attr, float def);
|
2003-12-01 01:22:27 +00:00
|
|
|
bool attrb(XMLAttributes* atts, char* attr);
|
2001-12-01 06:22:24 +00:00
|
|
|
|
|
|
|
// The core Airplane object we manage.
|
|
|
|
Airplane _airplane;
|
|
|
|
|
|
|
|
// The list of "axes" that we expect to find as input. These are
|
|
|
|
// typically property names.
|
|
|
|
Vector _axes;
|
|
|
|
|
|
|
|
// Settable weights
|
|
|
|
Vector _weights;
|
|
|
|
|
|
|
|
// Engine types. Contains an EngRec structure.
|
2001-12-24 13:54:03 +00:00
|
|
|
Vector _thrusters;
|
2001-12-01 06:22:24 +00:00
|
|
|
|
2002-03-01 06:47:28 +00:00
|
|
|
// Output properties for the ControlMap
|
|
|
|
Vector _controlProps;
|
|
|
|
|
2001-12-01 06:22:24 +00:00
|
|
|
// Parsing temporaries
|
|
|
|
void* _currObj;
|
|
|
|
bool _cruiseCurr;
|
|
|
|
int _nextEngine;
|
|
|
|
};
|
|
|
|
|
|
|
|
}; // namespace yasim
|
|
|
|
#endif // _FGFDM_HPP
|