mirror of
https://github.com/minetest/minetest.git
synced 2024-11-27 10:03:45 +01:00
Enforce limits of settings that could cause buggy behaviour (#12450)
Enforces the setting value bounds that are currently only limited by the GUI (settingtypes.txt).
This commit is contained in:
parent
7c261118e0
commit
051181fa6e
@ -191,7 +191,7 @@ end
|
|||||||
|
|
||||||
local function queue_download(package, reason)
|
local function queue_download(package, reason)
|
||||||
local max_concurrent_downloads = tonumber(core.settings:get("contentdb_max_concurrent_downloads"))
|
local max_concurrent_downloads = tonumber(core.settings:get("contentdb_max_concurrent_downloads"))
|
||||||
if number_downloading < max_concurrent_downloads then
|
if number_downloading < math.max(max_concurrent_downloads, 1) then
|
||||||
start_install(package, reason)
|
start_install(package, reason)
|
||||||
else
|
else
|
||||||
table.insert(download_queue, { package = package, reason = reason })
|
table.insert(download_queue, { package = package, reason = reason })
|
||||||
|
@ -95,7 +95,7 @@ always_fly_fast (Always fly fast) bool true
|
|||||||
|
|
||||||
# The time in seconds it takes between repeated node placements when holding
|
# The time in seconds it takes between repeated node placements when holding
|
||||||
# the place button.
|
# the place button.
|
||||||
repeat_place_time (Place repetition interval) float 0.25 0.001
|
repeat_place_time (Place repetition interval) float 0.25 0.25 2
|
||||||
|
|
||||||
# Automatically jump up single-node obstacles.
|
# Automatically jump up single-node obstacles.
|
||||||
autojump (Automatic jumping) bool false
|
autojump (Automatic jumping) bool false
|
||||||
@ -223,7 +223,7 @@ view_bobbing_amount (View bobbing factor) float 1.0 0.0 7.9
|
|||||||
|
|
||||||
# Multiplier for fall bobbing.
|
# Multiplier for fall bobbing.
|
||||||
# For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double.
|
# For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double.
|
||||||
fall_bobbing_amount (Fall bobbing factor) float 0.03 0.0
|
fall_bobbing_amount (Fall bobbing factor) float 0.03 0.0 100.0
|
||||||
|
|
||||||
[**Camera]
|
[**Camera]
|
||||||
|
|
||||||
@ -1877,7 +1877,7 @@ server_side_occlusion_culling (Server side occlusion culling) bool true
|
|||||||
# Reducing this value increases cave and dungeon density.
|
# Reducing this value increases cave and dungeon density.
|
||||||
# Altering this value is for special usage, leaving it unchanged is
|
# Altering this value is for special usage, leaving it unchanged is
|
||||||
# recommended.
|
# recommended.
|
||||||
chunksize (Chunk size) int 5 1 5
|
chunksize (Chunk size) int 5 1 10
|
||||||
|
|
||||||
# Dump the mapgen debug information.
|
# Dump the mapgen debug information.
|
||||||
enable_mapgen_debug_info (Mapgen debug) bool false
|
enable_mapgen_debug_info (Mapgen debug) bool false
|
||||||
@ -1926,7 +1926,7 @@ curl_file_download_timeout (cURL file download timeout) int 300000 100 214748364
|
|||||||
screen_dpi (DPI) int 72 1
|
screen_dpi (DPI) int 72 1
|
||||||
|
|
||||||
# Adjust the detected display density, used for scaling UI elements.
|
# Adjust the detected display density, used for scaling UI elements.
|
||||||
display_density_factor (Display Density Scaling Factor) float 1
|
display_density_factor (Display Density Scaling Factor) float 1 0.5 5.0
|
||||||
|
|
||||||
# Windows systems only: Start Minetest with the command line window in the background.
|
# Windows systems only: Start Minetest with the command line window in the background.
|
||||||
# Contains the same information as the file debug.txt (default name).
|
# Contains the same information as the file debug.txt (default name).
|
||||||
|
@ -75,11 +75,11 @@ Camera::Camera(MapDrawControl &draw_control, Client *client, RenderingEngine *re
|
|||||||
* (as opposed to the this local caching). This can be addressed in
|
* (as opposed to the this local caching). This can be addressed in
|
||||||
* a later release.
|
* a later release.
|
||||||
*/
|
*/
|
||||||
m_cache_fall_bobbing_amount = g_settings->getFloat("fall_bobbing_amount");
|
m_cache_fall_bobbing_amount = g_settings->getFloat("fall_bobbing_amount", 0.0f, 100.0f);
|
||||||
m_cache_view_bobbing_amount = g_settings->getFloat("view_bobbing_amount");
|
m_cache_view_bobbing_amount = g_settings->getFloat("view_bobbing_amount", 0.0f, 7.9f);
|
||||||
// 45 degrees is the lowest FOV that doesn't cause the server to treat this
|
// 45 degrees is the lowest FOV that doesn't cause the server to treat this
|
||||||
// as a zoom FOV and load world beyond the set server limits.
|
// as a zoom FOV and load world beyond the set server limits.
|
||||||
m_cache_fov = std::fmax(g_settings->getFloat("fov"), 45.0f);
|
m_cache_fov = g_settings->getFloat("fov", 45.0f, 160.0f);
|
||||||
m_arm_inertia = g_settings->getBool("arm_inertia");
|
m_arm_inertia = g_settings->getBool("arm_inertia");
|
||||||
m_nametags.clear();
|
m_nametags.clear();
|
||||||
m_show_nametag_backgrounds = g_settings->getBool("show_nametag_backgrounds");
|
m_show_nametag_backgrounds = g_settings->getBool("show_nametag_backgrounds");
|
||||||
|
@ -118,6 +118,7 @@ Client::Client(
|
|||||||
m_particle_manager(&m_env),
|
m_particle_manager(&m_env),
|
||||||
m_con(new con::Connection(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, ipv6, this)),
|
m_con(new con::Connection(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, ipv6, this)),
|
||||||
m_address_name(address_name),
|
m_address_name(address_name),
|
||||||
|
m_allow_login_or_register(allow_login_or_register),
|
||||||
m_server_ser_ver(SER_FMT_VER_INVALID),
|
m_server_ser_ver(SER_FMT_VER_INVALID),
|
||||||
m_last_chat_message_sent(time(NULL)),
|
m_last_chat_message_sent(time(NULL)),
|
||||||
m_password(password),
|
m_password(password),
|
||||||
@ -125,8 +126,7 @@ Client::Client(
|
|||||||
m_media_downloader(new ClientMediaDownloader()),
|
m_media_downloader(new ClientMediaDownloader()),
|
||||||
m_state(LC_Created),
|
m_state(LC_Created),
|
||||||
m_game_ui(game_ui),
|
m_game_ui(game_ui),
|
||||||
m_modchannel_mgr(new ModChannelMgr()),
|
m_modchannel_mgr(new ModChannelMgr())
|
||||||
m_allow_login_or_register(allow_login_or_register)
|
|
||||||
{
|
{
|
||||||
// Add local player
|
// Add local player
|
||||||
m_env.setLocalPlayer(new LocalPlayer(this, playername));
|
m_env.setLocalPlayer(new LocalPlayer(this, playername));
|
||||||
@ -424,7 +424,7 @@ void Client::step(float dtime)
|
|||||||
if(m_map_timer_and_unload_interval.step(dtime, map_timer_and_unload_dtime)) {
|
if(m_map_timer_and_unload_interval.step(dtime, map_timer_and_unload_dtime)) {
|
||||||
std::vector<v3s16> deleted_blocks;
|
std::vector<v3s16> deleted_blocks;
|
||||||
m_env.getMap().timerUpdate(map_timer_and_unload_dtime,
|
m_env.getMap().timerUpdate(map_timer_and_unload_dtime,
|
||||||
g_settings->getFloat("client_unload_unused_data_timeout"),
|
std::max(g_settings->getFloat("client_unload_unused_data_timeout"), 0.0f),
|
||||||
g_settings->getS32("client_mapblock_limit"),
|
g_settings->getS32("client_mapblock_limit"),
|
||||||
&deleted_blocks);
|
&deleted_blocks);
|
||||||
|
|
||||||
@ -1254,7 +1254,7 @@ void Client::sendChatMessage(const std::wstring &message)
|
|||||||
pkt << message;
|
pkt << message;
|
||||||
|
|
||||||
Send(&pkt);
|
Send(&pkt);
|
||||||
} else if (m_out_chat_queue.size() < (u16) max_queue_size || max_queue_size == -1) {
|
} else if (m_out_chat_queue.size() < (u16) max_queue_size || max_queue_size < 0) {
|
||||||
m_out_chat_queue.push(message);
|
m_out_chat_queue.push(message);
|
||||||
} else {
|
} else {
|
||||||
infostream << "Could not queue chat message because maximum out chat queue size ("
|
infostream << "Could not queue chat message because maximum out chat queue size ("
|
||||||
|
@ -349,7 +349,6 @@ public:
|
|||||||
u16 getProtoVersion()
|
u16 getProtoVersion()
|
||||||
{ return m_proto_ver; }
|
{ return m_proto_ver; }
|
||||||
|
|
||||||
ELoginRegister m_allow_login_or_register = ELoginRegister::Any;
|
|
||||||
bool m_simple_singleplayer_mode;
|
bool m_simple_singleplayer_mode;
|
||||||
|
|
||||||
float mediaReceiveProgress();
|
float mediaReceiveProgress();
|
||||||
@ -492,6 +491,7 @@ private:
|
|||||||
ParticleManager m_particle_manager;
|
ParticleManager m_particle_manager;
|
||||||
std::unique_ptr<con::Connection> m_con;
|
std::unique_ptr<con::Connection> m_con;
|
||||||
std::string m_address_name;
|
std::string m_address_name;
|
||||||
|
ELoginRegister m_allow_login_or_register = ELoginRegister::Any;
|
||||||
Camera *m_camera = nullptr;
|
Camera *m_camera = nullptr;
|
||||||
Minimap *m_minimap = nullptr;
|
Minimap *m_minimap = nullptr;
|
||||||
bool m_minimap_disabled_by_server = false;
|
bool m_minimap_disabled_by_server = false;
|
||||||
|
@ -366,7 +366,8 @@ void Clouds::update(const v3f &camera_p, const video::SColorf &color_diffuse)
|
|||||||
|
|
||||||
void Clouds::readSettings()
|
void Clouds::readSettings()
|
||||||
{
|
{
|
||||||
m_cloud_radius_i = g_settings->getU16("cloud_radius");
|
// Upper limit was chosen due to posible render bugs
|
||||||
|
m_cloud_radius_i = rangelim(g_settings->getU16("cloud_radius"), 1, 62);
|
||||||
m_enable_3d = g_settings->getBool("enable_3d_clouds");
|
m_enable_3d = g_settings->getBool("enable_3d_clouds");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#include "filesys.h"
|
#include "filesys.h"
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
#include "irrlicht_changes/CGUITTFont.h"
|
#include "irrlicht_changes/CGUITTFont.h"
|
||||||
|
#include "util/numeric.h" // rangelim
|
||||||
|
|
||||||
/** maximum size distance for getting a "similar" font size */
|
/** maximum size distance for getting a "similar" font size */
|
||||||
#define MAX_FONT_SIZE_OFFSET 10
|
#define MAX_FONT_SIZE_OFFSET 10
|
||||||
@ -172,9 +173,9 @@ unsigned int FontEngine::getFontSize(FontMode mode)
|
|||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
void FontEngine::readSettings()
|
void FontEngine::readSettings()
|
||||||
{
|
{
|
||||||
m_default_size[FM_Standard] = g_settings->getU16("font_size");
|
m_default_size[FM_Standard] = rangelim(g_settings->getU16("font_size"), 5, 72);
|
||||||
m_default_size[_FM_Fallback] = g_settings->getU16("font_size");
|
m_default_size[_FM_Fallback] = m_default_size[FM_Standard];
|
||||||
m_default_size[FM_Mono] = g_settings->getU16("mono_font_size");
|
m_default_size[FM_Mono] = rangelim(g_settings->getU16("mono_font_size"), 5, 72);
|
||||||
|
|
||||||
m_default_bold = g_settings->getBool("font_bold");
|
m_default_bold = g_settings->getBool("font_bold");
|
||||||
m_default_italic = g_settings->getBool("font_italic");
|
m_default_italic = g_settings->getBool("font_italic");
|
||||||
@ -217,8 +218,9 @@ gui::IGUIFont *FontEngine::initFont(const FontSpec &spec)
|
|||||||
if (spec.italic)
|
if (spec.italic)
|
||||||
setting_suffix.append("_italic");
|
setting_suffix.append("_italic");
|
||||||
|
|
||||||
u32 size = std::max<u32>(spec.size * RenderingEngine::getDisplayDensity() *
|
// Font size in pixels for FreeType
|
||||||
g_settings->getFloat("gui_scaling"), 1);
|
u32 size = rangelim(spec.size * RenderingEngine::getDisplayDensity() *
|
||||||
|
g_settings->getFloat("gui_scaling"), 1U, 500U);
|
||||||
|
|
||||||
// Constrain the font size to a certain multiple, if necessary
|
// Constrain the font size to a certain multiple, if necessary
|
||||||
u16 divisible_by = g_settings->getU16(setting_prefix + "font_size_divisible_by");
|
u16 divisible_by = g_settings->getU16(setting_prefix + "font_size_divisible_by");
|
||||||
|
@ -1932,7 +1932,7 @@ void Game::processKeyInput()
|
|||||||
}
|
}
|
||||||
} else if (wasKeyDown(KeyType::INC_VOLUME)) {
|
} else if (wasKeyDown(KeyType::INC_VOLUME)) {
|
||||||
if (g_settings->getBool("enable_sound")) {
|
if (g_settings->getBool("enable_sound")) {
|
||||||
float new_volume = rangelim(g_settings->getFloat("sound_volume") + 0.1f, 0.0f, 1.0f);
|
float new_volume = g_settings->getFloat("sound_volume", 0.0f, 0.9f) + 0.1f;
|
||||||
g_settings->setFloat("sound_volume", new_volume);
|
g_settings->setFloat("sound_volume", new_volume);
|
||||||
std::wstring msg = fwgettext("Volume changed to %d%%", myround(new_volume * 100));
|
std::wstring msg = fwgettext("Volume changed to %d%%", myround(new_volume * 100));
|
||||||
m_game_ui->showStatusText(msg);
|
m_game_ui->showStatusText(msg);
|
||||||
@ -1941,7 +1941,7 @@ void Game::processKeyInput()
|
|||||||
}
|
}
|
||||||
} else if (wasKeyDown(KeyType::DEC_VOLUME)) {
|
} else if (wasKeyDown(KeyType::DEC_VOLUME)) {
|
||||||
if (g_settings->getBool("enable_sound")) {
|
if (g_settings->getBool("enable_sound")) {
|
||||||
float new_volume = rangelim(g_settings->getFloat("sound_volume") - 0.1f, 0.0f, 1.0f);
|
float new_volume = g_settings->getFloat("sound_volume", 0.1f, 1.0f) - 0.1f;
|
||||||
g_settings->setFloat("sound_volume", new_volume);
|
g_settings->setFloat("sound_volume", new_volume);
|
||||||
std::wstring msg = fwgettext("Volume changed to %d%%", myround(new_volume * 100));
|
std::wstring msg = fwgettext("Volume changed to %d%%", myround(new_volume * 100));
|
||||||
m_game_ui->showStatusText(msg);
|
m_game_ui->showStatusText(msg);
|
||||||
@ -4082,10 +4082,10 @@ void FpsControl::reset()
|
|||||||
*/
|
*/
|
||||||
void FpsControl::limit(IrrlichtDevice *device, f32 *dtime)
|
void FpsControl::limit(IrrlichtDevice *device, f32 *dtime)
|
||||||
{
|
{
|
||||||
const u64 frametime_min = 1000000.0f / (
|
const float fps_limit = (device->isWindowFocused() && !g_menumgr.pausesGame())
|
||||||
device->isWindowFocused() && !g_menumgr.pausesGame()
|
|
||||||
? g_settings->getFloat("fps_max")
|
? g_settings->getFloat("fps_max")
|
||||||
: g_settings->getFloat("fps_max_unfocused"));
|
: g_settings->getFloat("fps_max_unfocused");
|
||||||
|
const u64 frametime_min = 1000000.0f / std::max(fps_limit, 1.0f);
|
||||||
|
|
||||||
u64 time = porting::getTimeUs();
|
u64 time = porting::getTimeUs();
|
||||||
|
|
||||||
@ -4134,9 +4134,9 @@ void Game::readSettings()
|
|||||||
m_cache_enable_joysticks = g_settings->getBool("enable_joysticks");
|
m_cache_enable_joysticks = g_settings->getBool("enable_joysticks");
|
||||||
m_cache_enable_particles = g_settings->getBool("enable_particles");
|
m_cache_enable_particles = g_settings->getBool("enable_particles");
|
||||||
m_cache_enable_fog = g_settings->getBool("enable_fog");
|
m_cache_enable_fog = g_settings->getBool("enable_fog");
|
||||||
m_cache_mouse_sensitivity = g_settings->getFloat("mouse_sensitivity");
|
m_cache_mouse_sensitivity = g_settings->getFloat("mouse_sensitivity", 0.001f, 10.0f);
|
||||||
m_cache_joystick_frustum_sensitivity = g_settings->getFloat("joystick_frustum_sensitivity");
|
m_cache_joystick_frustum_sensitivity = std::max(g_settings->getFloat("joystick_frustum_sensitivity"), 0.001f);
|
||||||
m_repeat_place_time = g_settings->getFloat("repeat_place_time");
|
m_repeat_place_time = g_settings->getFloat("repeat_place_time", 0.25f, 2.0);
|
||||||
|
|
||||||
m_cache_enable_noclip = g_settings->getBool("noclip");
|
m_cache_enable_noclip = g_settings->getBool("noclip");
|
||||||
m_cache_enable_free_move = g_settings->getBool("free_move");
|
m_cache_enable_free_move = g_settings->getBool("free_move");
|
||||||
|
@ -68,7 +68,7 @@ void GameUI::init()
|
|||||||
u16 chat_font_size = g_settings->getU16("chat_font_size");
|
u16 chat_font_size = g_settings->getU16("chat_font_size");
|
||||||
if (chat_font_size != 0) {
|
if (chat_font_size != 0) {
|
||||||
m_guitext_chat->setOverrideFont(g_fontengine->getFont(
|
m_guitext_chat->setOverrideFont(g_fontengine->getFont(
|
||||||
chat_font_size, FM_Unspecified));
|
rangelim(chat_font_size, 5, 72), FM_Unspecified));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ Hud::Hud(Client *client, LocalPlayer *player,
|
|||||||
this->player = player;
|
this->player = player;
|
||||||
this->inventory = inventory;
|
this->inventory = inventory;
|
||||||
|
|
||||||
m_hud_scaling = g_settings->getFloat("hud_scaling");
|
m_hud_scaling = g_settings->getFloat("hud_scaling", 1.0f, 20.0f);
|
||||||
m_scale_factor = m_hud_scaling * RenderingEngine::getDisplayDensity();
|
m_scale_factor = m_hud_scaling * RenderingEngine::getDisplayDensity();
|
||||||
m_hotbar_imagesize = std::floor(HOTBAR_IMAGE_SIZE *
|
m_hotbar_imagesize = std::floor(HOTBAR_IMAGE_SIZE *
|
||||||
RenderingEngine::getDisplayDensity() + 0.5f);
|
RenderingEngine::getDisplayDensity() + 0.5f);
|
||||||
|
@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#include "gettime.h"
|
#include "gettime.h"
|
||||||
#include "porting.h"
|
#include "porting.h"
|
||||||
#include "util/string.h"
|
#include "util/string.h"
|
||||||
|
#include "util/numeric.h"
|
||||||
|
|
||||||
bool JoystickButtonCmb::isTriggered(const irr::SEvent::SJoystickEvent &ev) const
|
bool JoystickButtonCmb::isTriggered(const irr::SEvent::SJoystickEvent &ev) const
|
||||||
{
|
{
|
||||||
@ -202,9 +203,9 @@ JoystickLayout create_dragonrise_gamecube_layout()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
JoystickController::JoystickController() :
|
JoystickController::JoystickController()
|
||||||
doubling_dtime(g_settings->getFloat("repeat_joystick_button_time"))
|
|
||||||
{
|
{
|
||||||
|
doubling_dtime = std::max(g_settings->getFloat("repeat_joystick_button_time"), 0.001f);
|
||||||
for (float &i : m_past_pressed_time) {
|
for (float &i : m_past_pressed_time) {
|
||||||
i = 0;
|
i = 0;
|
||||||
}
|
}
|
||||||
@ -217,19 +218,20 @@ void JoystickController::onJoystickConnect(const std::vector<irr::SJoystickInfo>
|
|||||||
s32 id = g_settings->getS32("joystick_id");
|
s32 id = g_settings->getS32("joystick_id");
|
||||||
std::string layout = g_settings->get("joystick_type");
|
std::string layout = g_settings->get("joystick_type");
|
||||||
|
|
||||||
if (id < 0 || (u16)id >= joystick_infos.size()) {
|
if (id < 0 || id >= (s32)joystick_infos.size()) {
|
||||||
// TODO: auto detection
|
// TODO: auto detection
|
||||||
id = 0;
|
id = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (id >= 0 && (u16)id < joystick_infos.size()) {
|
if (id >= 0 && id < (s32)joystick_infos.size()) {
|
||||||
if (layout.empty() || layout == "auto")
|
if (layout.empty() || layout == "auto")
|
||||||
setLayoutFromControllerName(joystick_infos[id].Name.c_str());
|
setLayoutFromControllerName(joystick_infos[id].Name.c_str());
|
||||||
else
|
else
|
||||||
setLayoutFromControllerName(layout);
|
setLayoutFromControllerName(layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_joystick_id = id;
|
// Irrlicht restriction.
|
||||||
|
m_joystick_id = rangelim(id, 0, UINT8_MAX);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JoystickController::setLayoutFromControllerName(const std::string &name)
|
void JoystickController::setLayoutFromControllerName(const std::string &name)
|
||||||
|
@ -27,7 +27,7 @@ RenderingCoreStereo::RenderingCoreStereo(
|
|||||||
IrrlichtDevice *_device, Client *_client, Hud *_hud)
|
IrrlichtDevice *_device, Client *_client, Hud *_hud)
|
||||||
: RenderingCore(_device, _client, _hud)
|
: RenderingCore(_device, _client, _hud)
|
||||||
{
|
{
|
||||||
eye_offset = BS * g_settings->getFloat("3d_paralax_strength");
|
eye_offset = BS * g_settings->getFloat("3d_paralax_strength", -0.087f, 0.087f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingCoreStereo::beforeDraw()
|
void RenderingCoreStereo::beforeDraw()
|
||||||
|
@ -86,8 +86,8 @@ RenderingEngine::RenderingEngine(IEventReceiver *receiver)
|
|||||||
|
|
||||||
// Resolution selection
|
// Resolution selection
|
||||||
bool fullscreen = g_settings->getBool("fullscreen");
|
bool fullscreen = g_settings->getBool("fullscreen");
|
||||||
u16 screen_w = g_settings->getU16("screen_w");
|
u16 screen_w = std::max<u16>(g_settings->getU16("screen_w"), 1);
|
||||||
u16 screen_h = g_settings->getU16("screen_h");
|
u16 screen_h = std::max<u16>(g_settings->getU16("screen_h"), 1);
|
||||||
|
|
||||||
// bpp, fsaa, vsync
|
// bpp, fsaa, vsync
|
||||||
bool vsync = g_settings->getBool("vsync");
|
bool vsync = g_settings->getBool("vsync");
|
||||||
@ -598,7 +598,7 @@ static float calcDisplayDensity()
|
|||||||
float RenderingEngine::getDisplayDensity()
|
float RenderingEngine::getDisplayDensity()
|
||||||
{
|
{
|
||||||
static float cached_display_density = calcDisplayDensity();
|
static float cached_display_density = calcDisplayDensity();
|
||||||
return cached_display_density * g_settings->getFloat("display_density_factor");
|
return std::max(cached_display_density * g_settings->getFloat("display_density_factor"), 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif defined(_WIN32)
|
#elif defined(_WIN32)
|
||||||
@ -626,14 +626,15 @@ float RenderingEngine::getDisplayDensity()
|
|||||||
display_density = calcDisplayDensity(get_video_driver());
|
display_density = calcDisplayDensity(get_video_driver());
|
||||||
cached = true;
|
cached = true;
|
||||||
}
|
}
|
||||||
return display_density * g_settings->getFloat("display_density_factor");
|
return std::max(display_density * g_settings->getFloat("display_density_factor"), 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
float RenderingEngine::getDisplayDensity()
|
float RenderingEngine::getDisplayDensity()
|
||||||
{
|
{
|
||||||
return (g_settings->getFloat("screen_dpi") / 96.0) * g_settings->getFloat("display_density_factor");
|
return std::max(g_settings->getFloat("screen_dpi") / 96.0f *
|
||||||
|
g_settings->getFloat("display_density_factor"), 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1619,7 +1619,7 @@ bool TextureSource::generateImagePart(std::string part_of_name,
|
|||||||
* textures that don't have the resources to offer high-res alternatives.
|
* textures that don't have the resources to offer high-res alternatives.
|
||||||
*/
|
*/
|
||||||
const bool filter = m_setting_trilinear_filter || m_setting_bilinear_filter;
|
const bool filter = m_setting_trilinear_filter || m_setting_bilinear_filter;
|
||||||
const s32 scaleto = filter ? g_settings->getS32("texture_min_size") : 1;
|
const s32 scaleto = filter ? g_settings->getU16("texture_min_size") : 1;
|
||||||
if (scaleto > 1) {
|
if (scaleto > 1) {
|
||||||
const core::dimension2d<u32> dim = baseimg->getDimension();
|
const core::dimension2d<u32> dim = baseimg->getDimension();
|
||||||
|
|
||||||
|
@ -173,7 +173,7 @@ EmergeManager::EmergeManager(Server *server, MetricsBackend *mb)
|
|||||||
g_settings->getS16NoEx("num_emerge_threads", nthreads);
|
g_settings->getS16NoEx("num_emerge_threads", nthreads);
|
||||||
// If automatic, leave a proc for the main thread and one for
|
// If automatic, leave a proc for the main thread and one for
|
||||||
// some other misc thread
|
// some other misc thread
|
||||||
if (nthreads == 0)
|
if (nthreads <= 0)
|
||||||
nthreads = Thread::getNumberOfProcessors() - 2;
|
nthreads = Thread::getNumberOfProcessors() - 2;
|
||||||
if (nthreads < 1)
|
if (nthreads < 1)
|
||||||
nthreads = 1;
|
nthreads = 1;
|
||||||
|
@ -76,9 +76,9 @@ GUIChatConsole::GUIChatConsole(
|
|||||||
m_background_color.setBlue(clamp_u8(myround(console_color.Z)));
|
m_background_color.setBlue(clamp_u8(myround(console_color.Z)));
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 chat_font_size = g_settings->getU16("chat_font_size");
|
const u16 chat_font_size = g_settings->getU16("chat_font_size");
|
||||||
m_font = g_fontengine->getFont(chat_font_size != 0 ?
|
m_font = g_fontengine->getFont(chat_font_size != 0 ?
|
||||||
chat_font_size : FONT_SIZE_UNSPECIFIED, FM_Mono);
|
rangelim(chat_font_size, 5, 72) : FONT_SIZE_UNSPECIFIED, FM_Mono);
|
||||||
|
|
||||||
if (!m_font) {
|
if (!m_font) {
|
||||||
errorstream << "GUIChatConsole: Unable to load mono font" << std::endl;
|
errorstream << "GUIChatConsole: Unable to load mono font" << std::endl;
|
||||||
|
@ -3212,8 +3212,8 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
|
|||||||
offset = v2s32(0,0);
|
offset = v2s32(0,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
double gui_scaling = g_settings->getFloat("gui_scaling");
|
const double gui_scaling = g_settings->getFloat("gui_scaling", 0.5f, 42.0f);
|
||||||
double screen_dpi = RenderingEngine::getDisplayDensity() * 96;
|
const double screen_dpi = RenderingEngine::getDisplayDensity() * 96;
|
||||||
|
|
||||||
double use_imgsize;
|
double use_imgsize;
|
||||||
if (m_lock) {
|
if (m_lock) {
|
||||||
|
@ -84,7 +84,7 @@ GUITable::GUITable(gui::IGUIEnvironment *env,
|
|||||||
#endif
|
#endif
|
||||||
core::rect<s32> relative_rect = m_scrollbar->getRelativePosition();
|
core::rect<s32> relative_rect = m_scrollbar->getRelativePosition();
|
||||||
s32 width = (relative_rect.getWidth() / (2.0 / 3.0)) * density *
|
s32 width = (relative_rect.getWidth() / (2.0 / 3.0)) * density *
|
||||||
g_settings->getFloat("gui_scaling");
|
g_settings->getFloat("gui_scaling", 0.5f, 20.0f);
|
||||||
m_scrollbar->setRelativePosition(core::rect<s32>(
|
m_scrollbar->setRelativePosition(core::rect<s32>(
|
||||||
relative_rect.LowerRightCorner.X-width,relative_rect.UpperLeftCorner.Y,
|
relative_rect.LowerRightCorner.X-width,relative_rect.UpperLeftCorner.Y,
|
||||||
relative_rect.LowerRightCorner.X,relative_rect.LowerRightCorner.Y
|
relative_rect.LowerRightCorner.X,relative_rect.LowerRightCorner.Y
|
||||||
|
@ -40,7 +40,7 @@ GUIModalMenu::GUIModalMenu(gui::IGUIEnvironment* env, gui::IGUIElement* parent,
|
|||||||
m_menumgr(menumgr),
|
m_menumgr(menumgr),
|
||||||
m_remap_dbl_click(remap_dbl_click)
|
m_remap_dbl_click(remap_dbl_click)
|
||||||
{
|
{
|
||||||
m_gui_scale = g_settings->getFloat("gui_scaling");
|
m_gui_scale = std::max(g_settings->getFloat("gui_scaling"), 0.5f);
|
||||||
#ifdef HAVE_TOUCHSCREENGUI
|
#ifdef HAVE_TOUCHSCREENGUI
|
||||||
float d = RenderingEngine::getDisplayDensity();
|
float d = RenderingEngine::getDisplayDensity();
|
||||||
m_gui_scale *= 1.1 - 0.3 * d + 0.2 * d * d;
|
m_gui_scale *= 1.1 - 0.3 * d + 0.2 * d * d;
|
||||||
|
@ -843,7 +843,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
|
|||||||
s32 dy = Y - m_pointerpos[event.TouchInput.ID].Y;
|
s32 dy = Y - m_pointerpos[event.TouchInput.ID].Y;
|
||||||
|
|
||||||
// adapt to similar behaviour as pc screen
|
// adapt to similar behaviour as pc screen
|
||||||
double d = g_settings->getFloat("mouse_sensitivity") * 3.0f;
|
const double d = g_settings->getFloat("mouse_sensitivity", 0.001f, 10.0f) * 3.0f;
|
||||||
|
|
||||||
m_camera_yaw_change -= dx * d;
|
m_camera_yaw_change -= dx * d;
|
||||||
m_camera_pitch = MYMIN(MYMAX(m_camera_pitch + (dy * d), -180), 180);
|
m_camera_pitch = MYMIN(MYMAX(m_camera_pitch + (dy * d), -180), 180);
|
||||||
|
@ -323,7 +323,7 @@ struct TimeOrderedMapBlock {
|
|||||||
/*
|
/*
|
||||||
Updates usage timers
|
Updates usage timers
|
||||||
*/
|
*/
|
||||||
void Map::timerUpdate(float dtime, float unload_timeout, u32 max_loaded_blocks,
|
void Map::timerUpdate(float dtime, float unload_timeout, s32 max_loaded_blocks,
|
||||||
std::vector<v3s16> *unloaded_blocks)
|
std::vector<v3s16> *unloaded_blocks)
|
||||||
{
|
{
|
||||||
bool save_before_unloading = maySaveBlocks();
|
bool save_before_unloading = maySaveBlocks();
|
||||||
@ -340,7 +340,7 @@ void Map::timerUpdate(float dtime, float unload_timeout, u32 max_loaded_blocks,
|
|||||||
beginSave();
|
beginSave();
|
||||||
|
|
||||||
// If there is no practical limit, we spare creation of mapblock_queue
|
// If there is no practical limit, we spare creation of mapblock_queue
|
||||||
if (max_loaded_blocks == U32_MAX) {
|
if (max_loaded_blocks < 0) {
|
||||||
for (auto §or_it : m_sectors) {
|
for (auto §or_it : m_sectors) {
|
||||||
MapSector *sector = sector_it.second;
|
MapSector *sector = sector_it.second;
|
||||||
|
|
||||||
@ -399,7 +399,7 @@ void Map::timerUpdate(float dtime, float unload_timeout, u32 max_loaded_blocks,
|
|||||||
block_count_all = mapblock_queue.size();
|
block_count_all = mapblock_queue.size();
|
||||||
|
|
||||||
// Delete old blocks, and blocks over the limit from the memory
|
// Delete old blocks, and blocks over the limit from the memory
|
||||||
while (!mapblock_queue.empty() && (mapblock_queue.size() > max_loaded_blocks
|
while (!mapblock_queue.empty() && ((s32)mapblock_queue.size() > max_loaded_blocks
|
||||||
|| mapblock_queue.top().block->getUsageTimer() > unload_timeout)) {
|
|| mapblock_queue.top().block->getUsageTimer() > unload_timeout)) {
|
||||||
TimeOrderedMapBlock b = mapblock_queue.top();
|
TimeOrderedMapBlock b = mapblock_queue.top();
|
||||||
mapblock_queue.pop();
|
mapblock_queue.pop();
|
||||||
|
@ -205,7 +205,7 @@ public:
|
|||||||
Updates usage timers and unloads unused blocks and sectors.
|
Updates usage timers and unloads unused blocks and sectors.
|
||||||
Saves modified blocks before unloading if possible.
|
Saves modified blocks before unloading if possible.
|
||||||
*/
|
*/
|
||||||
void timerUpdate(float dtime, float unload_timeout, u32 max_loaded_blocks,
|
void timerUpdate(float dtime, float unload_timeout, s32 max_loaded_blocks,
|
||||||
std::vector<v3s16> *unloaded_blocks=NULL);
|
std::vector<v3s16> *unloaded_blocks=NULL);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1038,6 +1038,8 @@ void MapgenParams::readParams(const Settings *settings)
|
|||||||
settings->getS16NoEx("chunksize", chunksize);
|
settings->getS16NoEx("chunksize", chunksize);
|
||||||
settings->getFlagStrNoEx("mg_flags", flags, flagdesc_mapgen);
|
settings->getFlagStrNoEx("mg_flags", flags, flagdesc_mapgen);
|
||||||
|
|
||||||
|
chunksize = rangelim(chunksize, 1, 10);
|
||||||
|
|
||||||
delete bparams;
|
delete bparams;
|
||||||
bparams = BiomeManager::createBiomeParams(BIOMEGEN_ORIGINAL);
|
bparams = BiomeManager::createBiomeParams(BIOMEGEN_ORIGINAL);
|
||||||
if (bparams) {
|
if (bparams) {
|
||||||
|
@ -131,6 +131,7 @@ void MapgenFractalParams::readParams(const Settings *settings)
|
|||||||
settings->getNoiseParams("mgfractal_np_cave1", np_cave1);
|
settings->getNoiseParams("mgfractal_np_cave1", np_cave1);
|
||||||
settings->getNoiseParams("mgfractal_np_cave2", np_cave2);
|
settings->getNoiseParams("mgfractal_np_cave2", np_cave2);
|
||||||
settings->getNoiseParams("mgfractal_np_dungeons", np_dungeons);
|
settings->getNoiseParams("mgfractal_np_dungeons", np_dungeons);
|
||||||
|
iterations = std::max<u16>(iterations, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -279,7 +279,7 @@ void TextureSettings::readSettings()
|
|||||||
bool smooth_lighting = g_settings->getBool("smooth_lighting");
|
bool smooth_lighting = g_settings->getBool("smooth_lighting");
|
||||||
enable_mesh_cache = g_settings->getBool("enable_mesh_cache");
|
enable_mesh_cache = g_settings->getBool("enable_mesh_cache");
|
||||||
enable_minimap = g_settings->getBool("enable_minimap");
|
enable_minimap = g_settings->getBool("enable_minimap");
|
||||||
node_texture_size = g_settings->getU16("texture_min_size");
|
node_texture_size = std::min<u16>(g_settings->getU16("texture_min_size"), 1);
|
||||||
std::string leaves_style_str = g_settings->get("leaves_style");
|
std::string leaves_style_str = g_settings->get("leaves_style");
|
||||||
std::string world_aligned_mode_str = g_settings->get("world_aligned_mode");
|
std::string world_aligned_mode_str = g_settings->get("world_aligned_mode");
|
||||||
std::string autoscale_mode_str = g_settings->get("autoscale_mode");
|
std::string autoscale_mode_str = g_settings->get("autoscale_mode");
|
||||||
|
@ -646,8 +646,8 @@ void Server::AsyncRunStep(bool initial_step)
|
|||||||
// Run Map's timers and unload unused data
|
// Run Map's timers and unload unused data
|
||||||
ScopeProfiler sp(g_profiler, "Server: map timer and unload");
|
ScopeProfiler sp(g_profiler, "Server: map timer and unload");
|
||||||
m_env->getMap().timerUpdate(map_timer_and_unload_dtime,
|
m_env->getMap().timerUpdate(map_timer_and_unload_dtime,
|
||||||
g_settings->getFloat("server_unload_unused_data_timeout"),
|
std::max(g_settings->getFloat("server_unload_unused_data_timeout"), 0.0f),
|
||||||
U32_MAX);
|
-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#include "irrlichttypes_bloated.h"
|
#include "irrlichttypes_bloated.h"
|
||||||
#include "exceptions.h"
|
#include "exceptions.h"
|
||||||
#include "threading/mutex_auto_lock.h"
|
#include "threading/mutex_auto_lock.h"
|
||||||
|
#include "util/numeric.h" // rangelim
|
||||||
#include "util/strfnd.h"
|
#include "util/strfnd.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
@ -534,6 +535,13 @@ float Settings::getFloat(const std::string &name) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
float Settings::getFloat(const std::string &name, float min, float max) const
|
||||||
|
{
|
||||||
|
float val = stof(get(name));
|
||||||
|
return rangelim(val, min, max);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
u64 Settings::getU64(const std::string &name) const
|
u64 Settings::getU64(const std::string &name) const
|
||||||
{
|
{
|
||||||
std::string s = get(name);
|
std::string s = get(name);
|
||||||
|
@ -164,6 +164,7 @@ public:
|
|||||||
s32 getS32(const std::string &name) const;
|
s32 getS32(const std::string &name) const;
|
||||||
u64 getU64(const std::string &name) const;
|
u64 getU64(const std::string &name) const;
|
||||||
float getFloat(const std::string &name) const;
|
float getFloat(const std::string &name) const;
|
||||||
|
float getFloat(const std::string &name, float min, float max) const;
|
||||||
v2f getV2F(const std::string &name) const;
|
v2f getV2F(const std::string &name) const;
|
||||||
v3f getV3F(const std::string &name) const;
|
v3f getV3F(const std::string &name) const;
|
||||||
u32 getFlagStr(const std::string &name, const FlagDesc *flagdesc,
|
u32 getFlagStr(const std::string &name, const FlagDesc *flagdesc,
|
||||||
|
Loading…
Reference in New Issue
Block a user