public static List <AddOnAttribute> GetAddonsByTarget(AddOnTarget target) { List <AddOnAttribute> ResultAddons = new List <AddOnAttribute>(); Type[] ActiveBehaviours = GetAllSubTypes(typeof(MonoBehaviour)); foreach (Type Type in ActiveBehaviours) { object[] Attributes = Type.GetCustomAttributes(typeof(AddOnAttribute), false); if (Attributes != null) { for (int i = 0; i < Attributes.Length; i++) { if ((AddOnAttribute)Attributes[i] != null) { if (((AddOnAttribute)Attributes[i]).Target == target) { ((AddOnAttribute)Attributes[i]).Behaviour = Type; ResultAddons.Add((AddOnAttribute)Attributes[i]); } } } } } return(ResultAddons); }
public AddOnAttribute(string name, string author, string description, AddOnTarget target) { Name = name; Author = author; Description = description; Target = target; }
public static void LoadAddons(MonoBehaviour target, AddOnTarget addOnTarget) { Addons = AddOnHelper.GetAddonsByTarget(addOnTarget); foreach (AddOnBehaviour Addon in target.GetComponentsInChildren <AddOnBehaviour>()) { if (Addon != null) { Addon.hideFlags = HideFlags.HideInInspector; } } }
public static void DrawAddons(MonoBehaviour target, AddOnTarget addOnTarget) { if (Addons.Count == 0) { GUILayout.Label("No Add-On(s) are available for this component.", EditorStyles.miniLabel); } else { foreach (AddOnAttribute Addon in Addons) { if (Addon.Target == addOnTarget) { GUILayout.BeginVertical("box"); GUILayout.BeginHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Space(3); GUILayout.Label(Addon.Name, EditorStyles.label); GUILayout.FlexibleSpace(); GUI.color = GetEditorColor; if (GUILayout.Button("About This", GUILayout.Width(100))) { EditorUtility.DisplayDialog("Easy Build System - Information", "Name : " + Addon.Name + "\nAuthor : " + Addon.Author, "Ok"); } if (target.gameObject.GetComponent(Addon.Behaviour) == null) { GUI.color = new Color(0f, 1.5f, 0f); if (GUILayout.Button("Enable Add-On", GUILayout.Width(130))) { if (target.gameObject.GetComponent(Addon.Behaviour) != null) { return; } Component Com = target.gameObject.AddComponent(Addon.Behaviour); Com.hideFlags = HideFlags.HideInInspector; } } else { GUI.color = new Color(2f, 0f, 0f); if (GUILayout.Button("Disable Add-On", GUILayout.Width(130))) { try { DestroyImmediate(target.gameObject.GetComponent(Addon.Behaviour)); break; } catch { } } } GUILayout.EndHorizontal(); GUILayout.EndHorizontal(); GUI.color = Color.white; if (target.gameObject.GetComponent(Addon.Behaviour) != null) { EditorGUILayout.HelpBox(Addon.Description, MessageType.Info); GUILayout.BeginHorizontal(); GUILayout.Space(13); GUILayout.BeginVertical(); UnityEditor.Editor AddonEditor = UnityEditor.Editor.CreateEditor(target.gameObject.GetComponent(Addon.Behaviour)); AddonEditor.DrawDefaultInspector(); GUILayout.EndVertical(); GUILayout.EndHorizontal(); } GUILayout.EndVertical(); } } } }