public static MagicLeapManifestSettings GetOrCreateSettings(string path = kDefaultSettingsPath) { if (string.IsNullOrEmpty(path)) { throw new ArgumentException("path"); } var dir = Path.GetDirectoryName(path); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } var settings = AssetDatabase.LoadAssetAtPath <MagicLeapManifestSettings>(path); if (settings == null) { settings = ScriptableObject.CreateInstance <MagicLeapManifestSettings>(); settings.m_MinimumAPILevel = 4; settings.m_AllowBackgroundMusicService = false; if (SDKUtility.sdkAvailable) { settings.RebuildPrivilegeGroups(PrivilegeParser.ParsePrivilegesFromHeader(Path.Combine(SDKUtility.sdkPath, PrivilegeParser.kPrivilegeHeaderPath))); } else { Debug.LogWarning(ManifestEditorGUI.Messages.kCannotLocateSDK); } //settings.m_Privileges = new Privilege[1] { new Privilege { Name = "LowLatencyLightwear", Enabled = true } }; AssetDatabase.CreateAsset(settings, path); AssetDatabase.SaveAssets(); } return(settings); }
public static void RenderManifest(MagicLeapManifestSettings settings) { var serializedObject = settings.ToSerializedObject(); serializedObject.UpdateIfRequiredOrScript(); var id = GUIUtility.GetControlID(FocusType.Passive); var state = (RenderState)GUIUtility.GetStateObject(typeof(RenderState), id); var missingSdk = !SDKUtility.sdkAvailable; if (missingSdk) { EditorGUILayout.HelpBox(Messages.kCannotLocateSDK, MessageType.Error, true); } using (new EditorGUI.DisabledScope(missingSdk)) { var apiLevel = serializedObject.FindProperty("m_MinimumAPILevel"); apiLevel.intValue = PlatformLevelSelector.SelectorGUI(apiLevel.intValue); EditorGUILayout.LabelField("Privileges", EditorStyles.boldLabel); var priv_groups = serializedObject.FindProperty("m_PrivilegeGroups"); for (int i = 0; i < priv_groups.arraySize; i++) { var group = priv_groups.GetArrayElementAtIndex(i); var group_name = group.FindPropertyRelative("m_Name").stringValue; if (!state.GroupFoldoutExpanded.TryGetValue(group_name, out var _)) { state.GroupFoldoutExpanded[group_name] = false; } state.GroupFoldoutExpanded[group_name] = EditorGUILayout.BeginFoldoutHeaderGroup(state.GroupFoldoutExpanded[group_name], group_name); if (state.GroupFoldoutExpanded[group_name]) { var privs = group.FindPropertyRelative("m_Privileges"); for (int j = 0; j < privs.arraySize; j++) { var priv = privs.GetArrayElementAtIndex(j); var enabled = priv.FindPropertyRelative("m_Enabled"); var name = priv.FindPropertyRelative("m_Name").stringValue; var disabled = ShouldDisable(apiLevel.intValue, priv); var value = UpdateValue(name, enabled.boolValue, disabled); using (new EditorGUI.DisabledScope(disabled)) using (new EditorGUI.IndentLevelScope()) enabled.boolValue = EditorGUILayout.ToggleLeft(name, value); } } EditorGUILayout.EndFoldoutHeaderGroup(); } serializedObject.ApplyModifiedProperties(); GUILayout.FlexibleSpace(); EditorGUILayout.HelpBox(Messages.kShouldSynchronize, MessageType.Info, true); var sdkUpdateRequested = GUILayout.Button("Synchronize"); if (sdkUpdateRequested) { state.IsPerformingSDKUpdate = true; EditorApplication.delayCall += () => { settings.RebuildPrivilegeGroups(PrivilegeParser.ParsePrivilegesFromHeader(Path.Combine(SDKUtility.sdkPath, PrivilegeParser.kPrivilegeHeaderPath))); state.IsPerformingSDKUpdate = false; }; } } }
static PrivilegeSection() { s_PrivilegeList = PrivilegeParser.ParsePrivilegesFromHeader(Path.Combine(SDKUtility.sdkPath, PrivilegeParser.kPrivilegeHeaderPath)).ToList(); }