#include <simgear/compiler.h>
#include <simgear/constants.h>
#include <simgear/structure/subsystem_mgr.hxx>
+#include <simgear/props/tiedpropertylist.hxx>
#include <FDM/groundcache.hxx>
using std::list;
using std::vector;
using std::string;
+namespace simgear {
+class BVHMaterial;
+}
+
/**
* A little helper class to update the track if
* the position has changed. In the constructor,
bool inited;
// Have we bound to the property system
- bool bound;
+ bool bound;
// periodic update management variable. This is a scheme to run
// the fdm with a fixed delta-t. We control how many iteration of
double climb_rate; // in feet per second
double altitude_agl;
double track;
+ double delta_loops;
- double daux[16]; // auxilliary doubles
- float faux[16]; // auxilliary floats
- int iaux[16]; // auxilliary ints
+ simgear::TiedPropertyList _tiedProperties;
// the ground cache object itself.
FGGroundCache ground_cache;
+ void set_A_X_pilot(double x)
+ { _set_Accels_Pilot_Body(x, a_pilot_body_v[1], a_pilot_body_v[2]); }
+
+ void set_A_Y_pilot(double y)
+ { _set_Accels_Pilot_Body(a_pilot_body_v[0], y, a_pilot_body_v[2]); }
+
+ void set_A_Z_pilot(double z)
+ { _set_Accels_Pilot_Body(a_pilot_body_v[0], a_pilot_body_v[1], z); }
+
protected:
int _calc_multiloop (double dt);
euler_rates_v[1] = theta;
euler_rates_v[2] = psi;
}
+
+ void set_Phi_dot_degps(double x)
+ {
+ euler_rates_v[0] = x * SG_DEGREES_TO_RADIANS;
+ }
+
+ void set_Theta_dot_degps(double x)
+ {
+ euler_rates_v[1] = x * SG_DEGREES_TO_RADIANS;
+ }
+
+ void set_Psi_dot_degps(double x)
+ {
+ euler_rates_v[2] = x * SG_DEGREES_TO_RADIANS;
+ }
+
inline void _set_Geocentric_Rates( double lat, double lon, double rad ) {
geocentric_rates_v[0] = lat;
geocentric_rates_v[1] = lon;
inline void _set_T_Local_to_Body( int i, int j, double value) { }
inline void _set_Alpha( double a ) { alpha = a; }
inline void _set_Beta( double b ) { beta = b; }
+
+ inline void set_Alpha_deg( double a ) { alpha = a * SG_DEGREES_TO_RADIANS; }
+
inline void _set_Gamma_vert_rad( double gv ) { gamma_vert_rad = gv; }
inline void _set_Density( double d ) { density = d; }
inline void _set_Mach_number( double m ) { mach_number = m; }
inline void _set_Runway_altitude( double alt ) { runway_altitude = alt; }
inline void _set_Climb_Rate(double rate) { climb_rate = rate; }
- inline void _set_daux( int n, double value ) { daux[n] = value; }
- inline void _set_faux( int n, float value ) { faux[n] = value; }
- inline void _set_iaux( int n, int value ) { iaux[n] = value; }
-
public:
FGInterface();
inline double get_V_ground_speed() const { return v_ground_speed; }
inline double get_V_ground_speed_kt() const { return v_ground_speed * SG_FEET_TO_METER * 3600 * SG_METER_TO_NM; }
+ inline void set_V_ground_speed_kt(double ground_speed) { v_ground_speed = ground_speed / ( SG_FEET_TO_METER * 3600 * SG_METER_TO_NM); }
inline double get_V_equiv_kts() const { return v_equiv_kts; }
inline double get_Climb_Rate() const { return climb_rate; }
- // Auxilliary variables
- inline double get_daux( int n ) const { return daux[n]; }
- inline float get_faux( int n ) const { return faux[n]; }
- inline int get_iaux( int n ) const { return iaux[n]; }
-
// Note that currently this is the "same" value runway altitude...
inline double get_ground_elev_ft() const { return runway_altitude; }
// contact point.
bool get_agl_m(double t, const double pt[3], double max_altoff,
double contact[3], double normal[3], double linearVel[3],
- double angularVel[3], SGMaterial const*& material,
+ double angularVel[3], simgear::BVHMaterial const*& material,
simgear::BVHNode::Id& id);
bool get_agl_ft(double t, const double pt[3], double max_altoff,
double contact[3], double normal[3], double linearVel[3],
- double angularVel[3], SGMaterial const*& material,
+ double angularVel[3], simgear::BVHMaterial const*& material,
simgear::BVHNode::Id& id);
double get_groundlevel_m(double lat, double lon, double alt);
double get_groundlevel_m(const SGGeod& geod);
// position pt.
bool get_nearest_m(double t, const double pt[3], double maxDist,
double contact[3], double normal[3], double linearVel[3],
- double angularVel[3], SGMaterial const*& material,
+ double angularVel[3], simgear::BVHMaterial const*& material,
simgear::BVHNode::Id& id);
bool get_nearest_ft(double t, const double pt[3], double maxDist,
double contact[3], double normal[3],double linearVel[3],
- double angularVel[3], SGMaterial const*& material,
+ double angularVel[3], simgear::BVHMaterial const*& material,
simgear::BVHNode::Id& id);
void release_wire(void);
};
-extern FGInterface * cur_fdm_state;
-
-// Toggle data logging on/off
-void fgToggleFDMdataLogging(void);
-
-
#endif // _FLIGHT_HXX