+ // activate loader thread one out of every 5 frames
+ if ( counter_hack == 0 ) {
+ // Notify the tile loader that it can load another tile
+
+ loader.update();
+
+ }
+ counter_hack = (counter_hack + 1) % 5;
+
+ if ( !attach_queue.empty() ) {
+#ifdef ENABLE_THREADS
+ FGTileEntry* e = attach_queue.pop();
+#else
+ FGTileEntry* e = attach_queue.front();
+ attach_queue.pop();
+#endif
+ e->add_ssg_nodes( terrain_branch,
+ gnd_lights_branch,
+ rwy_lights_branch );
+ // cout << "Adding ssg nodes for "
+ }
+
+ sgdVec3 sc;
+ sgdSetVec3( sc,
+ scenery.get_center()[0],
+ scenery.get_center()[1],
+ scenery.get_center()[2] );
+
+#if 0
+ if ( scenery.center == Point3D(0.0) ) {
+ // initializing
+ cout << "initializing scenery current elevation ... " << endl;
+ sgdVec3 tmp_abs_view_pos;
+
+ Point3D geod_pos = Point3D( longitude * SGD_DEGREES_TO_RADIANS,
+ latitude * SGD_DEGREES_TO_RADIANS,
+ 0.0);
+ Point3D tmp = sgGeodToCart( geod_pos );
+ scenery.center = tmp;
+ sgdSetVec3( tmp_abs_view_pos, tmp.x(), tmp.y(), tmp.z() );
+
+ // cout << "abs_view_pos = " << tmp_abs_view_pos << endl;
+ prep_ssg_nodes();
+
+ double tmp_elev;
+ if ( fgCurrentElev(tmp_abs_view_pos, sc, &hit_list,
+ &tmp_elev, &scenery.cur_radius, scenery.cur_normal) )
+ {
+ scenery.set_cur_elev( tmp_elev );
+ } else {
+ scenery.set_cur_elev( 0.0 );
+ }
+ cout << "result = " << scenery.get_cur_elev() << endl;
+ } else {
+#endif
+ /*
+ cout << "abs view pos = "
+ << globals->get_current_view()->get_abs_view_pos()[0] << ","
+ << globals->get_current_view()->get_abs_view_pos()[1] << ","
+ << globals->get_current_view()->get_abs_view_pos()[2]
+ << " view pos = "
+ << globals->get_current_view()->get_view_pos()[0] << ","
+ << globals->get_current_view()->get_view_pos()[1] << ","
+ << globals->get_current_view()->get_view_pos()[2]
+ << endl;
+ cout << "current_tile = " << current_tile << endl;
+ cout << "Scenery center = " << sc[0] << "," << sc[1] << "," << sc[2]
+ << endl;
+ */
+
+ // overridden with actual values if a terrain intersection is
+ // found
+ double hit_elev = -9999.0;
+ double hit_radius = 0.0;
+ sgdVec3 hit_normal = { 0.0, 0.0, 0.0 };
+
+ bool hit = false;
+ if ( fabs(sc[0]) > 1.0 || fabs(sc[1]) > 1.0 || fabs(sc[2]) > 1.0 ) {
+ // scenery center has been properly defined so any hit
+ // should be valid (and not just luck)
+ hit = fgCurrentElev(globals->get_current_view()->get_abs_view_pos(),
+ sc,
+ &hit_list,
+ &hit_elev,
+ &hit_radius,
+ hit_normal);
+ }
+
+ if ( hit ) {
+ scenery.set_cur_elev( hit_elev );
+ scenery.set_cur_radius( hit_radius );
+ scenery.set_cur_normal( hit_normal );
+ } else {
+ scenery.set_cur_elev( -9999.0 );
+ scenery.set_cur_radius( 0.0 );
+ scenery.set_cur_normal( hit_normal );
+ }
+
+ // cout << "Current elevation = " << scenery.get_cur_elev() << endl;
+#if 0
+ }
+#endif
+