#include <Include/general.hxx>
#include <Scenery/tileentry.hxx>
-#include <Time/FGEventMgr.hxx>
#include <Time/light.hxx>
#include <Time/light.hxx>
#include <Aircraft/aircraft.hxx>
# include <console.h> // -dw- for command line dialog
#endif
-FGEventMgr global_events;
-
// This is a record containing a bit of global housekeeping information
FGGeneral general;
// fgInitVisuals() -- Initialize various GL/view parameters
void fgInitVisuals( void ) {
- fgLIGHT *l;
- l = &cur_light_params;
+ FGLight *l = (FGLight *)(globals->get_subsystem("lighting"));
#ifndef GLUT_WRONG_VERSION
// Go full screen if requested ...
// glLightfv( GL_LIGHT0, GL_POSITION, l->sun_vec ); // done later with ssg
sgVec3 sunpos;
- sgSetVec3( sunpos, l->sun_vec[0], l->sun_vec[1], l->sun_vec[2] );
+ sgSetVec3( sunpos, l->sun_vec()[0], l->sun_vec()[1], l->sun_vec()[2] );
ssgGetLight( 0 ) -> setPosition( sunpos );
glFogi (GL_FOG_MODE, GL_EXP2);
static GLfloat black[4] = { 0.0, 0.0, 0.0, 1.0 };
static GLfloat white[4] = { 1.0, 1.0, 1.0, 1.0 };
- fgLIGHT *l = &cur_light_params;
+ FGLight *l = (FGLight *)(globals->get_subsystem("lighting"));
- glClearColor(l->adj_fog_color[0], l->adj_fog_color[1],
- l->adj_fog_color[2], l->adj_fog_color[3]);
+ glClearColor(l->adj_fog_color()[0], l->adj_fog_color()[1],
+ l->adj_fog_color()[2], l->adj_fog_color()[3]);
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glEnable( GL_FOG );
glFogf ( GL_FOG_DENSITY, fog_exp2_density);
glFogi ( GL_FOG_MODE, GL_EXP2 );
- glFogfv ( GL_FOG_COLOR, l->adj_fog_color );
+ glFogfv ( GL_FOG_COLOR, l->adj_fog_color() );
// GL_LIGHT_MODEL_AMBIENT has a default non-zero value so if
// we only update GL_AMBIENT for our lights we will never get
glLightModelfv( GL_LIGHT_MODEL_AMBIENT, black );
glLightModeli( GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE );
- ssgGetLight( 0 ) -> setColour( GL_AMBIENT, l->scene_ambient );
+ ssgGetLight( 0 ) -> setColour( GL_AMBIENT, l->scene_ambient() );
// texture parameters
glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ) ;
// we need a white diffuse light for the phase of the moon
ssgGetLight( 0 ) -> setColour( GL_DIFFUSE, white );
- thesky->preDraw( cur_fdm_state->get_Altitude() * SG_FEET_TO_METER );
+ thesky->preDraw( cur_fdm_state->get_Altitude() * SG_FEET_TO_METER, fog_exp2_density );
// draw the ssg scene
// return to the desired diffuse color
- ssgGetLight( 0 ) -> setColour( GL_DIFFUSE, l->scene_diffuse );
+ ssgGetLight( 0 ) -> setColour( GL_DIFFUSE, l->scene_diffuse() );
glEnable( GL_DEPTH_TEST );
ssgSetNearFar( scene_nearplane, scene_farplane );
ssgCullAndDraw( globals->get_scenery()->get_scene_graph() );
GLfloat black[4] = { 0.0, 0.0, 0.0, 1.0 };
GLfloat white[4] = { 1.0, 1.0, 1.0, 1.0 };
- // Process/manage pending events
- global_events.update( delta_time_sec );
-
// static const SGPropertyNode *longitude
// = fgGetNode("/position/longitude-deg");
// static const SGPropertyNode *latitude
FGViewer *current__view = globals->get_current_view();
- fgLIGHT *l = &cur_light_params;
+ FGLight *l = (FGLight *)(globals->get_subsystem("lighting"));
static double last_visibility = -9999;
// update fog params
if ( skyblend ) {
if ( fgGetBool("/sim/rendering/textures") ) {
// glClearColor(black[0], black[1], black[2], black[3]);
- glClearColor(l->adj_fog_color[0], l->adj_fog_color[1],
- l->adj_fog_color[2], l->adj_fog_color[3]);
+ glClearColor(l->adj_fog_color()[0], l->adj_fog_color()[1],
+ l->adj_fog_color()[2], l->adj_fog_color()[3]);
clear_mask |= GL_COLOR_BUFFER_BIT;
}
} else {
- glClearColor(l->sky_color[0], l->sky_color[1],
- l->sky_color[2], l->sky_color[3]);
+ glClearColor(l->sky_color()[0], l->sky_color()[1],
+ l->sky_color()[2], l->sky_color()[3]);
clear_mask |= GL_COLOR_BUFFER_BIT;
}
glClear( clear_mask );
if ( skyblend ) {
/*
SG_LOG( SG_GENERAL, SG_BULK, "thesky->repaint() sky_color = "
- << cur_light_params.sky_color[0] << " "
- << cur_light_params.sky_color[1] << " "
- << cur_light_params.sky_color[2] << " "
- << cur_light_params.sky_color[3] );
+ << l->sky_color()[0] << " "
+ << l->sky_color()[1] << " "
+ << l->sky_color()[2] << " "
+ << l->sky_color()[3] );
SG_LOG( SG_GENERAL, SG_BULK, " fog = "
- << cur_light_params.fog_color[0] << " "
- << cur_light_params.fog_color[1] << " "
- << cur_light_params.fog_color[2] << " "
- << cur_light_params.fog_color[3] );
+ << l->fog_color()[0] << " "
+ << l->fog_color()[1] << " "
+ << l->fog_color()[2] << " "
+ << l->fog_color()[3] );
SG_LOG( SG_GENERAL, SG_BULK,
- " sun_angle = " << cur_light_params.sun_angle
- << " moon_angle = " << cur_light_params.moon_angle );
+ " sun_angle = " << l->sun_angle
+ << " moon_angle = " << l->moon_angle );
*/
static SGSkyColor scolor;
+ FGLight *l = (FGLight *)(globals->get_subsystem("lighting"));
- scolor.sky_color = cur_light_params.sky_color;
- scolor.fog_color = cur_light_params.adj_fog_color;
- scolor.cloud_color = cur_light_params.cloud_color;
- scolor.sun_angle = cur_light_params.sun_angle;
- scolor.moon_angle = cur_light_params.moon_angle;
+ scolor.sky_color = l->sky_color();
+ scolor.fog_color = l->adj_fog_color();
+ scolor.cloud_color = l->cloud_color();
+ scolor.sun_angle = l->get_sun_angle();
+ scolor.moon_angle = l->get_moon_angle();
scolor.nplanets = globals->get_ephem()->getNumPlanets();
scolor.nstars = globals->get_ephem()->getNumStars();
scolor.planet_data = globals->get_ephem()->getPlanets();
<< " lon = " << cur_fdm_state->get_Longitude()
<< " lat = " << cur_fdm_state->get_Latitude() );
SG_LOG( SG_GENERAL, SG_BULK,
- " sun_rot = " << cur_light_params.sun_rotation
+ " sun_rot = " << l->get_sun_rotation
<< " gst = " << SGTime::cur_time_params->getGst() );
SG_LOG( SG_GENERAL, SG_BULK,
" sun ra = " << globals->get_ephem()->getSunRightAscension()
// Sun distance: 150,000,000 kilometers
double sun_horiz_eff, moon_horiz_eff;
if (fgGetBool("/sim/rendering/horizon-effect")) {
- sun_horiz_eff = 0.67+pow(0.5+cos(cur_light_params.sun_angle*2)/2,0.33)/3;
- moon_horiz_eff = 0.67+pow(0.5+cos(cur_light_params.moon_angle*2)/2,0.33)/3;
+ sun_horiz_eff = 0.67+pow(0.5+cos(l->get_sun_angle())*2/2, 0.33)/3;
+ moon_horiz_eff = 0.67+pow(0.5+cos(l->get_moon_angle())*2/2, 0.33)/3;
} else {
sun_horiz_eff = moon_horiz_eff = 1.0;
}
* SGD_DEGREES_TO_RADIANS;
sstate.alt = current__view->getAltitudeASL_ft()
* SG_FEET_TO_METER;
- sstate.spin = cur_light_params.sun_rotation;
+ sstate.spin = l->get_sun_rotation();
sstate.gst = globals->get_time_params()->getGst();
sstate.sun_ra = globals->get_ephem()->getSunRightAscension();
sstate.sun_dec = globals->get_ephem()->getSunDeclination();
if ( strcmp(fgGetString("/sim/rendering/fog"), "disabled") ) {
glEnable( GL_FOG );
glFogi( GL_FOG_MODE, GL_EXP2 );
- glFogfv( GL_FOG_COLOR, l->adj_fog_color );
+ glFogfv( GL_FOG_COLOR, l->adj_fog_color() );
}
// set sun/lighting parameters
- ssgGetLight( 0 ) -> setPosition( l->sun_vec );
+ ssgGetLight( 0 ) -> setPosition( l->sun_vec() );
// GL_LIGHT_MODEL_AMBIENT has a default non-zero value so if
// we only update GL_AMBIENT for our lights we will never get
// explicitely to black.
glLightModelfv( GL_LIGHT_MODEL_AMBIENT, black );
- ssgGetLight( 0 ) -> setColour( GL_AMBIENT, l->scene_ambient );
- ssgGetLight( 0 ) -> setColour( GL_DIFFUSE, l->scene_diffuse );
- ssgGetLight( 0 ) -> setColour( GL_SPECULAR, l->scene_specular );
+ ssgGetLight( 0 ) -> setColour( GL_AMBIENT, l->scene_ambient() );
+ ssgGetLight( 0 ) -> setColour( GL_DIFFUSE, l->scene_diffuse() );
+ ssgGetLight( 0 ) -> setColour( GL_SPECULAR, l->scene_specular() );
// texture parameters
// glEnable( GL_TEXTURE_2D );
// we need a white diffuse light for the phase of the moon
ssgGetLight( 0 ) -> setColour( GL_DIFFUSE, white );
- thesky->preDraw( cur_fdm_state->get_Altitude() * SG_FEET_TO_METER );
+ thesky->preDraw( cur_fdm_state->get_Altitude() * SG_FEET_TO_METER, fog_exp2_density );
// return to the desired diffuse color
- ssgGetLight( 0 ) -> setColour( GL_DIFFUSE, l->scene_diffuse );
-
- // FIXME: This should not be needed, but at this time (08/15/2003)
- // certain NVidia drivers don't seem to implement
- // fgPushAttrib(FG_FOG_BIT) properly. The result is that
- // there is not fog when looking at the sun.
- glFogf ( GL_FOG_DENSITY, fog_exp2_density );
+ ssgGetLight( 0 ) -> setColour( GL_DIFFUSE, l->scene_diffuse() );
}
// draw the ssg scene
//SG_LOG(SG_FLIGHT,SG_INFO, "Updating time dep calcs()");
- fgLIGHT *l = &cur_light_params;
-
// Initialize the FDM here if it hasn't been and if we have a
// scenery elevation hit.
// update the view angle
globals->get_viewmgr()->update(delta_time_sec);
- l->UpdateAdjFog();
-
// Update solar system
globals->get_ephem()->update( globals->get_time_params()->getMjd(),
globals->get_time_params()->getLst(),
SGTime *t = globals->get_time_params();
- sglog().setLogLevels( SG_ALL, (sgDebugPriority)fgGetInt("/sim/log-level") );
- sglog().setLogLevels( SG_ALL, SG_INFO );
+ globals->get_event_mgr()->update(delta_time_sec);
SGLocation * acmodel_location = 0;
if(cur_fdm_state->getACModel() != 0) {
cur_fdm_state->get_Runway_altitude() * SG_FEET_TO_METER,
cur_fdm_state->get_Altitude() * SG_FEET_TO_METER); */
-#if 0
-// This code is used by LaRCsim/UIUC to position the aircraft at a proper
-// place. This code should eventually go into the LaRCsim directory.
-// Commented out at Jul 27 2003 because tests show it is not needed.
-// Can probbaly be safely removed after Spet. 2003 - EMH
-
- if ( acmodel_location != 0 ) {
- if ( acmodel_location->get_cur_elev_m() > -9990 && cur_fdm_state->get_inited() ) {
- if ( cur_fdm_state->get_Altitude() * SG_FEET_TO_METER <
- (acmodel_location->get_cur_elev_m() + alt_adjust_m - 130.0) ) {
- // now set aircraft altitude above ground
- printf("(*) Current Altitude = %.2f < %.2f forcing to %.2f\n",
- cur_fdm_state->get_Altitude() * SG_FEET_TO_METER,
- acmodel_location->get_cur_elev_m() + alt_adjust_m - 130.0,
- acmodel_location->get_cur_elev_m() + alt_adjust_m );
- cur_fdm_state->set_Altitude( (acmodel_location->get_cur_elev_m()
- + alt_adjust_m) * SG_METER_TO_FEET );
- SG_LOG( SG_ALL, SG_DEBUG,
- "<*> resetting altitude to "
- << cur_fdm_state->get_Altitude() * SG_FEET_TO_METER
- << " meters" );
- }
- }
- }
-// End of code in question. (see Curt is this code used? above)
-#endif
-
/* printf("Adjustment - ground = %.2f runway = %.2f alt = %.2f\n",
scenery.get_cur_elev(),
cur_fdm_state->get_Runway_altitude() * SG_FEET_TO_METER,
cur_time_override->getLongValue(),
globals->get_warp() );
- if ( globals->get_warp_delta() != 0 ) {
- fgUpdateSkyAndLightingParams();
+ if (globals->get_warp_delta() != 0) {
+ FGLight *l = (FGLight *)(globals->get_subsystem("lighting"));
+ l->update( 0.5 );
}
// update magvar model
} else if ( idle_state == 6 ) {
// sleep(1);
- fgUpdateSkyAndLightingParams();
-
idle_state = 1000;
SG_LOG( SG_GENERAL, SG_INFO, "Panel visible = " << fgPanelVisible() );
fgReshape( fgGetInt("/sim/startup/xsize"),
fgGetInt("/sim/startup/ysize") );
+
}
if ( idle_state == 1000 ) {
fgInitFGRoot(argc, argv);
// Check for the correct base package version
- static char required_version[] = "0.9.2";
+ static char required_version[] = "0.9.3";
string base_version = fgBasePackageVersion();
if ( !(base_version == required_version) ) {
// tell the operator how to use this application
// temporary hack for deck lights - ultimately should move to PLib (when ??)
if (m == 1) {
if (lightpoints_transform) {
- lightpoints_transform->setTransform( &shippos );
- float sun_angle = cur_light_params.sun_angle * SGD_RADIANS_TO_DEGREES;
- if ( sun_angle > 89 ) {
- lightpoints_brightness->select(0x01);
- } else {
- lightpoints_brightness->select(0x00);
- }
+ lightpoints_transform->setTransform( &shippos );
+ FGLight *l = (FGLight *)(globals->get_subsystem("lighting"));
+ float sun_angle = l->get_sun_angle() * SGD_RADIANS_TO_DEGREES;
+ if ( sun_angle > 89 ) {
+ lightpoints_brightness->select(0x01);
+ } else {
+ lightpoints_brightness->select(0x00);
+ }
}
float elev;