GameObjectIcon.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using System.Linq;
  2. using UnityEditor;
  3. using UnityEngine;
  4. namespace EnhancedHierarchy.Icons {
  5. public sealed class GameObjectIcon : IconBase {
  6. private GUIContent lastContent;
  7. public override string Name { get { return "GameObject Icon"; } }
  8. public override IconPosition Side { get { return IconPosition.All; } }
  9. public override float Width { get { return lastContent.image ? base.Width : 0f; } }
  10. public override Texture2D PreferencesPreview { get { return AssetPreview.GetMiniTypeThumbnail(typeof(GameObject)); } }
  11. //public override string PreferencesTooltip { get { return "Some tag for the tooltip here"; } }
  12. public override void Init() {
  13. if (lastContent == null)
  14. lastContent = new GUIContent();
  15. lastContent.text = string.Empty;
  16. lastContent.image = Preferences.HideDefaultIcon ? // Fix #46
  17. Reflected.GetObjectIcon(EnhancedHierarchy.CurrentGameObject) :
  18. AssetPreview.GetMiniThumbnail(EnhancedHierarchy.CurrentGameObject);
  19. lastContent.tooltip = Preferences.Tooltips && !Preferences.RelevantTooltipsOnly ? "Change Icon" : string.Empty;
  20. }
  21. public override void DoGUI(Rect rect) {
  22. using(ProfilerSample.Get()) {
  23. rect.yMin++;
  24. rect.xMin++;
  25. GUI.changed = false;
  26. GUI.Button(rect, lastContent, EditorStyles.label);
  27. if (!GUI.changed)
  28. return;
  29. var affectedObjsList = GetSelectedObjectsAndCurrent();
  30. var affectedObjsEnum = affectedObjsList.AsEnumerable();
  31. var changeMode = AskChangeModeIfNecessary(affectedObjsList, Preferences.IconAskMode.Value, "Change Icons", "Do you want to change children icons as well?");
  32. switch (changeMode) {
  33. case ChildrenChangeMode.ObjectAndChildren:
  34. affectedObjsEnum = affectedObjsEnum.SelectMany(go => go.GetComponentsInChildren<Transform>(true).Select(t => t.gameObject));
  35. break;
  36. }
  37. affectedObjsEnum = affectedObjsEnum.Distinct();
  38. var affectedObjsArray = affectedObjsEnum.ToArray();
  39. foreach (var obj in affectedObjsArray)
  40. Undo.RegisterCompleteObjectUndo(obj, "Icon Changed");
  41. Reflected.ShowIconSelector(affectedObjsArray, rect, true);
  42. }
  43. }
  44. }
  45. }