예제 #1
0
        static SettingsProvider[] CreateAllChildSettingsProviders()
        {
            List <SettingsProvider> ret = new List <SettingsProvider>();

            if (s_SettingsManager != null)
            {
                var ats = TypeLoaderExtensions.GetAllTypesWithAttribute <PlayerIdentityConfigurationDataAttribute>();
                foreach (var at in ats)
                {
                    var    xrbda        = at.GetCustomAttributes(typeof(PlayerIdentityConfigurationDataAttribute), true)[0] as PlayerIdentityConfigurationDataAttribute;
                    string settingsPath = $"{s_SettingsRootTitle}/{xrbda.displayName}";
                    var    resProv      = new PlayerIdentityConfigurationProvider(settingsPath, xrbda.buildSettingsKey, at);
                    ret.Add(resProv);
                }
            }

            return(ret.ToArray());
        }
예제 #2
0
        internal static void PopulateAllKnownLoaderInfos(List <LoaderInfo> backendLoaders, List <LoaderInfo> providerLoaders)
        {
            var loaderTypes = TypeLoaderExtensions.GetAllTypesWithInterface <PlayerIdentityLoader>();

            foreach (Type loaderType in loaderTypes)
            {
                if (string.Compare("DummyLoader", loaderType.Name, StringComparison.OrdinalIgnoreCase) == 0 ||
                    string.Compare("SampleLoader", loaderType.Name, StringComparison.OrdinalIgnoreCase) == 0)
                {
                    continue;
                }

                var assets = AssetDatabase.FindAssets($"t:{loaderType}");
                if (!assets.Any())
                {
                    // Create the instance and asset
                    var    newAssetName = $"{EditorUtilities.TypeNameToString(loaderType)}.asset";
                    var    loader       = Editor.CreateInstance(loaderType) as PlayerIdentityLoader;
                    string assetPath    = EditorUtilities.GetAssetPathForComponents(EditorUtilities.defaultLoaderPath);
                    if (string.IsNullOrEmpty(assetPath))
                    {
                        continue;
                    }

                    assetPath = Path.Combine(assetPath, newAssetName);
                    AssetDatabase.CreateAsset(loader, assetPath);

                    assets = AssetDatabase.FindAssets($"t:{loaderType}");
                }

                // Add the loader info only if the loader is created.
                foreach (var asset in assets)
                {
                    string path = AssetDatabase.GUIDToAssetPath(asset);

                    LoaderInfo info = new LoaderInfo();
                    info.loaderType = loaderType;
                    info.instance   = AssetDatabase.LoadAssetAtPath(path, loaderType) as PlayerIdentityLoader;
                    if (info.instance == null)
                    {
                        continue;
                    }
                    info.assetName = Path.GetFileNameWithoutExtension(path);

                    switch (info.instance.Category)
                    {
                    case PlayerIdentityLoaderCategory.IdentityBackend:
                        backendLoaders.Add(info);
                        break;

                    case PlayerIdentityLoaderCategory.IdentityProvider:
                        providerLoaders.Add(info);
                        break;

                    default:
                        Logger.Warning("Unknown identity loader category: " + info.instance.Category);
                        break;
                    }
                }
            }
        }