void OnGUI() { if (!inited) Init(); UniRPGEdGui.UseSkin(); scroll = UniRPGEdGui.BeginScrollView(scroll); { if (UniRPGEditorGlobal.CameraEditors.Length > 0) { foreach (UniRPGCameraEdInfo cam in UniRPGEditorGlobal.CameraEditors) { if (UniRPGEdGui.ToggleButton(selected == cam, cam.name, UniRPGEdGui.ButtonStyle, UniRPGEdGui.ButtonOnColor, GUILayout.Width(180))) { selected = cam; } } } else { GUILayout.Label("No Camera plugins found", UniRPGEdGui.WarningLabelStyle); } } UniRPGEdGui.EndScrollView(); UniRPGEdGui.DrawHorizontalLine(1, UniRPGEdGui.DividerColor, 0, 10); EditorGUILayout.BeginHorizontal(); { GUILayout.FlexibleSpace(); if (selected == null) GUI.enabled = false; if (GUILayout.Button("Accept", UniRPGEdGui.ButtonStyle)) accepted = true; GUI.enabled = true; if (GUILayout.Button("Cancel", UniRPGEdGui.ButtonStyle)) this.Close(); GUILayout.FlexibleSpace(); } EditorGUILayout.EndHorizontal(); GUILayout.Space(10); }
private static void LoadCameraEditors(Assembly[] asms) { // find all the classes that inherit from GameCameraEditorBase List<System.Type> foundEdTypes = new List<System.Type>(); float progress = 0f; float step = 1f / (float)asms.Length; //EditorUtility.DisplayProgressBar("Updating ...", "Updating Camera Editor cache", progress); for (int i = 0; i < asms.Length; i++) { progress += step; //EditorUtility.DisplayProgressBar("Updating ...", "Updating Camera Editor cache", progress); System.Type[] types = asms[i].GetExportedTypes(); for (int j = 0; j < types.Length; j++) { if (types[j].IsClass && typeof(GameCameraEditorBase).IsAssignableFrom(types[j]) && types[j].Name != "GameCameraEditorBase") { foundEdTypes.Add(types[j]); } } } // extract some meta data and create the editor instances List<UniRPGCameraEdInfo> eds = new List<UniRPGCameraEdInfo>(); progress = 0f; step = 1f / (float)foundEdTypes.Count; //EditorUtility.DisplayProgressBar("Updating ...", "Updating Camera Editor cache", progress); for (int i = 0; i < foundEdTypes.Count; i++) { progress += step; //EditorUtility.DisplayProgressBar("Updating ...", "Updating Camera Editor cache", progress); bool err = true; GameCameraAttribute att = null; System.Object[] attribs = foundEdTypes[i].GetCustomAttributes(typeof(GameCameraAttribute), false); if (attribs.Length > 0) { // find the ALL occurance of GameCameraAttribute for (int j = 0; j < attribs.Length; j++) { att = (attribs[j] as GameCameraAttribute); if (att != null) { err = false; UniRPGCameraEdInfo nfo = new UniRPGCameraEdInfo(); nfo.name = att.Name; nfo.cameraType = att.cameraType; nfo.editor = (GameCameraEditorBase)System.Activator.CreateInstance(foundEdTypes[i]); eds.Add(nfo); } } } if (err) { Debug.LogError("Invalid Camera Editor [" + foundEdTypes[i].ToString() + "] encountered. Please check the documentation on how to create custom Cameras and Editor."); } } // sort the editors according to priority/ name eds.Sort(delegate(UniRPGCameraEdInfo a, UniRPGCameraEdInfo b) { return a.name.CompareTo(b.name); }); // update the caches CameraEditors = eds.ToArray(); //EditorUtility.ClearProgressBar(); }