12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- using UnityEditor;
- using UnityEditorInternal;
- using UnityEngine;
- namespace EnhancedHierarchy.Icons {
- public sealed class Lock : IconBase {
- public override IconPosition Side { get { return IconPosition.All; } }
- public override Texture2D PreferencesPreview { get { return Utility.GetBackground(Styles.lockToggleStyle, false); } }
- //public override string PreferencesTooltip { get { return "Some tag for the tooltip here"; } }
- public override void DoGUI(Rect rect) {
- var locked = (EnhancedHierarchy.CurrentGameObject.hideFlags & HideFlags.NotEditable) != 0;
- using(new GUIBackgroundColor(locked ? Styles.backgroundColorEnabled : Styles.backgroundColorDisabled)) {
- GUI.changed = false;
- GUI.Toggle(rect, locked, Styles.lockContent, Styles.lockToggleStyle);
- if (!GUI.changed)
- return;
- var selectedObjects = GetSelectedObjectsAndCurrent();
- var changeMode = AskChangeModeIfNecessary(selectedObjects, Preferences.LockAskMode.Value, "Lock Object",
- "Do you want to " + (!locked ? "lock" : "unlock") + " the children objects as well?");
- switch (changeMode) {
- case ChildrenChangeMode.ObjectOnly:
- foreach (var obj in selectedObjects)
- Undo.RegisterCompleteObjectUndo(obj, locked ? "Unlock Object" : "Lock Object");
- foreach (var obj in selectedObjects)
- if (!locked)
- Utility.LockObject(obj);
- else
- Utility.UnlockObject(obj);
- break;
- case ChildrenChangeMode.ObjectAndChildren:
- foreach (var obj in selectedObjects)
- Undo.RegisterFullObjectHierarchyUndo(obj, locked ? "Unlock Object" : "Lock Object");
- foreach (var obj in selectedObjects)
- foreach (var transform in obj.GetComponentsInChildren<Transform>(true))
- if (!locked)
- Utility.LockObject(transform.gameObject);
- else
- Utility.UnlockObject(transform.gameObject);
- break;
- }
- InternalEditorUtility.RepaintAllViews();
- }
- }
- }
- }
|