-
- // Calculate the average frametime in the case that all wanted
- // blocks had been drawn
- f32 frametime = m_added_frametime / m_added_frames / block_draw_ratio;
-
- m_added_frametime = 0.0;
- m_added_frames = 0;
-
- f32 wanted_frametime_change = wanted_frametime - frametime;
- //dstream<<"wanted_frametime_change="<<wanted_frametime_change<<std::endl;
-
- // If needed frametime change is small, just return
- // This value was 0.4 for many months until 2011-10-18 by c55;
- // Let's see how this works out.
- if (fabs(wanted_frametime_change) < wanted_frametime*0.33)
- {
- //dstream<<"ignoring small wanted_frametime_change"<<std::endl;
- return;
- }
-
- f32 range = m_draw_control.wanted_range;
- f32 new_range = range;
-
- f32 d_range = range - m_range_old;
- f32 d_frametime = frametime - m_frametime_old;
- if (d_range != 0)
- {
- m_time_per_range = d_frametime / d_range;
- }
-
- // The minimum allowed calculated frametime-range derivative:
- // Practically this sets the maximum speed of changing the range.
- // The lower this value, the higher the maximum changing speed.
- // A low value here results in wobbly range (0.001)
- // A high value here results in slow changing range (0.0025)
- // SUGG: This could be dynamically adjusted so that when
- // the camera is turning, this is lower
- //f32 min_time_per_range = 0.0015;
- f32 min_time_per_range = 0.0010;
- //f32 min_time_per_range = 0.05 / range;
- if(m_time_per_range < min_time_per_range)
- {
- m_time_per_range = min_time_per_range;
- //dstream<<"m_time_per_range="<<m_time_per_range<<" (min)"<<std::endl;
- }
- else
- {
- //dstream<<"m_time_per_range="<<m_time_per_range<<std::endl;
- }
-
- f32 wanted_range_change = wanted_frametime_change / m_time_per_range;
- // Dampen the change a bit to kill oscillations
- //wanted_range_change *= 0.9;
- //wanted_range_change *= 0.75;
- wanted_range_change *= 0.5;
- //dstream<<"wanted_range_change="<<wanted_range_change<<std::endl;
-
- // If needed range change is very small, just return
- if(fabs(wanted_range_change) < 0.001)
- {
- //dstream<<"ignoring small wanted_range_change"<<std::endl;
- return;
- }
-
- new_range += wanted_range_change;
-
- //f32 new_range_unclamped = new_range;
- new_range = MYMAX(new_range, viewing_range_min);
- new_range = MYMIN(new_range, viewing_range_max);
- /*dstream<<"new_range="<<new_range_unclamped
- <<", clamped to "<<new_range<<std::endl;*/
-
- m_draw_control.wanted_range = new_range;
-
- m_range_old = new_range;
- m_frametime_old = frametime;