public void UpdateVisibleMembers() { GUI.changed = true; int count = lastVisibleIndex - firstVisibleIndex + 1; DrawerArrayPool.Resize(ref visibleMembers, count); for (int n = count - 1; n >= 0; n--) { var member = members[firstVisibleIndex + n]; visibleMembers[n] = member; visibleMembersHaveConflicts[n] = AddComponentUtility.HasConflictingMembers(member.Type, target); } }
/// <inheritdoc /> protected override void BuildContextMenu(ref Menu menu, bool extendedMenu) { var addHistory = AddComponentHistoryTracker.LastAddedComponents; Type typeFromClipboard = null; if (Clipboard.CanPasteAs(Types.Type)) { #if DEV_MODE Debug.Log("Clipboard.CanPasteAs(Type): " + StringUtils.True); #endif typeFromClipboard = Clipboard.Paste <Type>(); #if DEV_MODE Debug.Log(Msg("typeFromClipboard: ", typeFromClipboard)); #endif } if (typeFromClipboard == null) { #if DEV_MODE Debug.Log("Clipboard.CanPasteAs(Type): " + StringUtils.False); #endif var objectReference = Clipboard.ObjectReference; #if DEV_MODE Debug.Log(Msg("objectReference: ", objectReference)); #endif if (objectReference != null) { #if UNITY_EDITOR var script = objectReference as UnityEditor.MonoScript; if (script != null) { typeFromClipboard = script.GetClass(); } else #endif { typeFromClipboard = objectReference.GetType(); } #if DEV_MODE Debug.Log(Msg("typeFromClipboard: ", typeFromClipboard)); #endif } } var gameObjectDrawer = parent as GameObjectDrawer; if (typeFromClipboard != null && typeFromClipboard.IsComponent()) { addHistory.Remove(typeFromClipboard); if (!AddComponentUtility.HasConflictingMembers(typeFromClipboard, gameObjectDrawer)) { menu.Add(typeFromClipboard.Name, () => QuickAddComponent(typeFromClipboard)); } else { menu.AddDisabled(typeFromClipboard.Name); } if (addHistory.Count > 0) { menu.AddSeparator(); } } for (int n = 0, count = addHistory.Count; n < count; n++) { var type = addHistory[n]; if (!AddComponentUtility.HasConflictingMembers(type, gameObjectDrawer)) { menu.Add(type.Name, () => QuickAddComponent(type)); } else { menu.AddDisabled(type.Name); } } }