void cPluginManager::Tick(float a_Dt) { // Unload plugins that have been scheduled for unloading: AStringVector PluginsToUnload; { cCSLock Lock(m_CSPluginsToUnload); std::swap(m_PluginsToUnload, PluginsToUnload); } for (auto & folder: PluginsToUnload) { bool HasUnloaded = false; bool HasFound = false; for (auto & plugin: m_Plugins) { if (plugin->GetFolderName() == folder) { HasFound = true; if (plugin->IsLoaded()) { plugin->Unload(); HasUnloaded = true; } } } if (!HasFound) { LOG("Cannot unload plugin in folder \"%s\", there's no such plugin folder", folder.c_str()); } else if (!HasUnloaded) { LOG("Cannot unload plugin in folder \"%s\", it has not been loaded.", folder.c_str()); } } // for plugin - m_Plugins[] // If a plugin reload has been scheduled, reload now: if (m_bReloadPlugins) { ReloadPluginsNow(); } FIND_HOOK(HOOK_TICK); if (Plugins != m_Hooks.end()) { for (PluginList::iterator itr = Plugins->second.begin(); itr != Plugins->second.end(); ++itr) { (*itr)->Tick(a_Dt); } } }
void cPluginManager::Tick(float a_Dt) { while (!m_DisablePluginList.empty()) { RemovePlugin(m_DisablePluginList.front()); m_DisablePluginList.pop_front(); } if (m_bReloadPlugins) { ReloadPluginsNow(); } HookMap::iterator Plugins = m_Hooks.find(HOOK_TICK); if (Plugins != m_Hooks.end()) { for (PluginList::iterator itr = Plugins->second.begin(); itr != Plugins->second.end(); ++itr) { (*itr)->Tick(a_Dt); } } }
void cPluginManager::ReloadPluginsNow(void) { cIniFile a_SettingsIni; a_SettingsIni.ReadFile("settings.ini"); ReloadPluginsNow(a_SettingsIni); }
void cPluginManager::ReloadPluginsNow(void) { cIniFile a_SettingsIni; a_SettingsIni.ReadFile(cRoot::Get()->m_SettingsFilename); ReloadPluginsNow(a_SettingsIni); }