From c901c42361141a130e8bc8acbbe54283f9b86a7e Mon Sep 17 00:00:00 2001 From: T1ti <40864460+T1ti@users.noreply.github.com> Date: Wed, 14 Aug 2024 06:41:17 +0200 Subject: [PATCH] - more reloadable settings - implement loading radius, default to 2 https://github.com/wowdev/noggit3/commit/8051842364f2ef5a1a99c06c15c49ffb5c486aca --- src/noggit/MapView.cpp | 9 +++- src/noggit/map_index.cpp | 20 ++------- src/noggit/map_index.hpp | 20 +++++++-- src/noggit/rendering/WorldRender.cpp | 1 - src/noggit/rendering/WorldRender.hpp | 2 + .../windows/settingsPanel/SettingsPanel.cpp | 21 ++++++++- .../ui/windows/settingsPanel/SettingsPanel.ui | 43 +++++++++++++++++-- 7 files changed, 90 insertions(+), 26 deletions(-) diff --git a/src/noggit/MapView.cpp b/src/noggit/MapView.cpp index 9df76321..0423b8e8 100755 --- a/src/noggit/MapView.cpp +++ b/src/noggit/MapView.cpp @@ -6014,12 +6014,19 @@ void MapView::onSettingsSave() params->wireframe_color = wireframe_color; _world->renderer()->markTerrainParamsUniformBlockDirty(); + + _world->renderer()->setViewDistance(_settings->value("view_distance", 1000.f).toFloat()); + + _world.get()->mapIndex.setLoadingRadius(_settings->value("loading_radius", 2).toInt()); + _world.get()->mapIndex.setUnloadDistance(_settings->value("unload_dist", 5).toInt()); + _world.get()->mapIndex.setUnloadInterval(_settings->value("unload_interval", 30).toInt()); + } void MapView::ShowContextMenu(QPoint pos) { // QApplication::startDragDistance() is 10 - auto mouse_moved = QApplication::startDragDistance() / 3 < (_right_click_pos - pos).manhattanLength(); + auto mouse_moved = (QApplication::startDragDistance() / 5) < (_right_click_pos - pos).manhattanLength(); // don't show context menu if dragging mouse if (mouse_moved || ImGuizmo::IsUsing()) diff --git a/src/noggit/map_index.cpp b/src/noggit/map_index.cpp index b9526209..cfdbe92f 100755 --- a/src/noggit/map_index.cpp +++ b/src/noggit/map_index.cpp @@ -32,7 +32,6 @@ MapIndex::MapIndex (const std::string &pBasename, int map_id, World* world, , _last_unload_time((clock() / CLOCKS_PER_SEC)) // to not try to unload right away , mBigAlpha(false) , mHasAGlobalWMO(false) - , noadt(false) , changed(false) , _sort_models_by_size_class(false) , highestGUID(0) @@ -41,8 +40,9 @@ MapIndex::MapIndex (const std::string &pBasename, int map_id, World* world, { QSettings settings; - _unload_interval = settings.value("unload_interval", 5).toInt(); + _unload_interval = settings.value("unload_interval", 30).toInt(); _unload_dist = settings.value("unload_dist", 5).toInt(); + _loading_radius = settings.value("loading_radius", 2).toInt(); if (create_empty) { @@ -277,17 +277,15 @@ void MapIndex::enterTile(const TileIndex& tile) { if (!hasTile(tile)) { - noadt = true; return; } - noadt = false; int cx = static_cast(tile.x); int cz = static_cast(tile.z); - for (int pz = std::max(cz - 1, 0); pz < std::min(cz + 2, 63); ++pz) + for (int pz = std::max(cz - _loading_radius, 0); pz <= std::min(cz + _loading_radius, 63); ++pz) { - for (int px = std::max(cx - 1, 0); px < std::min(cx + 2, 63); ++px) + for (int px = std::max(cx - _loading_radius, 0); px <= std::min(cx + _loading_radius, 63); ++px) { loadTile(TileIndex(px, pz)); } @@ -552,16 +550,6 @@ bool MapIndex::tileLoaded(const TileIndex& tile) const return hasTile(tile) && mTiles[tile.z][tile.x].tile && mTiles[tile.z][tile.x].tile->finishedLoading(); } -bool MapIndex::hasAdt() -{ - return noadt; -} - -void MapIndex::setAdt(bool value) -{ - noadt = value; -} - MapTile* MapIndex::getTile(const TileIndex& tile) const { return (tile.is_valid() ? mTiles[tile.z][tile.x].tile.get() : nullptr); diff --git a/src/noggit/map_index.hpp b/src/noggit/map_index.hpp index 5f9f1181..a8d613c6 100755 --- a/src/noggit/map_index.hpp +++ b/src/noggit/map_index.hpp @@ -218,9 +218,6 @@ public: bool tileAwaitingLoading(const TileIndex& tile) const; bool tileLoaded(const TileIndex& tile) const; - bool hasAdt(); - void setAdt(bool value); - void save(); void saveall (World*); @@ -275,17 +272,32 @@ public: std::unordered_map> _minimap_md5translate; std::string globalWMOName; ENTRY_MODF wmoEntry; +public: + // reloadable settings + void setLoadingRadius(int value) + { + if (value < _unload_dist) + _loading_radius = value; + } + + void setUnloadDistance(int value) + { + if (value > _loading_radius) + _unload_dist = value; + } + + void setUnloadInterval(int value) { _unload_interval = value; }; private: int _last_unload_time; int _unload_interval; int _unload_dist; + int _loading_radius; unsigned _n_loaded_tiles = 0; // to be loaded, not necessarily already loaded int _n_existing_tiles = -1; // Is the WDT telling us to use a different alphamap structure. bool mBigAlpha; bool mHasAGlobalWMO; - bool noadt; bool changed; bool _sort_models_by_size_class; diff --git a/src/noggit/rendering/WorldRender.cpp b/src/noggit/rendering/WorldRender.cpp index b483813b..f3f8ac3a 100755 --- a/src/noggit/rendering/WorldRender.cpp +++ b/src/noggit/rendering/WorldRender.cpp @@ -1078,7 +1078,6 @@ void WorldRender::draw (glm::mat4x4 const& model_view void WorldRender::upload() { ZoneScoped; - _world->mapIndex.setAdt(false); if (_world->mapIndex.hasAGlobalWMO()) { diff --git a/src/noggit/rendering/WorldRender.hpp b/src/noggit/rendering/WorldRender.hpp index 9ae7fa45..ae53918d 100755 --- a/src/noggit/rendering/WorldRender.hpp +++ b/src/noggit/rendering/WorldRender.hpp @@ -84,6 +84,8 @@ namespace Noggit::Rendering [[nodiscard]] std::unique_ptr& skies() { return _skies; }; + void setViewDistance(float distance) { _view_distance = distance; }; + private: void drawMinimap ( MapTile *tile diff --git a/src/noggit/ui/windows/settingsPanel/SettingsPanel.cpp b/src/noggit/ui/windows/settingsPanel/SettingsPanel.cpp index b1b5de29..644b199d 100755 --- a/src/noggit/ui/windows/settingsPanel/SettingsPanel.cpp +++ b/src/noggit/ui/windows/settingsPanel/SettingsPanel.cpp @@ -147,6 +147,20 @@ namespace Noggit QString(tr("FPS limitation, current : %1")).arg(value)); }); + connect(ui->_adt_unload_dist, qOverload(&QSpinBox::valueChanged) + , [&](int v) + { + QSignalBlocker const blocker(ui->_adt_loading_radius); + ui->_adt_loading_radius->setMaximum(v - 1); + }); + + connect(ui->_adt_loading_radius, qOverload(&QSpinBox::valueChanged) + , [&](int v) + { + QSignalBlocker const blocker(ui->_adt_unload_dist); + ui->_adt_unload_dist->setMinimum(v + 1); + }); + ui->_wireframe_color->setColor(Qt::white); connect(ui->saveButton, &QPushButton::clicked, [this] @@ -174,6 +188,9 @@ namespace Noggit // load the values in the fields discard_changes(); + + // ui->_adt_loading_radius->setMaximum(ui->_adt_unload_dist->value() - 1); + // ui->_adt_unload_dist->setMinimum(ui->_adt_loading_radius->value() + 1); } void settings::discard_changes() @@ -192,7 +209,8 @@ namespace Noggit ui->_background_fps_limit_cb->setChecked(_settings->value("background_fps_limit", true).toBool()); ui->_directional_light_cb->setChecked(_settings->value("directional_lightning", true).toBool()); ui->_adt_unload_dist->setValue(_settings->value("unload_dist", 5).toInt()); - ui->_adt_unload_check_interval->setValue(_settings->value("unload_interval", 5).toInt()); + ui->_adt_unload_check_interval->setValue(_settings->value("unload_interval", 30).toInt()); + ui->_adt_loading_radius->setValue(_settings->value("loading_radius", 2).toInt()); ui->_uid_cb->setChecked(_settings->value("uid_startup_check", true).toBool()); ui->_load_fav_cb->setChecked(_settings->value("auto_load_fav_project", true).toBool()); ui->_systemWindowFrame->setChecked(_settings->value("systemWindowFrame", true).toBool()); @@ -279,6 +297,7 @@ namespace Noggit _settings->setValue("directional_lightning", ui->_directional_light_cb->isChecked()); _settings->setValue("unload_dist", ui->_adt_unload_dist->value()); _settings->setValue("unload_interval", ui->_adt_unload_check_interval->value()); + _settings->setValue("loading_radius", ui->_adt_loading_radius->value()); _settings->setValue("uid_startup_check", ui->_uid_cb->isChecked()); _settings->setValue("auto_load_fav_project", ui->_load_fav_cb->isChecked()); _settings->setValue("additional_file_loading_log", ui->_additional_file_loading_log->isChecked()); diff --git a/src/noggit/ui/windows/settingsPanel/SettingsPanel.ui b/src/noggit/ui/windows/settingsPanel/SettingsPanel.ui index e1079440..0e739b4e 100755 --- a/src/noggit/ui/windows/settingsPanel/SettingsPanel.ui +++ b/src/noggit/ui/windows/settingsPanel/SettingsPanel.ui @@ -414,13 +414,13 @@ - 1 + 2 64 - 2 + 5 @@ -447,6 +447,43 @@ + + + + + + Adt loading radius + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 1 + + + 64 + + + 1 + + + + + @@ -526,7 +563,7 @@ - 180 + 240