From e62fff5f2eaae841a4378e6bf18fb6a9b50b3d16 Mon Sep 17 00:00:00 2001
From: Evil Eye <malusluminis@hotmail.com>
Date: Mon, 7 Dec 2020 19:04:32 +0100
Subject: [PATCH 1/2] Add a setting to disable graphical herbalism

---
 apps/openmw/engine.cpp            |  4 ++--
 apps/openmw/mwclass/container.cpp | 10 +++++++++-
 apps/openmw/mwclass/container.hpp |  5 +++++
 files/settings-default.cfg        |  3 +++
 4 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp
index 8092bb770..8f23f710d 100644
--- a/apps/openmw/engine.cpp
+++ b/apps/openmw/engine.cpp
@@ -386,8 +386,6 @@ OMW::Engine::Engine(Files::ConfigurationManager& configurationManager)
   , mNewGame (false)
   , mCfgMgr(configurationManager)
 {
-    MWClass::registerClasses();
-
     SDL_SetHint(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, "0"); // We use only gamepads
 
     Uint32 flags = SDL_INIT_VIDEO|SDL_INIT_NOPARACHUTE|SDL_INIT_GAMECONTROLLER|SDL_INIT_JOYSTICK|SDL_INIT_SENSOR;
@@ -838,6 +836,8 @@ void OMW::Engine::go()
     std::string settingspath;
     settingspath = loadSettings (settings);
 
+    MWClass::registerClasses();
+
     // Create encoder
     mEncoder = new ToUTF8::Utf8Encoder(mEncoding);
 
diff --git a/apps/openmw/mwclass/container.cpp b/apps/openmw/mwclass/container.cpp
index a27e3debd..5ae22cf05 100644
--- a/apps/openmw/mwclass/container.cpp
+++ b/apps/openmw/mwclass/container.cpp
@@ -2,6 +2,7 @@
 
 #include <components/esm/loadcont.hpp>
 #include <components/esm/containerstate.hpp>
+#include <components/settings/settings.hpp>
 
 #include "../mwbase/environment.hpp"
 #include "../mwbase/world.hpp"
@@ -59,6 +60,11 @@ namespace MWClass
         return *this;
     }
 
+    Container::Container()
+    {
+        mHarvestEnabled = Settings::Manager::getBool("enable graphic herbalism", "Game");
+    }
+
     void Container::ensureCustomData (const MWWorld::Ptr& ptr) const
     {
         if (!ptr.getRefData().getCustomData())
@@ -72,8 +78,10 @@ namespace MWClass
         }
     }
 
-    bool canBeHarvested(const MWWorld::ConstPtr& ptr)
+    bool Container::canBeHarvested(const MWWorld::ConstPtr& ptr) const
     {
+        if (!mHarvestEnabled)
+            return false;
         const MWRender::Animation* animation = MWBase::Environment::get().getWorld()->getAnimation(ptr);
         if (animation == nullptr)
             return false;
diff --git a/apps/openmw/mwclass/container.hpp b/apps/openmw/mwclass/container.hpp
index 57dbf0c76..2dc0c06ca 100644
--- a/apps/openmw/mwclass/container.hpp
+++ b/apps/openmw/mwclass/container.hpp
@@ -30,11 +30,16 @@ namespace MWClass
 
     class Container : public MWWorld::Class
     {
+            bool mHarvestEnabled;
+
             void ensureCustomData (const MWWorld::Ptr& ptr) const;
 
             MWWorld::Ptr copyToCellImpl(const MWWorld::ConstPtr &ptr, MWWorld::CellStore &cell) const override;
 
+            bool canBeHarvested(const MWWorld::ConstPtr& ptr) const;
+
         public:
+            Container();
 
             void insertObjectRendering (const MWWorld::Ptr& ptr, const std::string& model, MWRender::RenderingInterface& renderingInterface) const override;
             ///< Add reference into a cell for rendering
diff --git a/files/settings-default.cfg b/files/settings-default.cfg
index 0b307ba09..fbf646b38 100644
--- a/files/settings-default.cfg
+++ b/files/settings-default.cfg
@@ -361,6 +361,9 @@ trainers training skills based on base skill = false
 # Make stealing items from NPCs that were knocked down possible during combat.
 always allow stealing from knocked out actors = false
 
+# Enables visually harvesting plants for models that support it.
+enable graphic herbalism = true
+
 [General]
 
 # Anisotropy reduces distortion in textures at low angles (e.g. 0 to 16).

From 275b9aea4d6d245b69eab91401ba11b8d764a756 Mon Sep 17 00:00:00 2001
From: Evil Eye <malusluminis@hotmail.com>
Date: Mon, 7 Dec 2020 21:56:41 +0100
Subject: [PATCH 2/2] rename setting

---
 apps/openmw/mwclass/container.cpp | 2 +-
 files/settings-default.cfg        | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/apps/openmw/mwclass/container.cpp b/apps/openmw/mwclass/container.cpp
index 5ae22cf05..28305c394 100644
--- a/apps/openmw/mwclass/container.cpp
+++ b/apps/openmw/mwclass/container.cpp
@@ -62,7 +62,7 @@ namespace MWClass
 
     Container::Container()
     {
-        mHarvestEnabled = Settings::Manager::getBool("enable graphic herbalism", "Game");
+        mHarvestEnabled = Settings::Manager::getBool("graphic herbalism", "Game");
     }
 
     void Container::ensureCustomData (const MWWorld::Ptr& ptr) const
diff --git a/files/settings-default.cfg b/files/settings-default.cfg
index fbf646b38..c8805faa3 100644
--- a/files/settings-default.cfg
+++ b/files/settings-default.cfg
@@ -362,7 +362,7 @@ trainers training skills based on base skill = false
 always allow stealing from knocked out actors = false
 
 # Enables visually harvesting plants for models that support it.
-enable graphic herbalism = true
+graphic herbalism = true
 
 [General]