diff --git a/include/loot/game_interface.h b/include/loot/game_interface.h index 9e41c83a..a2e39799 100644 --- a/include/loot/game_interface.h +++ b/include/loot/game_interface.h @@ -141,7 +141,7 @@ public: * is called, this GameInterface is destroyed, or until a plugin with * a case-insensitively equal filename is loaded. */ - virtual const PluginInterface* GetPlugin( + virtual std::shared_ptr GetPlugin( const std::string& pluginName) const = 0; /** @@ -152,7 +152,8 @@ public: * this GameInterface is destroyed, or until a plugin with a * case-insensitively equal filename is loaded. */ - virtual std::vector GetLoadedPlugins() const = 0; + virtual std::vector> GetLoadedPlugins() + const = 0; /** * @} diff --git a/src/api/game/game.cpp b/src/api/game/game.cpp index eeb8f922..7de857fc 100644 --- a/src/api/game/game.cpp +++ b/src/api/game/game.cpp @@ -311,12 +311,14 @@ void Game::LoadPlugins(const std::vector& pluginPaths, void Game::ClearLoadedPlugins() { cache_.ClearCachedPlugins(); } -const PluginInterface* Game::GetPlugin(const std::string& pluginName) const { +std::shared_ptr Game::GetPlugin( + const std::string& pluginName) const { return cache_.GetPlugin(pluginName); } -std::vector Game::GetLoadedPlugins() const { - std::vector interfacePointers; +std::vector> Game::GetLoadedPlugins() + const { + std::vector> interfacePointers; for (const auto plugin : cache_.GetPlugins()) { interfacePointers.push_back(plugin); } @@ -334,7 +336,7 @@ std::vector Game::SortPlugins( "\" has not been loaded."); } - plugins.push_back(plugin); + plugins.push_back(plugin.get()); } auto pluginsSortingData = GetPluginsSortingData(database_, plugins); diff --git a/src/api/game/game.h b/src/api/game/game.h index 6e580325..cc60048c 100644 --- a/src/api/game/game.h +++ b/src/api/game/game.h @@ -72,10 +72,11 @@ public: void ClearLoadedPlugins() override; - const PluginInterface* GetPlugin( + std::shared_ptr GetPlugin( const std::string& pluginName) const override; - std::vector GetLoadedPlugins() const override; + std::vector> GetLoadedPlugins() + const override; std::vector SortPlugins( const std::vector& pluginFilenames) override; diff --git a/src/api/game/game_cache.cpp b/src/api/game/game_cache.cpp index c6b90bce..89f63074 100644 --- a/src/api/game/game_cache.cpp +++ b/src/api/game/game_cache.cpp @@ -27,19 +27,20 @@ #include "api/helpers/text.h" namespace loot { -std::vector GameCache::GetPlugins() const { - std::vector output(plugins_.size()); +std::vector> GameCache::GetPlugins() const { + std::vector> output(plugins_.size()); std::transform( begin(plugins_), end(plugins_), begin(output), [](const auto& pair) { - return pair.second.get(); + return pair.second; }); return output; } -const Plugin* GameCache::GetPlugin(std::string_view pluginName) const { +std::shared_ptr GameCache::GetPlugin( + std::string_view pluginName) const { const auto it = plugins_.find(NormalizeFilename(pluginName)); if (it != end(plugins_)) - return it->second.get(); + return it->second; return nullptr; } diff --git a/src/api/game/game_cache.h b/src/api/game/game_cache.h index 9078d59f..f94775e7 100644 --- a/src/api/game/game_cache.h +++ b/src/api/game/game_cache.h @@ -34,8 +34,8 @@ namespace loot { class GameCache { public: - std::vector GetPlugins() const; - const Plugin* GetPlugin(std::string_view pluginName) const; + std::vector> GetPlugins() const; + std::shared_ptr GetPlugin(std::string_view pluginName) const; void AddPlugin(Plugin&& plugin); std::vector GetPluginsWithReplacements( diff --git a/src/api/metadata/condition_evaluator.cpp b/src/api/metadata/condition_evaluator.cpp index f933dedb..89cc8989 100644 --- a/src/api/metadata/condition_evaluator.cpp +++ b/src/api/metadata/condition_evaluator.cpp @@ -203,7 +203,7 @@ void ConditionEvaluator::RefreshActivePluginsState( } void ConditionEvaluator::RefreshLoadedPluginsState( - const std::vector& plugins) { + const std::vector>& plugins) { ClearConditionCache(); std::vector pluginNames; diff --git a/src/api/metadata/condition_evaluator.h b/src/api/metadata/condition_evaluator.h index 4024bbd4..acc25895 100644 --- a/src/api/metadata/condition_evaluator.h +++ b/src/api/metadata/condition_evaluator.h @@ -50,7 +50,7 @@ public: void RefreshActivePluginsState( const std::vector& activePluginNames); void RefreshLoadedPluginsState( - const std::vector& plugins); + const std::vector>& plugins); void SetAdditionalDataPaths( const std::vector& dataPaths); diff --git a/src/api/plugin.cpp b/src/api/plugin.cpp index fae1f073..81059d8e 100644 --- a/src/api/plugin.cpp +++ b/src/api/plugin.cpp @@ -594,7 +594,8 @@ std::string Plugin::GetDescription() const { } std::unique_ptr -Plugin::GetPluginsMetadata(const std::vector& plugins) { +Plugin::GetPluginsMetadata( + const std::vector& plugins) { if (plugins.empty()) { return std::unique_ptr(