1
0
Fork 0

Expose the time of day setting through the fg_command and property interface

so a gui interface can be built.
This commit is contained in:
curt 2003-09-16 22:35:16 +00:00
parent b10715833c
commit 7f2757a7ab
2 changed files with 71 additions and 0 deletions

View file

@ -25,6 +25,7 @@
#if defined(HAVE_PLIB_PSL)
# include <Scripting/scriptmgr.hxx>
#endif
#include <Time/sunsolver.hxx>
#include <Time/tmp.hxx>
#include "fg_init.hxx"
@ -478,6 +479,67 @@ do_lighting_update (const SGPropertyNode * arg)
}
/**
* Update the lighting manually.
*/
static bool
do_timeofday (const SGPropertyNode * arg)
{
const string &offset_type = arg->getStringValue("timeofday", "noon");
static const SGPropertyNode *longitude
= fgGetNode("/position/longitude-deg");
static const SGPropertyNode *latitude
= fgGetNode("/position/latitude-deg");
static const SGPropertyNode *cur_time_override
= fgGetNode("/sim/time/cur-time-override", true);
SGTime *t = globals->get_time_params();
int orig_warp = globals->get_warp();
time_t cur_time = t->get_cur_time();
cout << "cur_time = " << cur_time << endl;
cout << "orig_warp = " << orig_warp << endl;
int warp = 0;
if ( offset_type == "noon" ) {
warp = fgTimeSecondsUntilNoon( cur_time,
longitude->getDoubleValue()
* SGD_DEGREES_TO_RADIANS,
latitude->getDoubleValue()
* SGD_DEGREES_TO_RADIANS );
} else if ( offset_type == "midnight" ) {
warp = fgTimeSecondsUntilMidnight( cur_time,
longitude->getDoubleValue()
* SGD_DEGREES_TO_RADIANS,
latitude->getDoubleValue()
* SGD_DEGREES_TO_RADIANS );
} else if ( offset_type == "dawn" ) {
warp = fgTimeSecondsUntilDawn( cur_time,
longitude->getDoubleValue()
* SGD_DEGREES_TO_RADIANS,
latitude->getDoubleValue()
* SGD_DEGREES_TO_RADIANS );
} else if ( offset_type == "dusk" ) {
warp = fgTimeSecondsUntilDusk( cur_time,
longitude->getDoubleValue()
* SGD_DEGREES_TO_RADIANS,
latitude->getDoubleValue()
* SGD_DEGREES_TO_RADIANS );
}
cout << "warp = " << warp << endl;
globals->set_warp( orig_warp + warp );
t->update( longitude->getDoubleValue() * SGD_DEGREES_TO_RADIANS,
latitude->getDoubleValue() * SGD_DEGREES_TO_RADIANS,
cur_time_override->getLongValue(),
globals->get_warp() );
fgUpdateSkyAndLightingParams();
return true;
}
/**
* Built-in command: toggle a bool property value.
*
@ -906,6 +968,7 @@ static struct {
{ "screen-capture", do_screen_capture },
{ "tile-cache-reload", do_tile_cache_reload },
{ "lighting-update", do_lighting_update },
{ "timeofday", do_timeofday },
{ "property-toggle", do_property_toggle },
{ "property-assign", do_property_assign },
{ "property-adjust", do_property_adjust },

View file

@ -332,6 +332,14 @@ PropsChannel::foundTerminator()
= args.getNode("subsystem", i-2, true);
node->setStringValue( tokens[i].c_str() );
}
} else if ( tokens[1] == "timeofday" ) {
for ( unsigned int i = 2; i < tokens.size(); ++i ) {
cout << "props: adding subsystem = " << tokens[i]
<< endl;
SGPropertyNode *node
= args.getNode("timeofday", i-2, true);
node->setStringValue( tokens[i].c_str() );
}
}
if ( !globals->get_commands()
->execute(tokens[1].c_str(), &args) )