mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Allow the server to control fog_distance and fog_start via the sky-api (#13448)
This commit is contained in:
parent
dde8f0e20a
commit
0ade097e99
11 changed files with 80 additions and 21 deletions
|
@ -372,6 +372,7 @@ class GameGlobalShaderConstantSetter : public IShaderConstantSetter
|
|||
bool m_fog_enabled;
|
||||
CachedPixelShaderSetting<float, 4> m_sky_bg_color;
|
||||
CachedPixelShaderSetting<float> m_fog_distance;
|
||||
CachedPixelShaderSetting<float> m_fog_shading_parameter;
|
||||
CachedVertexShaderSetting<float> m_animation_timer_vertex;
|
||||
CachedPixelShaderSetting<float> m_animation_timer_pixel;
|
||||
CachedVertexShaderSetting<float> m_animation_timer_delta_vertex;
|
||||
|
@ -431,6 +432,7 @@ public:
|
|||
m_fog_range(fog_range),
|
||||
m_sky_bg_color("skyBgColor"),
|
||||
m_fog_distance("fogDistance"),
|
||||
m_fog_shading_parameter("fogShadingParameter"),
|
||||
m_animation_timer_vertex("animationTimer"),
|
||||
m_animation_timer_pixel("animationTimer"),
|
||||
m_animation_timer_delta_vertex("animationTimerDelta"),
|
||||
|
@ -496,7 +498,10 @@ public:
|
|||
if (m_fog_enabled && !*m_force_fog_off)
|
||||
fog_distance = *m_fog_range;
|
||||
|
||||
float fog_shading_parameter = 1.0 / ( 1.0 - m_sky->getFogStart());
|
||||
|
||||
m_fog_distance.set(&fog_distance, services);
|
||||
m_fog_shading_parameter.set(&fog_shading_parameter, services);
|
||||
|
||||
u32 daynight_ratio = (float)m_client->getEnv().getDayNightRatio();
|
||||
video::SColorf sunlight;
|
||||
|
@ -961,7 +966,6 @@ private:
|
|||
f32 m_cache_joystick_frustum_sensitivity;
|
||||
f32 m_repeat_place_time;
|
||||
f32 m_cache_cam_smoothing;
|
||||
f32 m_cache_fog_start;
|
||||
|
||||
bool m_invert_mouse;
|
||||
bool m_enable_hotbar_mouse_wheel;
|
||||
|
@ -2490,6 +2494,9 @@ void Game::increaseViewRange()
|
|||
range_new = 4000;
|
||||
std::wstring msg = fwgettext("Viewing range is at maximum: %d", range_new);
|
||||
m_game_ui->showStatusText(msg);
|
||||
} else if (sky->getFogDistance() >= 0 && range_new > sky->getFogDistance()) {
|
||||
std::wstring msg = fwgettext("Viewing range changed to %d, but limited to %d set by server", range_new, sky->getFogDistance());
|
||||
m_game_ui->showStatusText(msg);
|
||||
} else {
|
||||
std::wstring msg = fwgettext("Viewing range changed to %d", range_new);
|
||||
m_game_ui->showStatusText(msg);
|
||||
|
@ -2507,6 +2514,9 @@ void Game::decreaseViewRange()
|
|||
range_new = 20;
|
||||
std::wstring msg = fwgettext("Viewing range is at minimum: %d", range_new);
|
||||
m_game_ui->showStatusText(msg);
|
||||
} else if (sky->getFogDistance() >= 0 && range_new > sky->getFogDistance()) {
|
||||
std::wstring msg = fwgettext("Viewing range changed to %d, but limited to %d set by server", range_new, sky->getFogDistance());
|
||||
m_game_ui->showStatusText(msg);
|
||||
} else {
|
||||
std::wstring msg = fwgettext("Viewing range changed to %d", range_new);
|
||||
m_game_ui->showStatusText(msg);
|
||||
|
@ -2518,10 +2528,15 @@ void Game::decreaseViewRange()
|
|||
void Game::toggleFullViewRange()
|
||||
{
|
||||
draw_control->range_all = !draw_control->range_all;
|
||||
if (draw_control->range_all)
|
||||
m_game_ui->showTranslatedStatusText("Enabled unlimited viewing range");
|
||||
else
|
||||
if (draw_control->range_all) {
|
||||
if (sky->getFogDistance() >= 0) {
|
||||
m_game_ui->showTranslatedStatusText("The server has disabled unlimited viewing range");
|
||||
} else {
|
||||
m_game_ui->showTranslatedStatusText("Enabled unlimited viewing range");
|
||||
}
|
||||
} else {
|
||||
m_game_ui->showTranslatedStatusText("Disabled unlimited viewing range");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -2996,6 +3011,20 @@ void Game::handleClientEvent_SetSky(ClientEvent *event, CameraOrientation *cam)
|
|||
// Orbit Tilt:
|
||||
sky->setBodyOrbitTilt(event->set_sky->body_orbit_tilt);
|
||||
|
||||
// fog
|
||||
// do not override a potentially smaller client setting.
|
||||
sky->setFogDistance(event->set_sky->fog_distance);
|
||||
|
||||
// if the fog distance is reset, switch back to the client's viewing_range
|
||||
if (event->set_sky->fog_distance < 0)
|
||||
draw_control->wanted_range = g_settings->getS16("viewing_range");
|
||||
|
||||
if (event->set_sky->fog_start >= 0)
|
||||
sky->setFogStart(rangelim(event->set_sky->fog_start, 0.0f, 0.99f));
|
||||
else
|
||||
sky->setFogStart(rangelim(g_settings->getFloat("fog_start"), 0.0f, 0.99f));
|
||||
|
||||
|
||||
delete event->set_sky;
|
||||
}
|
||||
|
||||
|
@ -3915,7 +3944,10 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
|
|||
Fog range
|
||||
*/
|
||||
|
||||
if (draw_control->range_all) {
|
||||
if (sky->getFogDistance() >= 0) {
|
||||
draw_control->wanted_range = MYMIN(draw_control->wanted_range, sky->getFogDistance());
|
||||
}
|
||||
if (draw_control->range_all && sky->getFogDistance() < 0) {
|
||||
runData.fog_range = 100000 * BS;
|
||||
} else {
|
||||
runData.fog_range = draw_control->wanted_range * BS;
|
||||
|
@ -4006,12 +4038,11 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
|
|||
/*
|
||||
Fog
|
||||
*/
|
||||
|
||||
if (m_cache_enable_fog) {
|
||||
driver->setFog(
|
||||
sky->getBgColor(),
|
||||
video::EFT_FOG_LINEAR,
|
||||
runData.fog_range * m_cache_fog_start,
|
||||
runData.fog_range * sky->getFogStart(),
|
||||
runData.fog_range * 1.0,
|
||||
0.01,
|
||||
false, // pixel fog
|
||||
|
@ -4284,15 +4315,12 @@ void Game::readSettings()
|
|||
m_cache_enable_noclip = g_settings->getBool("noclip");
|
||||
m_cache_enable_free_move = g_settings->getBool("free_move");
|
||||
|
||||
m_cache_fog_start = g_settings->getFloat("fog_start");
|
||||
|
||||
m_cache_cam_smoothing = 0;
|
||||
if (g_settings->getBool("cinematic"))
|
||||
m_cache_cam_smoothing = 1 - g_settings->getFloat("cinematic_camera_smoothing");
|
||||
else
|
||||
m_cache_cam_smoothing = 1 - g_settings->getFloat("camera_smoothing");
|
||||
|
||||
m_cache_fog_start = rangelim(m_cache_fog_start, 0.0f, 0.99f);
|
||||
m_cache_cam_smoothing = rangelim(m_cache_cam_smoothing, 0.01f, 1.0f);
|
||||
m_cache_mouse_sensitivity = rangelim(m_cache_mouse_sensitivity, 0.001, 100.0);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue