ConversionChainPtr ParseConversionChain(const JSONValue& docs) { list<ConversionPtr> conversions; for (rapidjson::SizeType i = 0; i < docs.Size(); i++) { const JSONValue& doc = docs[i]; if (doc.IsObject()) { ConversionPtr conversion = ParseConversion(doc); conversions.push_back(conversion); } else {} } ConversionChainPtr chain(new ConversionChain(conversions)); return chain; }
bool Player::LoadPlugins(const JSONValue& plugins) { // Load plugins. bool failure = false; #if URHO3D_PLUGINS || URHO3D_CSHARP for (auto i = 0; i < plugins.Size(); i++) { if (plugins[i]["private"].GetBool()) continue; ea::string pluginName = plugins[i]["name"].GetString(); ea::string pluginFileName; bool loaded = false; #if !_WIN32 // Native plugins on unixes #if __linux__ pluginFileName = "lib" + pluginName + ".so"; #elif APPLE pluginFileName = "lib" + pluginName + ".dylib"; #endif #if URHO3D_PLUGINS #if MOBILE // On mobile libraries are loaded already so it is ok to not check for existence, TODO: iOS loaded = LoadAssembly(pluginFileName, PLUGIN_NATIVE); #else // On desktop we can access file system as usual if (GetFileSystem()->Exists(pluginFileName)) loaded = LoadAssembly(pluginFileName); else { pluginFileName = GetFileSystem()->GetProgramDir() + pluginFileName; if (GetFileSystem()->Exists(pluginFileName)) loaded = LoadAssembly(pluginFileName); } #endif // MOBILE #endif // URHO3D_PLUGINS #endif // !_WIN32 #if _WIN32 || URHO3D_CSHARP // Native plugins on windows or managed plugins on all platforms if (!loaded) { pluginFileName = pluginName + ".dll"; #if ANDROID pluginFileName = ea::string(APK) + "assets/.net/" + pluginFileName; #endif if (GetFileSystem()->Exists(pluginFileName)) loaded = LoadAssembly(pluginFileName); #if DESKTOP else { pluginFileName = GetFileSystem()->GetProgramDir() + pluginFileName; if (GetFileSystem()->Exists(pluginFileName)) loaded = LoadAssembly(pluginFileName); } #endif } #endif if (!loaded) { URHO3D_LOGERRORF("Loading of '%s' assembly failed.", pluginName.c_str()); return false; } } #endif // URHO3D_PLUGINS return true; }