- dw = tile_diameter / 2;
- dh = tile_diameter / 2;
-
- if ( (p1 == p_last) && (state == Running) ) {
- // same bucket as last time
- FG_LOG( FG_TERRAIN, FG_DEBUG, "Same bucket as last time" );
- } else if ( (state == Start) || (state == Inited) ) {
- state = Running;
-
- // First time through or we have teleported, initialize the
- // system and load all relavant tiles
-
- FG_LOG( FG_TERRAIN, FG_INFO, "Updating Tile list for " << p1 );
- FG_LOG( FG_TERRAIN, FG_INFO, " First time through ... " );
- FG_LOG( FG_TERRAIN, FG_INFO, " Updating Tile list for " << p1 );
- FG_LOG( FG_TERRAIN, FG_INFO, " Loading "
- << tile_diameter * tile_diameter << " tiles" );
-
- // wipe/initialize tile cache
- c->init();
- p_last.make_bad();
-
- // build the local area list and schedule tiles for loading
-
- // start with the center tile and work out in concentric
- // "rings"
-
- p2 = fgBucketOffset( f->get_Longitude() * RAD_TO_DEG,
- f->get_Latitude() * RAD_TO_DEG,
- 0, 0 );
- sched_tile( p2 );
-
- // prime scenery center calculations
- Point3D geod_view_center( p2.get_center_lon(),
- p2.get_center_lat(),
- cur_fdm_state->get_Altitude()*FEET_TO_METER +
- 3 );
- current_view.abs_view_pos = fgGeodToCart( geod_view_center );
- current_view.view_pos = current_view.abs_view_pos - scenery.next_center;
-
- for ( i = 3; i <= tile_diameter; i = i + 2 ) {
- int span = i / 2;
-
- // bottom row
- for ( j = -span; j <= span; ++j ) {
- p2 = fgBucketOffset( f->get_Longitude() * RAD_TO_DEG,
- f->get_Latitude() * RAD_TO_DEG,
- j, -span );
- sched_tile( p2 );
- }
-
- // top row
- for ( j = -span; j <= span; ++j ) {
- p2 = fgBucketOffset( f->get_Longitude() * RAD_TO_DEG,
- f->get_Latitude() * RAD_TO_DEG,
- j, span );
- sched_tile( p2 );
- }
-
- // middle rows
- for ( j = -span + 1; j <= span - 1; ++j ) {
- p2 = fgBucketOffset( f->get_Longitude() * RAD_TO_DEG,
- f->get_Latitude() * RAD_TO_DEG,
- -span, j );
- sched_tile( p2 );
- p2 = fgBucketOffset( f->get_Longitude() * RAD_TO_DEG,
- f->get_Latitude() * RAD_TO_DEG,
- span, j );
- sched_tile( p2 );
- }
-
- }
-
- /* for ( j = 0; j < tile_diameter; j++ ) {
- for ( i = 0; i < tile_diameter; i++ ) {
- // fgBucketOffset(&p1, &p2, i - dw, j - dh);
- p2 = fgBucketOffset( f->get_Longitude() * RAD_TO_DEG,
- f->get_Latitude() * RAD_TO_DEG,
- i - dw, j -dh );
- sched_tile( p2 );
- }
- } */
-
- // Now force a load of the center tile and inner ring so we
- // have something to see in our first frame.
- for ( i = 0; i < 9; ++i ) {
- if ( load_queue.size() ) {
- FG_LOG( FG_TERRAIN, FG_DEBUG,
- "Load queue not empty, loading a tile" );
-
- FGLoadRec pending = load_queue.front();
- load_queue.pop_front();
- load_tile( pending.b, pending.cache_index );
- }
- }
-
- } else {
- // We've moved to a new bucket, we need to scroll our
- // structures, and load in the new tiles
-
-#if 0
- // make sure load queue is flushed before doing shift
- while ( load_queue.size() ) {
- FG_LOG( FG_TERRAIN, FG_DEBUG,
- "Load queue not empty, flushing queue before tile shift." );
-
- FGLoadRec pending = load_queue.front();
- load_queue.pop_front();
- load_tile( pending.b, pending.index );
- }