public static bool DrawDatasetTrackableInspector(SerializedDataSetTrackable serializedObject, bool resetTrackable, Func <ConfigData, string[]> getTrackableNamesFunc, string trackableLabel) { bool result = false; string[] array = new string[ConfigDataManager.Instance.NumConfigDataObjects]; ConfigDataManager.Instance.GetConfigDataNames(array); int num = -1; if (!serializedObject.DataSetPathProperty.hasMultipleDifferentValues) { num = VuforiaUtilities.GetIndexFromString(serializedObject.GetDataSetName(), array); if (num < 0) { num = 0; } } EditorGUI.BeginChangeCheck(); int num2 = EditorGUILayout.Popup("Database", num, array, new GUILayoutOption[0]); bool flag = EditorGUI.EndChangeCheck(); if (resetTrackable && num2 < 0) { num2 = 0; flag = true; } if (num2 >= 0) { string dataSetName = array[num2]; ConfigData configData = ConfigDataManager.Instance.GetConfigData(dataSetName); string[] array2 = getTrackableNamesFunc(configData); int num3 = -1; if (!serializedObject.TrackableNameProperty.hasMultipleDifferentValues) { num3 = VuforiaUtilities.GetIndexFromString(serializedObject.TrackableName, array2); if (num3 < 0) { num3 = 0; } } if (flag) { num3 = 0; } EditorGUI.BeginChangeCheck(); int num4 = EditorGUILayout.Popup(trackableLabel, num3, array2, new GUILayoutOption[0]); bool flag2 = EditorGUI.EndChangeCheck(); if (array2.Length != 0 && (flag | flag2 | resetTrackable)) { result = true; serializedObject.DataSetPath = ""; serializedObject.DataSetPath = VuforiaRuntimeUtilities.StripStreamingAssetsFromPath(ConfigDataManager.Instance.GetConfigData(array[num2]).FullPath); if (num4 >= 0) { string trackableName = array2[num4]; serializedObject.TrackableName = ""; serializedObject.TrackableName = trackableName; } } } else { EditorGUILayout.Popup(trackableLabel, -1, new string[0], new GUILayoutOption[0]); } return(result); }