mirror of
https://github.com/minetest/minetest.git
synced 2024-11-27 10:03:45 +01:00
Fixed viewing range stuff a bit (now it works better with very low ranges)
This commit is contained in:
parent
59c4a342a9
commit
1a6e1e142f
50
src/game.cpp
50
src/game.cpp
@ -181,8 +181,15 @@ void updateViewingRange(f32 frametime_in, Client *client)
|
|||||||
float range_min = g_settings.getS16("viewing_range_nodes_min");
|
float range_min = g_settings.getS16("viewing_range_nodes_min");
|
||||||
float range_max = g_settings.getS16("viewing_range_nodes_max");
|
float range_max = g_settings.getS16("viewing_range_nodes_max");
|
||||||
|
|
||||||
|
// Limit minimum to keep the feedback loop stable
|
||||||
|
if(range_min < 5)
|
||||||
|
range_min = 5;
|
||||||
|
|
||||||
draw_control.wanted_min_range = range_min;
|
draw_control.wanted_min_range = range_min;
|
||||||
draw_control.wanted_max_blocks = (1.2*draw_control.blocks_drawn)+1;
|
//draw_control.wanted_max_blocks = (1.5*draw_control.blocks_drawn)+1;
|
||||||
|
draw_control.wanted_max_blocks = (1.5*draw_control.blocks_would_have_drawn)+1;
|
||||||
|
if(draw_control.wanted_max_blocks < 10)
|
||||||
|
draw_control.wanted_max_blocks = 10;
|
||||||
|
|
||||||
float block_draw_ratio = 1.0;
|
float block_draw_ratio = 1.0;
|
||||||
if(draw_control.blocks_would_have_drawn != 0)
|
if(draw_control.blocks_would_have_drawn != 0)
|
||||||
@ -261,18 +268,15 @@ void updateViewingRange(f32 frametime_in, Client *client)
|
|||||||
}
|
}
|
||||||
|
|
||||||
new_range += wanted_range_change;
|
new_range += wanted_range_change;
|
||||||
//dstream<<"new_range="<<new_range/*<<std::endl*/;
|
|
||||||
|
|
||||||
//float new_range_unclamped = new_range;
|
float new_range_unclamped = new_range;
|
||||||
if(new_range < range_min)
|
if(new_range < range_min)
|
||||||
new_range = range_min;
|
new_range = range_min;
|
||||||
if(new_range > range_max)
|
if(new_range > range_max)
|
||||||
new_range = range_max;
|
new_range = range_max;
|
||||||
|
|
||||||
/*if(new_range != new_range_unclamped)
|
dstream<<"new_range="<<new_range_unclamped
|
||||||
dstream<<", clamped to "<<new_range<<std::endl;
|
<<", clamped to "<<new_range<<std::endl;
|
||||||
else
|
|
||||||
dstream<<std::endl;*/
|
|
||||||
|
|
||||||
draw_control.wanted_range = new_range;
|
draw_control.wanted_range = new_range;
|
||||||
|
|
||||||
@ -653,14 +657,14 @@ void the_game(
|
|||||||
/*
|
/*
|
||||||
Draw "Loading" screen
|
Draw "Loading" screen
|
||||||
*/
|
*/
|
||||||
const wchar_t *text = L"Loading and connecting...";
|
const wchar_t *loadingtext = L"Loading and connecting...";
|
||||||
u32 text_height = font->getDimension(text).Height;
|
u32 text_height = font->getDimension(loadingtext).Height;
|
||||||
core::vector2d<s32> center(screensize.X/2, screensize.Y/2);
|
core::vector2d<s32> center(screensize.X/2, screensize.Y/2);
|
||||||
core::vector2d<s32> textsize(300, text_height);
|
core::vector2d<s32> textsize(300, text_height);
|
||||||
core::rect<s32> textrect(center - textsize/2, center + textsize/2);
|
core::rect<s32> textrect(center - textsize/2, center + textsize/2);
|
||||||
|
|
||||||
gui::IGUIStaticText *gui_loadingtext = guienv->addStaticText(
|
gui::IGUIStaticText *gui_loadingtext = guienv->addStaticText(
|
||||||
text, textrect, false, false);
|
loadingtext, textrect, false, false);
|
||||||
gui_loadingtext->setTextAlignment(gui::EGUIA_CENTER, gui::EGUIA_UPPERLEFT);
|
gui_loadingtext->setTextAlignment(gui::EGUIA_CENTER, gui::EGUIA_UPPERLEFT);
|
||||||
|
|
||||||
driver->beginScene(true, true, video::SColor(255,0,0,0));
|
driver->beginScene(true, true, video::SColor(255,0,0,0));
|
||||||
@ -793,9 +797,8 @@ void the_game(
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
float cloud_height = BS*100;
|
float cloud_height = BS*100;
|
||||||
//float cloud_height = BS*55;
|
Clouds *clouds = NULL;
|
||||||
//float cloud_height = BS*20;
|
clouds = new Clouds(smgr->getRootSceneNode(), smgr, -1,
|
||||||
Clouds *clouds = new Clouds(smgr->getRootSceneNode(), smgr, -1,
|
|
||||||
cloud_height, time(0));
|
cloud_height, time(0));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1729,9 +1732,12 @@ void the_game(
|
|||||||
/*
|
/*
|
||||||
Update coulds
|
Update coulds
|
||||||
*/
|
*/
|
||||||
|
if(clouds)
|
||||||
|
{
|
||||||
clouds->step(dtime);
|
clouds->step(dtime);
|
||||||
clouds->update(v2f(player_position.X, player_position.Z),
|
clouds->update(v2f(player_position.X, player_position.Z),
|
||||||
0.05+brightness*0.95);
|
0.05+brightness*0.95);
|
||||||
|
}
|
||||||
|
|
||||||
// Store brightness value
|
// Store brightness value
|
||||||
old_brightness = brightness;
|
old_brightness = brightness;
|
||||||
@ -1745,6 +1751,8 @@ void the_game(
|
|||||||
f32 range = draw_control.wanted_range*BS + MAP_BLOCKSIZE*BS*1.5;
|
f32 range = draw_control.wanted_range*BS + MAP_BLOCKSIZE*BS*1.5;
|
||||||
if(draw_control.range_all)
|
if(draw_control.range_all)
|
||||||
range = 100000*BS;
|
range = 100000*BS;
|
||||||
|
if(range < 50*BS)
|
||||||
|
range = range * 0.5 + 25*BS;
|
||||||
|
|
||||||
driver->setFog(
|
driver->setFog(
|
||||||
bgcolor,
|
bgcolor,
|
||||||
@ -2069,6 +2077,22 @@ void the_game(
|
|||||||
lastFPS = fps;
|
lastFPS = fps;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Draw a "shutting down" screen, which will be shown while the map
|
||||||
|
generator and other stuff quits
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
const wchar_t *shuttingdowntext = L"Shutting down stuff...";
|
||||||
|
gui::IGUIStaticText *gui_shuttingdowntext = guienv->addStaticText(
|
||||||
|
shuttingdowntext, textrect, false, false);
|
||||||
|
gui_shuttingdowntext->setTextAlignment(gui::EGUIA_CENTER,
|
||||||
|
gui::EGUIA_UPPERLEFT);
|
||||||
|
driver->beginScene(true, true, video::SColor(255,0,0,0));
|
||||||
|
guienv->drawAll();
|
||||||
|
driver->endScene();
|
||||||
|
gui_shuttingdowntext->remove();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -184,6 +184,10 @@ bool isBlockInSight(v3s16 blockpos_b, v3f camera_pos, v3f camera_dir, f32 range,
|
|||||||
if(distance_ptr)
|
if(distance_ptr)
|
||||||
*distance_ptr = d;
|
*distance_ptr = d;
|
||||||
|
|
||||||
|
// If block is very close, it is always in sight
|
||||||
|
if(d < 1.44*1.44*MAP_BLOCKSIZE*BS/2)
|
||||||
|
return true;
|
||||||
|
|
||||||
// If block is far away, it's not in sight
|
// If block is far away, it's not in sight
|
||||||
if(d > range * BS)
|
if(d > range * BS)
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
Reference in New Issue
Block a user