1
0
Fork 0

Tweaks to 'native fdm' output. Time offset should now be properly supported

as well as visibility.
This means that if you are using this protocal to exchange data with a
visual channel, you should be able to change time and visibility on the master
and all the slaved visual channels will match it.
This commit is contained in:
curt 2002-02-08 23:03:54 +00:00
parent de2b5f50e9
commit 61d31ab822
2 changed files with 34 additions and 16 deletions

View file

@ -30,6 +30,8 @@
#include <simgear/io/iochannel.hxx> #include <simgear/io/iochannel.hxx>
#include <FDM/flight.hxx> #include <FDM/flight.hxx>
#include <Time/tmp.hxx>
#include <Main/fg_props.hxx>
#include <Main/globals.hxx> #include <Main/globals.hxx>
#include "native_fdm.hxx" #include "native_fdm.hxx"
@ -98,6 +100,9 @@ bool FGNativeFDM::open() {
static void global2net( const FGInterface *global, FGNetFDM *net ) { static void global2net( const FGInterface *global, FGNetFDM *net ) {
static const SGPropertyNode *visibility
= fgGetNode("/environment/visibility-m");
net->version = FG_NET_FDM_VERSION; net->version = FG_NET_FDM_VERSION;
// positions // positions
@ -112,9 +117,10 @@ static void global2net( const FGInterface *global, FGNetFDM *net ) {
net->vcas = cur_fdm_state->get_V_calibrated_kts(); net->vcas = cur_fdm_state->get_V_calibrated_kts();
net->climb_rate = cur_fdm_state->get_Climb_Rate(); net->climb_rate = cur_fdm_state->get_Climb_Rate();
// time // environment
net->cur_time = globals->get_time_params()->get_cur_time(); net->cur_time = globals->get_time_params()->get_cur_time();
net->warp = globals->get_warp(); net->warp = globals->get_warp();
net->visibility = visibility->getDoubleValue();
// Convert the net buffer to network format // Convert the net buffer to network format
net->version = htonl(net->version); net->version = htonl(net->version);
@ -128,13 +134,15 @@ static void global2net( const FGInterface *global, FGNetFDM *net ) {
htond(net->climb_rate); htond(net->climb_rate);
net->cur_time = htonl( net->cur_time ); net->cur_time = htonl( net->cur_time );
net->warp = htonl( net->warp ); net->warp = htonl( net->warp );
htond(net->visibility);
} }
static void net2global( FGNetFDM *net, FGInterface *global ) { static void net2global( FGNetFDM *net, FGInterface *global ) {
static long int last_warp = 0;
// Convert to the net buffer from network format // Convert to the net buffer from network format
net->version = htonl(net->version); net->version = ntohl(net->version);
htond(net->longitude); htond(net->longitude);
htond(net->latitude); htond(net->latitude);
htond(net->altitude); htond(net->altitude);
@ -143,8 +151,9 @@ static void net2global( FGNetFDM *net, FGInterface *global ) {
htond(net->psi); htond(net->psi);
htond(net->vcas); htond(net->vcas);
htond(net->climb_rate); htond(net->climb_rate);
net->cur_time = htonl(net->cur_time); net->cur_time = ntohl(net->cur_time);
net->warp = htonl(net->warp); net->warp = ntohl(net->warp);
htond(net->visibility);
if ( net->version == FG_NET_FDM_VERSION ) { if ( net->version == FG_NET_FDM_VERSION ) {
// cout << "pos = " << net->longitude << " " << net->latitude << endl; // cout << "pos = " << net->longitude << " " << net->latitude << endl;
@ -160,8 +169,16 @@ static void net2global( FGNetFDM *net, FGInterface *global ) {
cur_fdm_state->_set_Climb_Rate( net->climb_rate ); cur_fdm_state->_set_Climb_Rate( net->climb_rate );
globals->set_warp( net->warp ); globals->set_warp( net->warp );
if ( net->warp != last_warp ) {
fgUpdateSkyAndLightingParams();
}
last_warp = net->warp;
fgSetDouble( "/environment/visibility-m", net->visibility );
} else { } else {
SG_LOG( SG_IO, SG_ALERT, "Error: version mismatch in net2global()" ); SG_LOG( SG_IO, SG_ALERT, "Error: version mismatch in net2global()" );
SG_LOG( SG_IO, SG_ALERT,
"\tread " << net->version << " need " << FG_NET_FDM_VERSION );
SG_LOG( SG_IO, SG_ALERT, SG_LOG( SG_IO, SG_ALERT,
"\tsomeone needs to upgrade net_fdm.hxx and recompile." ); "\tsomeone needs to upgrade net_fdm.hxx and recompile." );
} }

View file

@ -58,9 +58,10 @@ public:
double vcas; // calibrated airspeed double vcas; // calibrated airspeed
double climb_rate; // feet per second double climb_rate; // feet per second
// Time // Environment
time_t cur_time; // current unix time time_t cur_time; // current unix time
long int warp; // offset in seconds to unix time long int warp; // offset in seconds to unix time
double visibility; // visibility in meters (for env. effects)
}; };