summaryrefslogtreecommitdiff
path: root/src/profile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/profile.cpp')
-rw-r--r--src/profile.cpp28
1 files changed, 15 insertions, 13 deletions
diff --git a/src/profile.cpp b/src/profile.cpp
index d4299a7b..a0c5a2d4 100644
--- a/src/profile.cpp
+++ b/src/profile.cpp
@@ -20,6 +20,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "profile.h"
#include "filesystemutilities.h"
+#include "game_features.h"
#include "modinfo.h"
#include "modinfoforeign.h"
#include "registry.h"
@@ -73,9 +74,9 @@ void Profile::touchFile(QString fileName)
}
Profile::Profile(const QString& name, IPluginGame const* gamePlugin,
- bool useDefaultSettings)
+ GameFeatures const& gameFeatures, bool useDefaultSettings)
: m_ModListWriter(std::bind(&Profile::doWriteModlist, this)),
- m_GamePlugin(gamePlugin)
+ m_GamePlugin(gamePlugin), m_GameFeatures(gameFeatures)
{
QString profilesDir = Settings::instance().paths().profiles();
QDir profileBase(profilesDir);
@@ -114,8 +115,9 @@ Profile::Profile(const QString& name, IPluginGame const* gamePlugin,
refreshModStatus();
}
-Profile::Profile(const QDir& directory, IPluginGame const* gamePlugin)
- : m_Directory(directory), m_GamePlugin(gamePlugin),
+Profile::Profile(const QDir& directory, IPluginGame const* gamePlugin,
+ GameFeatures const& gameFeatures)
+ : m_Directory(directory), m_GamePlugin(gamePlugin), m_GameFeatures(gameFeatures),
m_ModListWriter(std::bind(&Profile::doWriteModlist, this))
{
assert(gamePlugin != nullptr);
@@ -138,7 +140,7 @@ Profile::Profile(const QDir& directory, IPluginGame const* gamePlugin)
Profile::Profile(const Profile& reference)
: m_Directory(reference.m_Directory),
m_ModListWriter(std::bind(&Profile::doWriteModlist, this)),
- m_GamePlugin(reference.m_GamePlugin)
+ m_GamePlugin(reference.m_GamePlugin), m_GameFeatures(reference.m_GameFeatures)
{
m_Settings =
@@ -191,9 +193,9 @@ void Profile::findProfileSettings()
}
if (setting("", "AutomaticArchiveInvalidation") == QVariant()) {
- BSAInvalidation* invalidation = m_GamePlugin->feature<BSAInvalidation>();
- DataArchives* dataArchives = m_GamePlugin->feature<DataArchives>();
- bool found = false;
+ auto invalidation = m_GameFeatures.gameFeature<BSAInvalidation>();
+ auto dataArchives = m_GameFeatures.gameFeature<DataArchives>();
+ bool found = false;
if ((invalidation != nullptr) && (dataArchives != nullptr)) {
for (const QString& archive : dataArchives->archives(this)) {
if (invalidation->isInvalidationBSA(archive)) {
@@ -731,7 +733,7 @@ Profile* Profile::createPtrFrom(const QString& name, const Profile& reference,
{
QString profileDirectory = Settings::instance().paths().profiles() + "/" + name;
reference.copyFilesTo(profileDirectory);
- return new Profile(QDir(profileDirectory), gamePlugin);
+ return new Profile(QDir(profileDirectory), gamePlugin, reference.m_GameFeatures);
}
void Profile::copyFilesTo(QString& target) const
@@ -811,8 +813,8 @@ void Profile::mergeTweaks(ModInfo::Ptr modInfo, const QString& tweakedIni) const
bool Profile::invalidationActive(bool* supported) const
{
- BSAInvalidation* invalidation = m_GamePlugin->feature<BSAInvalidation>();
- DataArchives* dataArchives = m_GamePlugin->feature<DataArchives>();
+ auto invalidation = m_GameFeatures.gameFeature<BSAInvalidation>();
+ auto dataArchives = m_GameFeatures.gameFeature<DataArchives>();
if (supported != nullptr) {
*supported = ((invalidation != nullptr) && (dataArchives != nullptr));
@@ -825,7 +827,7 @@ bool Profile::invalidationActive(bool* supported) const
void Profile::deactivateInvalidation()
{
- BSAInvalidation* invalidation = m_GamePlugin->feature<BSAInvalidation>();
+ auto invalidation = m_GameFeatures.gameFeature<BSAInvalidation>();
if (invalidation != nullptr) {
invalidation->deactivate(this);
@@ -836,7 +838,7 @@ void Profile::deactivateInvalidation()
void Profile::activateInvalidation()
{
- BSAInvalidation* invalidation = m_GamePlugin->feature<BSAInvalidation>();
+ auto invalidation = m_GameFeatures.gameFeature<BSAInvalidation>();
if (invalidation != nullptr) {
invalidation->activate(this);