diff --git a/games/Repixture b/games/Repixture index 473995892..0187aa404 160000 --- a/games/Repixture +++ b/games/Repixture @@ -1 +1 @@ -Subproject commit 4739958926134d25589a3faab800d7c7af4506e0 +Subproject commit 0187aa404012054b8bac8d85c93cb2259e9d40c6 diff --git a/games/default b/games/default index b1cc23336..08e34d79a 160000 --- a/games/default +++ b/games/default @@ -1 +1 @@ -Subproject commit b1cc23336d15dcae7335294b6bb17b015cc77495 +Subproject commit 08e34d79a3dcbdd98b8de35f290c8808461f091f diff --git a/src/client/client.cpp b/src/client/client.cpp index dba765c6d..4224f55a3 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -182,6 +182,7 @@ Client::Client( control.farmesh_quality = g_settings->getU16("farmesh_quality"); control.farmesh_quality_pow = log(control.farmesh_quality) / log(2); control.farmesh_stable = g_settings->getU16("farmesh_stable"); + control.farmesh_all_changed = g_settings->getPos("farmesh_all_changed"); } void Client::migrateModStorage() diff --git a/src/client/clientmap.cpp b/src/client/clientmap.cpp index 2a76ddcf7..7e214d069 100644 --- a/src/client/clientmap.cpp +++ b/src/client/clientmap.cpp @@ -21,7 +21,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "clientmap.h" #include "client.h" -#include "client/fm_far_calc.h" #include "client/mesh.h" #include "mapblock_mesh.h" #include diff --git a/src/client/clientmap.h b/src/client/clientmap.h index 071825611..6b2cbffc5 100644 --- a/src/client/clientmap.h +++ b/src/client/clientmap.h @@ -39,6 +39,7 @@ struct MapDrawControl int32_t farmesh{30000}; uint8_t farmesh_quality{}; bool farmesh_stable{}; + pos_t farmesh_all_changed{}; int32_t lodmesh{4}; int cell_size{1}; uint8_t cell_size_pow{}; diff --git a/src/client/fm_client.cpp b/src/client/fm_client.cpp index 3425a51fc..75b61ca8d 100644 --- a/src/client/fm_client.cpp +++ b/src/client/fm_client.cpp @@ -252,7 +252,7 @@ void Client::handleCommand_BlockDataFm(NetworkPacket *pkt) } else { static thread_local const auto farmesh_server = g_settings->getU16("farmesh_server"); - if (!farmesh_server){ + if (!farmesh_server) { return; } @@ -341,7 +341,7 @@ void Client::handleCommand_BlockDataFm(NetworkPacket *pkt) void Client::sendDrawControl() { - MSGPACK_PACKET_INIT((int)TOSERVER_DRAWCONTROL, 3); + MSGPACK_PACKET_INIT((int)TOSERVER_DRAWCONTROL, 4); const auto &draw_control = m_env.getClientMap().getControl(); PACK(TOSERVER_DRAWCONTROL_WANTED_RANGE, (int32_t)draw_control.wanted_range); //PACK(TOSERVER_DRAWCONTROL_RANGE_ALL, draw_control.range_all); @@ -351,7 +351,7 @@ void Client::sendDrawControl() //PACK(TOSERVER_DRAWCONTROL_BLOCK_OVERFLOW, false /*draw_control.block_overflow*/); //PACK(TOSERVER_DRAWCONTROL_LODMESH, draw_control.lodmesh); PACK(TOSERVER_DRAWCONTROL_FARMESH_QUALITY, draw_control.farmesh_quality); - + PACK(TOSERVER_DRAWCONTROL_FARMESH_ALL_CHANGED, draw_control.farmesh_all_changed); NetworkPacket pkt(TOSERVER_DRAWCONTROL, buffer.size()); pkt.putLongString({buffer.data(), buffer.size()}); diff --git a/src/clientiface.h b/src/clientiface.h index 2617ee04e..87c0144fd 100644 --- a/src/clientiface.h +++ b/src/clientiface.h @@ -256,6 +256,7 @@ class RemoteClient std::atomic_bool range_all{}; std::atomic_int farmesh{}; uint8_t farmesh_quality{}; + pos_t farmesh_all_changed{}; bool have_farmesh_quality{}; float fov{72}; //bool block_overflow; diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 5a9b7d992..aadba6831 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -184,7 +184,7 @@ void fm_set_default_settings(Settings *settings) { settings->setDefault("farmesh_quality", slow ? "1" : "2"); //depends on client_mesh_chunk settings->setDefault("farmesh_stable", "0"); settings->setDefault("farmesh_server", "1"); - settings->setDefault("farmesh_all_changed", "10000"); + settings->setDefault("farmesh_all_changed", slow ? "1000" : "10000"); settings->setDefault("headless_optimize", "false"); //settings->setDefault("node_highlighting", "halo"); diff --git a/src/fm_clientiface.cpp b/src/fm_clientiface.cpp index df1623ca9..22b9936bc 100644 --- a/src/fm_clientiface.cpp +++ b/src/fm_clientiface.cpp @@ -1,6 +1,6 @@ #include "fm_far_calc.h" #include "constants.h" -#include "server/clientiface.h" +#include "clientiface.h" #include "irr_v3d.h" #include "irrlichttypes.h" #include "map.h" @@ -622,12 +622,12 @@ uint32_t RemoteClient::SendFarBlocks() const auto cell_size = 1; // FMTODO from remoteclient const auto cell_size_pow = log(cell_size) / log(2); - - thread_local static const s16 farmesh_all_changed = + thread_local static const s16 setting_farmesh_all_changed = g_settings->getU32("farmesh_all_changed"); - + const auto &use_farmesh_all_changed = + std::min(setting_farmesh_all_changed, farmesh_all_changed); runFarAll(cbpos, cell_size_pow, farmesh_quality, false, - [this, &ordered, &cbpos]( + [this, &ordered, &cbpos, &use_farmesh_all_changed]( const v3bpos_t &bpos, const bpos_t &size) -> bool { if (!size) { return false; @@ -635,7 +635,7 @@ uint32_t RemoteClient::SendFarBlocks() // TODO: use block center const auto bdist = radius_box(cbpos, bpos); - if (bdist << MAP_BLOCKP > farmesh_all_changed) { + if (bdist << MAP_BLOCKP > use_farmesh_all_changed) { return false; } @@ -647,7 +647,7 @@ uint32_t RemoteClient::SendFarBlocks() if (sent_ts < 0) { // <= return false; } - const auto dbase = GetFarDatabase(m_env->m_map->m_db.dbase, + const auto dbase = GetFarDatabase(m_env->m_map->dbase, m_env->m_server->far_dbases, m_env->m_map->m_savedir, step); if (!dbase) { @@ -655,7 +655,7 @@ uint32_t RemoteClient::SendFarBlocks() return false; } const auto block = - loadBlockNoStore(m_env->m_map.get(), dbase, bpos); + loadBlockNoStore(m_env->m_map, dbase, bpos); if (!block) { sent_ts = -1; return false; diff --git a/src/fm_server.cpp b/src/fm_server.cpp index 69a9c3706..b6a4b0295 100644 --- a/src/fm_server.cpp +++ b/src/fm_server.cpp @@ -30,6 +30,8 @@ along with Freeminer. If not, see . #include "database/database.h" #include "emerge.h" #include "filesys.h" +#include "irrlichttypes.h" +#include "porting.h" #include "fm_world_merge.h" #include "irrTypes.h" #include "irr_v3d.h" @@ -540,7 +542,7 @@ void Server::handleCommand_Drawcontrol(NetworkPacket *pkt) }*/ auto client = getClientNoEx(peer_id, CS_Created); - if (!client){ + if (!client) { return; } { @@ -558,6 +560,10 @@ void Server::handleCommand_Drawcontrol(NetworkPacket *pkt) packet[TOSERVER_DRAWCONTROL_FARMESH_QUALITY].as(); client->have_farmesh_quality = true; } + if (packet.contains(TOSERVER_DRAWCONTROL_FARMESH_ALL_CHANGED)) { + client->farmesh_all_changed = + packet[TOSERVER_DRAWCONTROL_FARMESH_ALL_CHANGED].as(); + } } //client->block_overflow = packet[TOSERVER_DRAWCONTROL_BLOCK_OVERFLOW].as(); diff --git a/src/network/fm_networkprotocol.h b/src/network/fm_networkprotocol.h index bbd9641b2..de84d6794 100644 --- a/src/network/fm_networkprotocol.h +++ b/src/network/fm_networkprotocol.h @@ -499,4 +499,5 @@ enum TOSERVER_DRAWCONTROL_BLOCK_OVERFLOW, // not used TOSERVER_DRAWCONTROL_LODMESH, TOSERVER_DRAWCONTROL_FARMESH_QUALITY, + TOSERVER_DRAWCONTROL_FARMESH_ALL_CHANGED, };