From b72fc398f7c4afb2ab937b730740537f6bc3c388 Mon Sep 17 00:00:00 2001 From: T1ti <40864460+T1ti@users.noreply.github.com> Date: Sat, 2 Nov 2024 01:43:04 +0100 Subject: [PATCH] move modern_feature to be accessed from memory instead of qsetting --- src/noggit/MapView.cpp | 3 + src/noggit/TextureManager.cpp | 3 +- src/noggit/WMOInstance.cpp | 12 +- src/noggit/World.cpp | 106 +++++++++--------- .../NoggitApplicationConfiguration.hpp | 3 + .../NoggitApplicationConfigurationReader.cpp | 11 +- src/noggit/application/NoggitApplication.hpp | 2 + src/noggit/project/ApplicationProject.h | 13 ++- src/noggit/rendering/TileRender.cpp | 5 +- src/noggit/rendering/WMOGroupRender.cpp | 5 +- src/noggit/rendering/WorldRender.cpp | 5 +- src/noggit/tools/MinimapTool.cpp | 7 +- src/noggit/ui/MinimapCreator.cpp | 7 +- src/noggit/ui/RotationEditor.cpp | 4 +- src/noggit/ui/TexturingGUI.cpp | 3 +- src/noggit/ui/texturing_tool.cpp | 12 +- .../Ui/MapCreationWizard.hpp | 1 + .../World/Object/ObjectInstanceSetScale.cpp | 13 ++- .../ui/tools/ViewportGizmo/ViewportGizmo.cpp | 10 +- .../ui/windows/noggitWindow/NoggitWindow.hpp | 4 +- 20 files changed, 128 insertions(+), 101 deletions(-) diff --git a/src/noggit/MapView.cpp b/src/noggit/MapView.cpp index ef91edaa..f14174fb 100644 --- a/src/noggit/MapView.cpp +++ b/src/noggit/MapView.cpp @@ -4301,6 +4301,9 @@ void MapView::onSettingsSave() // force updating rendering _camera_moved_since_last_draw = true; + auto app_config = Noggit::Application::NoggitApplication::instance()->getConfiguration(); + app_config->modern_features = _settings->value("modern_features", false).toBool(); + } void MapView::ShowContextMenu(QPoint pos) diff --git a/src/noggit/TextureManager.cpp b/src/noggit/TextureManager.cpp index 1d897cee..e94d3809 100755 --- a/src/noggit/TextureManager.cpp +++ b/src/noggit/TextureManager.cpp @@ -427,8 +427,7 @@ void blp_texture::finishLoading() _is_specular = true; } - QSettings settings; - bool modern_features = settings.value("modern_features", false).toBool(); + bool modern_features = Noggit::Application::NoggitApplication::instance()->getConfiguration()->modern_features; // Only load _h in map view when modern features are enabled if(_context == Noggit::NoggitRenderContext::MAP_VIEW && modern_features) diff --git a/src/noggit/WMOInstance.cpp b/src/noggit/WMOInstance.cpp index 15853590..b9aa11c2 100755 --- a/src/noggit/WMOInstance.cpp +++ b/src/noggit/WMOInstance.cpp @@ -10,11 +10,10 @@ #include #include #include +#include #include -#include - WMOInstance::WMOInstance(BlizzardArchive::Listfile::FileKey const& file_key, ENTRY_MODF const* d, Noggit::NoggitRenderContext context) : SceneObject(SceneObjectTypes::eWMO, context) , wmo(file_key, context) @@ -27,13 +26,14 @@ WMOInstance::WMOInstance(BlizzardArchive::Listfile::FileKey const& file_key, ENT uid = d->uniqueID; - QSettings settings; - bool modern_features = settings.value("modern_features", false).toBool(); + bool modern_features = Noggit::Application::NoggitApplication::instance()->getConfiguration()->modern_features; - if (modern_features) { + if (modern_features) + { scale = static_cast(d->scale) / 1024.0f; } - else { + else + { scale = 1.0f; } diff --git a/src/noggit/World.cpp b/src/noggit/World.cpp index 2033956a..6a119e68 100644 --- a/src/noggit/World.cpp +++ b/src/noggit/World.cpp @@ -778,8 +778,7 @@ void World::scale_selected_models(float v, object_scaling_type type) if (!_selected_model_count) return; - QSettings settings; - bool modern_features = settings.value("modern_features", false).toBool(); + bool modern_features = Noggit::Application::NoggitApplication::instance()->getConfiguration()->modern_features; for (auto& entry : _current_selection) { @@ -790,69 +789,70 @@ void World::scale_selected_models(float v, object_scaling_type type) if (obj->which() != eMODEL) { // If we are not using modern features, we don't want to scale WMOs - if(!modern_features) - continue; + if(!modern_features) + continue; - WMOInstance* wi = static_cast(obj); + WMOInstance* wi = static_cast(obj); - NOGGIT_CUR_ACTION->registerObjectTransformed(wi); + NOGGIT_CUR_ACTION->registerObjectTransformed(wi); - float scale = wi->scale; + float scale = wi->scale; - switch (type) - { - case World::object_scaling_type::set: - scale = v; - break; - case World::object_scaling_type::add: - scale += v; - break; - case World::object_scaling_type::mult: - scale *= v; - break; - } + switch (type) + { + case World::object_scaling_type::set: + scale = v; + break; + case World::object_scaling_type::add: + scale += v; + break; + case World::object_scaling_type::mult: + scale *= v; + break; + } - // if the change is too small, do nothing - if (std::abs(scale - wi->scale) < ModelInstance::min_scale()) - { - continue; - } + // if the change is too small, do nothing + if (std::abs(scale - wi->scale) < ModelInstance::min_scale()) + { + continue; + } - updateTilesWMO(wi, model_update::remove); - wi->scale = std::min(ModelInstance::max_scale(), std::max(ModelInstance::min_scale(), scale)); - wi->recalcExtents(); - updateTilesWMO(wi, model_update::add); + updateTilesWMO(wi, model_update::remove); + wi->scale = std::min(ModelInstance::max_scale(), std::max(ModelInstance::min_scale(), scale)); + wi->recalcExtents(); + updateTilesWMO(wi, model_update::add); } - else { - ModelInstance* mi = static_cast(obj); + else + { + ModelInstance* mi = static_cast(obj); - NOGGIT_CUR_ACTION->registerObjectTransformed(mi); + NOGGIT_CUR_ACTION->registerObjectTransformed(mi); - float scale = mi->scale; + float scale = mi->scale; - switch (type) - { - case World::object_scaling_type::set: - scale = v; - break; - case World::object_scaling_type::add: - scale += v; - break; - case World::object_scaling_type::mult: - scale *= v; - break; - } + switch (type) + { + case World::object_scaling_type::set: + scale = v; + break; + case World::object_scaling_type::add: + scale += v; + break; + case World::object_scaling_type::mult: + scale *= v; + break; + } - // if the change is too small, do nothing - if (std::abs(scale - mi->scale) < ModelInstance::min_scale()) - { - continue; - } + // if the change is too small, do nothing + if (std::abs(scale - mi->scale) < ModelInstance::min_scale()) + { + continue; + } - updateTilesModel(mi, model_update::remove); - mi->scale = std::min(ModelInstance::max_scale(), std::max(ModelInstance::min_scale(), scale)); - mi->recalcExtents(); - updateTilesModel(mi, model_update::add); + updateTilesModel(mi, model_update::remove); + mi->scale = std::min(ModelInstance::max_scale(), std::max(ModelInstance::min_scale(), scale)); + mi->recalcExtents(); + updateTilesModel(mi, model_update::add); } } } diff --git a/src/noggit/application/Configuration/NoggitApplicationConfiguration.hpp b/src/noggit/application/Configuration/NoggitApplicationConfiguration.hpp index 2796b43f..51df01fc 100755 --- a/src/noggit/application/Configuration/NoggitApplicationConfiguration.hpp +++ b/src/noggit/application/Configuration/NoggitApplicationConfiguration.hpp @@ -30,6 +30,9 @@ namespace Noggit::Application { std::string ApplicationNoggitDefinitionsPath = "noggit-definitions"; // default for compatibility with older config files NoggitApplicationGraphicsConfiguration GraphicsConfiguration; NoggitApplicationLoggingConfiguration LoggingConfiguration; + + // TODO move setting panel variables here + bool modern_features = false; }; } diff --git a/src/noggit/application/Configuration/NoggitApplicationConfigurationReader.cpp b/src/noggit/application/Configuration/NoggitApplicationConfigurationReader.cpp index 484a2bfb..30704fa1 100755 --- a/src/noggit/application/Configuration/NoggitApplicationConfigurationReader.cpp +++ b/src/noggit/application/Configuration/NoggitApplicationConfigurationReader.cpp @@ -1,17 +1,26 @@ #include #include #include +#include namespace Noggit::Application { NoggitApplicationConfiguration NoggitApplicationConfigurationReader::ReadConfigurationState(QFile& inputFile) { + auto noggitApplicationConfiguration = NoggitApplicationConfiguration(); + + // TODO move qsetting stuff to config file + QSettings settings; + noggitApplicationConfiguration.modern_features = settings.value("modern_features", false).toBool(); + + settings.sync(); + // + inputFile.open(QIODevice::ReadOnly); auto document = QJsonDocument().fromJson(inputFile.readAll()); auto root = document.object(); - auto noggitApplicationConfiguration = NoggitApplicationConfiguration(); if (root.contains("Noggit") && root["Noggit"].isObject()) { auto noggitConfiguration = root["Noggit"].toObject(); diff --git a/src/noggit/application/NoggitApplication.hpp b/src/noggit/application/NoggitApplication.hpp index 00938795..9756715a 100755 --- a/src/noggit/application/NoggitApplication.hpp +++ b/src/noggit/application/NoggitApplication.hpp @@ -3,6 +3,8 @@ #ifndef NOGGIT_APPLICATION_HPP #define NOGGIT_APPLICATION_HPP +#pragma once + #include #include #include diff --git a/src/noggit/project/ApplicationProject.h b/src/noggit/project/ApplicationProject.h index 71b930dc..30d3fb2f 100755 --- a/src/noggit/project/ApplicationProject.h +++ b/src/noggit/project/ApplicationProject.h @@ -7,6 +7,7 @@ #include #include #include +// #include #include #include #include @@ -350,16 +351,18 @@ namespace Noggit::Project return {}; } - QSettings settings; - bool modern_features = settings.value("modern_features", false).toBool(); + + // QSettings settings; + // bool modern_features = settings.value("modern_features", false).toBool(); + bool modern_features = _configuration->modern_features; if (modern_features) { - Log << "Modern Features Enabled" << std::endl; - loadExtraData(project.value()); + Log << "Modern Features Enabled" << std::endl; + loadExtraData(project.value()); } else { - Log << "Modern Features Disabled" << std::endl; + Log << "Modern Features Disabled" << std::endl; } return std::make_shared(project.value()); } diff --git a/src/noggit/rendering/TileRender.cpp b/src/noggit/rendering/TileRender.cpp index fd565122..0a7c7493 100755 --- a/src/noggit/rendering/TileRender.cpp +++ b/src/noggit/rendering/TileRender.cpp @@ -5,7 +5,7 @@ #include #include #include -#include +#include using namespace Noggit::Rendering; @@ -535,8 +535,7 @@ bool TileRender::fillSamplers(MapChunk* chunk, unsigned chunk_index, unsigned i auto& chunk_textures = (*chunk->texture_set->getTextures()); - QSettings settings; - bool modern_features = settings.value("modern_features", false).toBool(); + bool modern_features = Noggit::Application::NoggitApplication::instance()->getConfiguration()->modern_features; for (int k = 0; k < chunk->texture_set->num(); ++k) { diff --git a/src/noggit/rendering/WMOGroupRender.cpp b/src/noggit/rendering/WMOGroupRender.cpp index 6ef872ef..22001ca2 100755 --- a/src/noggit/rendering/WMOGroupRender.cpp +++ b/src/noggit/rendering/WMOGroupRender.cpp @@ -3,7 +3,7 @@ #include "WMOGroupRender.hpp" #include #include // LogDebug -#include +#include using namespace Noggit::Rendering; @@ -67,8 +67,7 @@ void WMOGroupRender::upload() _draw_calls.clear(); WMOCombinedDrawCall* draw_call = nullptr; std::vector _used_batches; - QSettings settings; - bool modern_features = settings.value("modern_features", false).toBool(); + bool modern_features = Noggit::Application::NoggitApplication::instance()->getConfiguration()->modern_features; batch_counter = 0; for (auto& batch : _wmo_group->_batches) diff --git a/src/noggit/rendering/WorldRender.cpp b/src/noggit/rendering/WorldRender.cpp index 43d3ff47..46c82ebc 100755 --- a/src/noggit/rendering/WorldRender.cpp +++ b/src/noggit/rendering/WorldRender.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -98,8 +99,7 @@ void WorldRender::draw (glm::mat4x4 const& model_view _world->_n_loaded_tiles = 0; unsigned tile_counter = 0; - QSettings settings; - bool modern_features = settings.value("modern_features", false).toBool(); + bool modern_features = Noggit::Application::NoggitApplication::instance()->getConfiguration()->modern_features; for (MapTile* tile : _world->mapIndex.loaded_tiles()) { @@ -2015,7 +2015,6 @@ bool WorldRender::saveMinimap(TileIndex const& tile_idx, MinimapRenderSettings* image = image.convertToFormat(QImage::Format_RGBA8888); - QSettings app_settings; QString str = QString(Noggit::Project::CurrentProject::get()->ProjectPath.c_str()); if (!(str.endsWith('\\') || str.endsWith('/'))) { diff --git a/src/noggit/tools/MinimapTool.cpp b/src/noggit/tools/MinimapTool.cpp index 91b5078b..b53a5df0 100644 --- a/src/noggit/tools/MinimapTool.cpp +++ b/src/noggit/tools/MinimapTool.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -194,9 +195,9 @@ namespace Noggit if (!saving_minimap) return false; - QSettings noggitSettings; - bool modern_features = noggitSettings.value("modern_features", false).toBool(); - if (modern_features && (settings->export_mode == MinimapGenMode::LOD_MAPTEXTURES || settings->export_mode == MinimapGenMode::LOD_MAPTEXTURES_N)) { + bool modern_features = Noggit::Application::NoggitApplication::instance()->getConfiguration()->modern_features; + if (modern_features && (settings->export_mode == MinimapGenMode::LOD_MAPTEXTURES || settings->export_mode == MinimapGenMode::LOD_MAPTEXTURES_N)) + { settings->draw_m2 = false; settings->draw_wmo = false; settings->draw_water = false; diff --git a/src/noggit/ui/MinimapCreator.cpp b/src/noggit/ui/MinimapCreator.cpp index f8d01291..66936375 100755 --- a/src/noggit/ui/MinimapCreator.cpp +++ b/src/noggit/ui/MinimapCreator.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include @@ -74,9 +75,9 @@ namespace Noggit generate_layout->addRow (sel_adts_btn); generate_layout->addRow (all_adts_btn); - QSettings settings; - bool modern_features = settings.value("modern_features", false).toBool(); - if (modern_features) { + bool modern_features = Noggit::Application::NoggitApplication::instance()->getConfiguration()->modern_features; + if (modern_features) + { generate_layout->addRow (maptexture_btn); maptexture_btn->setVisible(true); generate_layout->addRow(maptexture_n_btn); diff --git a/src/noggit/ui/RotationEditor.cpp b/src/noggit/ui/RotationEditor.cpp index a702f7a3..b42f171a 100755 --- a/src/noggit/ui/RotationEditor.cpp +++ b/src/noggit/ui/RotationEditor.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -270,8 +271,7 @@ namespace Noggit if(obj->which() == eWMO) { - QSettings settings; - bool modern_features = settings.value("modern_features", false).toBool(); + bool modern_features = Noggit::Application::NoggitApplication::instance()->getConfiguration()->modern_features; if(modern_features) { _scale->setEnabled(true); diff --git a/src/noggit/ui/TexturingGUI.cpp b/src/noggit/ui/TexturingGUI.cpp index 166fa09a..bfe5c7f7 100644 --- a/src/noggit/ui/TexturingGUI.cpp +++ b/src/noggit/ui/TexturingGUI.cpp @@ -68,8 +68,7 @@ namespace Noggit std::unordered_set tilesets_with_specular_variant; // If modern features are enabled, set filtering to height textures (_h), otherwise specular (_s). - QSettings settings; - bool modern_features = settings.value("modern_features", false).toBool(); + bool modern_features = Noggit::Application::NoggitApplication::instance()->getConfiguration()->modern_features; for (auto const& entry_pair : Application::NoggitApplication::instance()->clientData()->listfile()->pathToFileDataIDMap()) { diff --git a/src/noggit/ui/texturing_tool.cpp b/src/noggit/ui/texturing_tool.cpp index c86439b5..f1baf5ee 100644 --- a/src/noggit/ui/texturing_tool.cpp +++ b/src/noggit/ui/texturing_tool.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -212,7 +213,7 @@ namespace Noggit tool_layout->setAlignment(quick_palette_btn, Qt::AlignTop); // Mists HeightMapping, only enable if modern feature setting is on - bool modern_features = settings.value("modern_features", false).toBool(); + bool modern_features = Noggit::Application::NoggitApplication::instance()->getConfiguration()->modern_features; // Define UI elements regardless of modern_features being enabled because they're used later on as well. _heightmapping_group = new QGroupBox("Height Mapping", tool_widget); @@ -230,7 +231,8 @@ namespace Noggit QPushButton* _heightmapping_copy_btn = new QPushButton("Copy to JSON", this); _heightmapping_copy_btn->setVisible(modern_features); - if (modern_features) { + if (modern_features) + { auto heightmapping_group_layout(new QFormLayout(_heightmapping_group)); @@ -330,7 +332,8 @@ namespace Noggit connect (anim_speed_slider, &QSlider::valueChanged, &_anim_speed_prop, &Noggit::unsigned_int_property::set); connect (anim_orientation_dial, &QDial::valueChanged, &_anim_rotation_prop, &Noggit::unsigned_int_property::set); - if (modern_features) { + if (modern_features) + { connect(heightmapping_scale_spin, qOverload(&QDoubleSpinBox::valueChanged) , [&](double v) { @@ -469,7 +472,8 @@ namespace Noggit // Mists Heightmapping - if (modern_features) { + if (modern_features) + { connect(_current_texture, &Noggit::Ui::current_texture::texture_updated , [=]() { diff --git a/src/noggit/ui/tools/MapCreationWizard/Ui/MapCreationWizard.hpp b/src/noggit/ui/tools/MapCreationWizard/Ui/MapCreationWizard.hpp index 1dad92e7..4192c2e8 100755 --- a/src/noggit/ui/tools/MapCreationWizard/Ui/MapCreationWizard.hpp +++ b/src/noggit/ui/tools/MapCreationWizard/Ui/MapCreationWizard.hpp @@ -22,6 +22,7 @@ #include #include #include +#include namespace Noggit diff --git a/src/noggit/ui/tools/NodeEditor/Nodes/World/Object/ObjectInstanceSetScale.cpp b/src/noggit/ui/tools/NodeEditor/Nodes/World/Object/ObjectInstanceSetScale.cpp index 1ab83c09..f3620498 100755 --- a/src/noggit/ui/tools/NodeEditor/Nodes/World/Object/ObjectInstanceSetScale.cpp +++ b/src/noggit/ui/tools/NodeEditor/Nodes/World/Object/ObjectInstanceSetScale.cpp @@ -6,6 +6,7 @@ #include #include #include +#include using namespace Noggit::Ui::Tools::NodeEditor::Nodes; @@ -39,13 +40,15 @@ void ObjectInstanceSetScaleNode::compute() return; } - if (obj->which() == eWMO) { - QSettings settings; - bool modern_features = settings.value("modern_features", false).toBool(); - if (modern_features) { + if (obj->which() == eWMO) + { + bool modern_features = Noggit::Application::NoggitApplication::instance()->getConfiguration()->modern_features; + if (modern_features) + { obj->scale = scale; } - else { + else + { obj->scale = 1.0; } } diff --git a/src/noggit/ui/tools/ViewportGizmo/ViewportGizmo.cpp b/src/noggit/ui/tools/ViewportGizmo/ViewportGizmo.cpp index ff61b3c3..d1fedc3d 100755 --- a/src/noggit/ui/tools/ViewportGizmo/ViewportGizmo.cpp +++ b/src/noggit/ui/tools/ViewportGizmo/ViewportGizmo.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include @@ -146,8 +147,7 @@ void ViewportGizmo::handleTransformGizmo(MapView* map_view NOGGIT_ACTION_MGR->beginAction(map_view, Noggit::ActionFlags::eOBJECTS_TRANSFORMED, Noggit::ActionModalityControllers::eLMB); - QSettings settings; - bool modern_features = settings.value("modern_features", false).toBool(); + bool modern_features = Noggit::Application::NoggitApplication::instance()->getConfiguration()->modern_features; if (gizmo_selection_type == MULTISELECTION) { @@ -169,7 +169,8 @@ void ViewportGizmo::handleTransformGizmo(MapView* map_view float& scale = obj_instance->scale; // If modern features are disabled, we don't want to scale WMOs - if (obj_instance->which() == eWMO && !modern_features && _gizmo_operation == ImGuizmo::SCALE) { + if (obj_instance->which() == eWMO && !modern_features && _gizmo_operation == ImGuizmo::SCALE) + { scale = 1.0f; continue; } @@ -290,7 +291,8 @@ void ViewportGizmo::handleTransformGizmo(MapView* map_view float& scale = obj_instance->scale; // If modern features are disabled, we don't want to scale WMOs - if (obj_instance->which() == eWMO && !modern_features && _gizmo_operation == ImGuizmo::SCALE) { + if (obj_instance->which() == eWMO && !modern_features && _gizmo_operation == ImGuizmo::SCALE) + { scale = 1.0f; continue; } diff --git a/src/noggit/ui/windows/noggitWindow/NoggitWindow.hpp b/src/noggit/ui/windows/noggitWindow/NoggitWindow.hpp index ff4902c9..c1aa2163 100755 --- a/src/noggit/ui/windows/noggitWindow/NoggitWindow.hpp +++ b/src/noggit/ui/windows/noggitWindow/NoggitWindow.hpp @@ -60,8 +60,8 @@ namespace Noggit::Ui::Windows private: std::unique_ptr _buildMapListComponent; - std::shared_ptr _applicationConfiguration; - std::shared_ptr _project; + std::shared_ptr _applicationConfiguration; + std::shared_ptr _project; void handleEventMapListContextMenuPinMap(int mapId, std::string MapName);