private void Definition() { // Define all overrides based on data from the reflected Method Info. foreach (MethodInfo method in decorated.inheritance.type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly)) { if (method.Overridable()) { var _method = decorated.methods.Definer().SetMethod(decorated, MethodDeclaration.FromReflected(method)); if (method.IsAbstract) { _method.entry.declaration.isOverridden = true; } } } // Ensures all the variables of this class have notified observers that they have changed. // Generally we end up invoking the Define behaviour on all units to ensure the data is shown. for (int i = 0; i < decorated.variables.variables.Count; i++) { decorated.variables.variables[i].declaration.Class = decorated; decorated.variables.variables[i].declaration.guid = decorated.variables.variables[i].GetGUID(); decorated.variables.variables[i].declaration.classGUID = decorated.GetGUID(); decorated.variables.variables[i].declaration.Changed(); } // Add all special methods for different UnityEngine.Object types that have special "Magic" methods. Aka Messages. if (MagicMethods.TryAddMonoBehaviour(decorated.methods, decorated, decorated.inheritance)) { return; } if (MagicMethods.TryAddScriptableObject(decorated.methods, decorated, decorated.inheritance)) { return; } if (MagicMethods.TryAddEditorWindow(decorated.methods, decorated, decorated.inheritance)) { return; } }