Lock.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using UnityEditor;
  2. using UnityEditorInternal;
  3. using UnityEngine;
  4. namespace EnhancedHierarchy.Icons {
  5. public sealed class Lock : IconBase {
  6. public override IconPosition Side { get { return IconPosition.All; } }
  7. public override Texture2D PreferencesPreview { get { return Utility.GetBackground(Styles.lockToggleStyle, false); } }
  8. //public override string PreferencesTooltip { get { return "Some tag for the tooltip here"; } }
  9. public override void DoGUI(Rect rect) {
  10. var locked = (EnhancedHierarchy.CurrentGameObject.hideFlags & HideFlags.NotEditable) != 0;
  11. using(new GUIBackgroundColor(locked ? Styles.backgroundColorEnabled : Styles.backgroundColorDisabled)) {
  12. GUI.changed = false;
  13. GUI.Toggle(rect, locked, Styles.lockContent, Styles.lockToggleStyle);
  14. if (!GUI.changed)
  15. return;
  16. var selectedObjects = GetSelectedObjectsAndCurrent();
  17. var changeMode = AskChangeModeIfNecessary(selectedObjects, Preferences.LockAskMode.Value, "Lock Object",
  18. "Do you want to " + (!locked ? "lock" : "unlock") + " the children objects as well?");
  19. switch (changeMode) {
  20. case ChildrenChangeMode.ObjectOnly:
  21. foreach (var obj in selectedObjects)
  22. Undo.RegisterCompleteObjectUndo(obj, locked ? "Unlock Object" : "Lock Object");
  23. foreach (var obj in selectedObjects)
  24. if (!locked)
  25. Utility.LockObject(obj);
  26. else
  27. Utility.UnlockObject(obj);
  28. break;
  29. case ChildrenChangeMode.ObjectAndChildren:
  30. foreach (var obj in selectedObjects)
  31. Undo.RegisterFullObjectHierarchyUndo(obj, locked ? "Unlock Object" : "Lock Object");
  32. foreach (var obj in selectedObjects)
  33. foreach (var transform in obj.GetComponentsInChildren<Transform>(true))
  34. if (!locked)
  35. Utility.LockObject(transform.gameObject);
  36. else
  37. Utility.UnlockObject(transform.gameObject);
  38. break;
  39. }
  40. InternalEditorUtility.RepaintAllViews();
  41. }
  42. }
  43. }
  44. }