Пример #1
0
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);
		}
	}
}
Пример #2
0
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);
		}
	}
}
Пример #3
0
void cPluginManager::ReloadPluginsNow(void)
{
	cIniFile a_SettingsIni;
	a_SettingsIni.ReadFile("settings.ini");
	ReloadPluginsNow(a_SettingsIni);
}
Пример #4
0
void cPluginManager::ReloadPluginsNow(void)
{
	cIniFile a_SettingsIni;
	a_SettingsIni.ReadFile(cRoot::Get()->m_SettingsFilename);
	ReloadPluginsNow(a_SettingsIni);
}