예제 #1
0
        private void AddLoaderMenuSelected(object data)
        {
            int        selected = (int)data;
            LoaderInfo info     = m_LoadersNotInUse[selected];

            AddLoaderMenu(info);
        }
예제 #2
0
        private void DrawElementCallback(Rect rect, int index, bool isActive, bool isFocused)
        {
            LoaderInfo info  = m_LoadersInUse[index];
            var        label = (info.instance == null) ? EditorGUIUtility.TrTextContent("Missing (PlayerIdentityLoader)") : EditorGUIUtility.TrTextContent(info.assetName);

            EditorGUI.LabelField(rect, label);
        }
예제 #3
0
        void ReloadData()
        {
            m_AllBackendLoaderInfo.Clear();
            m_SelectedBackendLoaderInfo = null;
            m_AllProviderLoaderInfo.Clear();
            m_SelectedProviderLoaderInfos.Clear();

            PlayerIdentitySettingsManager.PopulateAllKnownLoaderInfos(m_AllBackendLoaderInfo, m_AllProviderLoaderInfo);

            m_MustReloadData = false;
        }
예제 #4
0
        private void RemoveInstanceFromList(ReorderableList list)
        {
            LoaderInfo info = m_LoadersInUse[list.index];

            m_LoadersInUse.Remove(info);

            if (info.loaderType != null)
            {
                m_LoadersInUse.Remove(info);
                m_LoadersNotInUse.Add(info);
                m_ShouldReload = true;
            }
            UpdateSerializedProperty();
        }
예제 #5
0
        public PlayerIdentityGeneralSettings SettingsForBuildTarget(BuildTargetGroup targetGroup)
        {
            PlayerIdentityGeneralSettings ret = null;

            m_Settings.TryGetValue(targetGroup, out ret);


            if (ret == null)
            {
                ret = CreateInstance <PlayerIdentityGeneralSettings>();
                SetSettingsForBuildTarget(targetGroup, ret);
                AssetDatabase.AddObjectToAsset(ret, AssetDatabase.GetAssetOrScenePath(this));

                if (ret.Manager == null)
                {
                    var ms = CreateInstance <PlayerIdentityManagerSettings>();
                    AssetDatabase.AddObjectToAsset(ms, AssetDatabase.GetAssetOrScenePath(ret));
                    ret.Manager = ms;

                    List <LoaderInfo> m_AllBackendLoaderInfo  = new List <LoaderInfo>();
                    List <LoaderInfo> m_AllProviderLoaderInfo = new List <LoaderInfo>();
                    PlayerIdentitySettingsManager.PopulateAllKnownLoaderInfos(m_AllBackendLoaderInfo, m_AllProviderLoaderInfo);
                    LoaderInfo defaultbackloader = null;
                    if (m_AllBackendLoaderInfo.Count != 0)
                    {
                        defaultbackloader = m_AllBackendLoaderInfo[0];
                    }

                    if (defaultbackloader != null)
                    {
                        ret.Manager.backendLoader = defaultbackloader.instance;
                    }
                }
            }

            return(ret);
        }
예제 #6
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;
                    }
                }
            }
        }
예제 #7
0
        public override void OnInspectorGUI()
        {
            PlayerIdentityGeneralSettingsPerBuildTarget targetObject;

            if (serializedObject == null || serializedObject.targetObject == null)
            {
                return;
            }

            if (m_MustReloadData)
            {
                ReloadData();
            }

            serializedObject.Update();

            // Load the current settings
            targetObject = serializedObject.targetObject as PlayerIdentityGeneralSettingsPerBuildTarget;
            if (targetObject == null)
            {
                return;
            }
            // Always use standalone for setting identity backend and other global settings
            var standaloneCurrentSettings = targetObject.SettingsForBuildTarget(BuildTargetGroup.Standalone);

            // UI to select backend loader
            GUILayout.Label("Select Identity Backend", EditorStyles.boldLabel);
            EditorGUILayout.BeginHorizontal();
            {
                EditorGUILayout.PrefixLabel("Backend Type");

                var currentSelectedBackendIndex =
                    GetSelectedBackendLoaderIndex(standaloneCurrentSettings, m_AllBackendLoaderInfo);
                currentSelectedBackendIndex =
                    EditorGUILayout.Popup(currentSelectedBackendIndex, GetLoaderNames(m_AllBackendLoaderInfo));
                if (m_AllBackendLoaderInfo.Count > 0)
                {
                    m_SelectedBackendLoaderInfo = m_AllBackendLoaderInfo[currentSelectedBackendIndex];

                    // Apply to all values, not just current setting
                    ApplyChangesToAllSettings((group, currentValue) =>
                    {
                        var localCachedItem = GetOrCreateCachedItem(group, currentValue.objectReferenceValue as PlayerIdentityGeneralSettings);
                        localCachedItem.managerSettingsObject.FindProperty("m_BackendLoader").objectReferenceValue =
                            m_SelectedBackendLoaderInfo.instance;
                        localCachedItem.managerSettingsObject.ApplyModifiedProperties();
                    });
                }
                else
                {
                    m_SelectedBackendLoaderInfo = null;
                }
            }
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.Space();

            // UI to select identity providers
            GUILayout.Label("Configure Identity Providers", EditorStyles.boldLabel);
            var buildTargetGroup = EditorGUILayout.BeginBuildTargetSelectionGrouping();

            {
                var currentSettings = targetObject.SettingsForBuildTarget(buildTargetGroup);
                var cachedItem      = GetOrCreateCachedItem(buildTargetGroup, currentSettings);
                if (cachedItem.loaderOrderUI == null)
                {
                    var loaderList   = FindLoaderList(cachedItem);
                    var loadersInUse = FindLoadersInUse(cachedItem);
                    cachedItem.loaderOrderUI = new LoaderOrderUI(m_AllProviderLoaderInfo, loadersInUse, loaderList,
                                                                 onUpdate: () =>
                    {
                        ReloadData();
                    });
                }

                m_MustReloadData = cachedItem.loaderOrderUI.OnGUI();
                serializedObject.ApplyModifiedProperties();
            }
            EditorGUILayout.EndBuildTargetSelectionGrouping();

            // Options
            // Whether verify email shall be triggered automatically
            standaloneCurrentSettings.Manager.automaticallyVerifyEmail = EditorGUILayout.ToggleLeft("Automatically send verification email to users who sign up with email.", standaloneCurrentSettings.Manager.automaticallyVerifyEmail);

            // Apply to all values
            ApplyChangesToAllSettings((group, currentValue) =>
            {
                var localCachedItem = GetOrCreateCachedItem(group, currentValue.objectReferenceValue as PlayerIdentityGeneralSettings);
                localCachedItem.managerSettingsObject.FindProperty("m_AutomaticallyVerifyEmail").boolValue =
                    standaloneCurrentSettings.Manager.automaticallyVerifyEmail;
                localCachedItem.managerSettingsObject.ApplyModifiedProperties();
            });

            serializedObject.ApplyModifiedProperties();
        }
예제 #8
0
 private void AddLoaderMenu(LoaderInfo info)
 {
     m_LoadersNotInUse.Remove(info);
     m_LoadersInUse.Add(info);
     UpdateSerializedProperty();
 }