Esempio n. 1
0
        private static void Init(GameObject[] selected)
        {
            _scrollPos        = Vector2.zero;
            _selectedGameObjs = selected;
            _backgroundColors = new Color[_selectedGameObjs.Length];
            _fontColors       = new Color[_selectedGameObjs.Length];
            _fontStyles       = new FontStyle[_selectedGameObjs.Length];
            _styleDefault     = FontStyle.Normal;

            _skinDefault = EditorGUIUtility.isProSkin ? HierarchyTools.DefaultProSkin : HierarchyTools.DefaultSkin;
            _fontDefault = EditorGUIUtility.isProSkin ? Color.white : Color.black;

            for (var i = 0; i < _backgroundColors.Length; i++)
            {
                _backgroundColors[i] = _skinDefault;
                _fontColors[i]       = _fontDefault;
                _fontStyles[i]       = _styleDefault;
            }

            _inSceneTracker = FindObjectOfType <InSceneTracker>();
            if (_inSceneTracker == null)
            {
                var tracker = new GameObject(TrackerName, typeof(InSceneTracker))
                {
                    hideFlags = HideFlags.HideInHierarchy,
                    tag       = EditorOnly
                };

                _inSceneTracker = tracker.GetComponent <InSceneTracker>();
            }

            EditorSceneManager.MarkAllScenesDirty();
            var window = GetWindow(typeof(ColorPicker), true, ChangeStyle);
            var icon   = Resources.Load("FuzzyToolsIcon") as Texture2D;

            if (icon == null)
            {
                return;
            }
            window.titleContent.image = icon;
        }
Esempio n. 2
0
        private static void GetPreferences()
        {
            FuzzyTools.inActiveColor = EditorGUIUtility.isProSkin ? DefaultSkin : DefaultProSkin;
            FuzzyTools.PrimaryColor  = EditorGUIUtility.isProSkin ? DefaultProSkin : DefaultSkin;
            FuzzyTools.colorMode     =
                (CustomColorType)FuzzyHelper.GetEditorPrefInt(ColorMode, (int)FuzzyTools.colorMode);
            FuzzyTools.gameObjectFontColor =
                FuzzyHelper.GetEditorPrefColor(GoFontColor, FuzzyTools.gameObjectFontColor);
            FuzzyTools.prefabOrgFontColor =
                FuzzyHelper.GetEditorPrefColor(PrefFontColor, FuzzyTools.prefabOrgFontColor);
            FuzzyTools.inActiveColor     = FuzzyHelper.GetEditorPrefColor(InactiveColor, FuzzyTools.inActiveColor);
            FuzzyTools.inActiveFontColor =
                FuzzyHelper.GetEditorPrefColor(InactiveFontColor, FuzzyTools.inActiveFontColor);
            FuzzyTools.standardFont =
                (FontStyle)FuzzyHelper.GetEditorPrefInt(StandardFont, (int)FuzzyTools.standardFont);
            FuzzyTools.prefebFont       = (FontStyle)FuzzyHelper.GetEditorPrefInt(PrefabFont, (int)FuzzyTools.prefebFont);
            FuzzyTools.autoInvertColors =
                FuzzyHelper.GetEditorPrefBool(AutoInvert, FuzzyTools.autoInvertColors);
            FuzzyTools.hierarchyColor1     = FuzzyHelper.GetEditorPrefColor(HierarchyColor1, FuzzyTools.hierarchyColor1);
            FuzzyTools.hierarchyColor2     = FuzzyHelper.GetEditorPrefColor(HierarchyColor2, FuzzyTools.hierarchyColor2);
            FuzzyTools.hierarchyColor3     = FuzzyHelper.GetEditorPrefColor(HierarchyColor3, FuzzyTools.hierarchyColor3);
            FuzzyTools.hierarchyColor4     = FuzzyHelper.GetEditorPrefColor(HierarchyColor4, FuzzyTools.hierarchyColor4);
            FuzzyTools.hierarchyColor5     = FuzzyHelper.GetEditorPrefColor(HierarchyColor5, FuzzyTools.hierarchyColor5);
            FuzzyTools.PrimaryColor        = FuzzyHelper.GetEditorPrefColor(PrimaryColor, FuzzyTools.PrimaryColor);
            FuzzyTools.secondaryColor      = FuzzyHelper.GetEditorPrefColor(SecondaryColor, FuzzyTools.secondaryColor);
            FuzzyTools.uniformChangeColors =
                FuzzyHelper.GetEditorPrefBool(UniformChange, FuzzyTools.uniformChangeColors);

            sceneTracker = Object.FindObjectOfType <InSceneTracker>();
            if (sceneTracker != null && FuzzyTools.colorMode != CustomColorType.CustomColors)
            {
                return;
            }
            var sceneTrackerObj = new GameObject(TrackerName, typeof(InSceneTracker))
            {
                hideFlags = HideFlags.HideInHierarchy,
                tag       = EditorOnly
            };

            sceneTracker = sceneTrackerObj.GetComponent <InSceneTracker>();
        }
Esempio n. 3
0
        private static void HandleHierarchyWindowItemOnGui(int instanceID, Rect selectionRect)
        {
            var obj = EditorUtility.InstanceIDToObject(instanceID);

            if (obj == null)
            {
                return;
            }

            var fontColor       = FuzzyTools.gameObjectFontColor;
            var defaultColor    = EditorGUIUtility.isProSkin ? DefaultProSkin : DefaultSkin;
            var backgroundColor = defaultColor;
            var styleFont       = FuzzyTools.standardFont;
            var gameObj         = EditorUtility.InstanceIDToObject(instanceID) as GameObject;

            if (gameObj == null)
            {
                return;
            }
#if UNITY_2017 || UNITY_2018_1 || UNITY_2018_2
            var prefabType = PrefabUtility.GetPrefabType(obj);
#endif
#if UNITY_2018_3_OR_NEWER
            var prefabType = PrefabUtility.GetPrefabAssetType(obj);
#endif
            var offsetRect = new Rect(selectionRect.position + Offset, selectionRect.size);

            switch (FuzzyTools.colorMode)
            {
            case CustomColorType.Off:

                break;

            case CustomColorType.AutoColors:
                /*******************AUTO_COLOR_MODE****************************/
                var gameObjectFontColor = FuzzyTools.gameObjectFontColor;
                var prefabOrgFontColor  = FuzzyTools.prefabOrgFontColor;
                var inActiveColor       = FuzzyTools.inActiveColor;
                var inActiveFontColor   = FuzzyTools.inActiveFontColor;
                var standardFont        = FuzzyTools.standardFont;
                var prefebFont          = FuzzyTools.prefebFont;
                var autoInvertColors    = FuzzyTools.autoInvertColors;
                /**************************************************************/

                if (Selection.instanceIDs.Contains(instanceID))
                {
                    backgroundColor = DefaultSelected;
                }
                else if (gameObj.activeInHierarchy == false)
                {
                    backgroundColor = inActiveColor;
                    fontColor       = autoInvertColors
                            ? new Color(1 - inActiveColor.r, 1 - inActiveColor.g, 1 - inActiveColor.b, 1)
                            : inActiveFontColor;
                    if (fontColor == inActiveColor)
                    {
                        fontColor += new Color(.25f, .25f, .25f);
                    }
                }
#if UNITY_2017 || UNITY_2018_1 || UNITY_2018_2
                else if (prefabType == PrefabType.PrefabInstance)
#endif
#if UNITY_2018_3_OR_NEWER
                else if (prefabType == PrefabAssetType.Regular)
#endif
                {
                    styleFont = prefebFont;
                    fontColor = gameObj.activeInHierarchy? prefabOrgFontColor: new Color(prefabOrgFontColor.r,
                                                                                         prefabOrgFontColor.g, prefabOrgFontColor.b, DefaultInactiveAlpha);
                }
                else
                {
                    fontColor = gameObjectFontColor;
                    styleFont = standardFont;
                }
                EditorGUI.DrawRect(selectionRect, backgroundColor);
                EditorGUI.LabelField(offsetRect, obj.name, new GUIStyle()
                {
                    normal = new GUIStyleState()
                    {
                        textColor = fontColor
                    },
                    fontStyle = styleFont
                }
                                     );
                break;

            case CustomColorType.CustomColors:

                styleFont = FontStyle.Normal;
                if (sceneTracker == null)
                {
                    sceneTracker = Object.FindObjectOfType <InSceneTracker>();
                    if (sceneTracker == null)
                    {
                        var sceneTrackerObj =
                            new GameObject(TrackerName, typeof(InSceneTracker))
                        {
                            hideFlags = HideFlags.HideInHierarchy,
                            tag       = EditorOnly
                        };

                        sceneTracker = sceneTrackerObj.GetComponent <InSceneTracker>();
                    }
                }

                if (Selection.instanceIDs.Contains(instanceID))
                {
                    backgroundColor = DefaultSelected;
                }
#if UNITY_2017 || UNITY_2018_1 || UNITY_2018_2
                else if (prefabType == PrefabType.None)
#endif
#if UNITY_2018_3_OR_NEWER
                else if (prefabType == PrefabAssetType.NotAPrefab)
#endif
                {
                    fontColor   = DefaultFontColor;
                    fontColor.a = gameObj.activeInHierarchy ? 1 : DefaultInactiveAlpha;
                    if (fontColor == backgroundColor)
                    {
                        fontColor += new Color(.25f, .25f, .25f);
                    }
                }
#if UNITY_2017 || UNITY_2018_1 || UNITY_2018_2
                else if (prefabType == PrefabType.PrefabInstance)
#endif
#if UNITY_2018_3_OR_NEWER
                else if (prefabType == PrefabAssetType.Regular)
#endif
                {
                    fontColor   = DefaultPrefabFontColor;
                    fontColor.a = gameObj.activeInHierarchy ? 1 : DefaultInactiveAlpha;
                }

                var currentObj        = EditorUtility.InstanceIDToObject(instanceID);
                var customObjs        = sceneTracker.customizedObjs;
                var customizedOptions = sceneTracker.options;
                if (currentObj == null)
                {
                    break;
                }
                if (customObjs.Contains(currentObj))
                {
                    var index = customObjs.IndexOf(currentObj);
                    backgroundColor = customizedOptions[index].backgroundColor;
                    fontColor       = customizedOptions[index].fontColor;
                    styleFont       = customizedOptions[index].style;
                }
                EditorGUI.DrawRect(selectionRect, backgroundColor);
                EditorGUI.LabelField(offsetRect, obj.name, new GUIStyle()
                {
                    normal = new GUIStyleState()
                    {
                        textColor = fontColor
                    },
                    fontStyle = styleFont
                }
                                     );
                break;

            case CustomColorType.Hierarchy:
                /****************HIERARCHY_COLOR_MODE**************************/
                var hierarchyColor1 = FuzzyTools.hierarchyColor1;
                var hierarchyColor2 = FuzzyTools.hierarchyColor2;
                var hierarchyColor3 = FuzzyTools.hierarchyColor3;
                var hierarchyColor4 = FuzzyTools.hierarchyColor4;
                var hierarchyColor5 = FuzzyTools.hierarchyColor5;
                /**************************************************************/

                styleFont = FontStyle.Normal;
                if (Selection.instanceIDs.Contains(instanceID))
                {
                    backgroundColor = DefaultSelected;
                }
#if UNITY_2017 || UNITY_2018_1 || UNITY_2018_2
                else if (prefabType == PrefabType.None)
#endif
#if UNITY_2018_3_OR_NEWER
                else if (prefabType == PrefabAssetType.NotAPrefab)
#endif
                {
                    fontColor   = DefaultFontColor;
                    fontColor.a = gameObj.activeInHierarchy ? 1 : DefaultInactiveAlpha;
                    if (fontColor == backgroundColor)
                    {
                        fontColor += new Color(.25f, .25f, .25f);
                    }
                }
#if UNITY_2017 || UNITY_2018_1 || UNITY_2018_2
                else if (prefabType == PrefabType.PrefabInstance)
#endif
#if UNITY_2018_3_OR_NEWER
                else if (prefabType == PrefabAssetType.Regular)
#endif
                {
                    fontColor   = DefaultPrefabFontColor;
                    fontColor.a = gameObj.activeInHierarchy ? 1: DefaultInactiveAlpha;
                }
                if (backgroundColor != DefaultSelected)
                {
                    var parentCount = 0.0f;
                    var parent      = gameObj.transform.parent;
                    while (parent != null)
                    {
                        parentCount += .05f;
                        parent       = parent.parent;
                    }
                    if (parentCount > 0 && parentCount <= .25)
                    {
                        backgroundColor = hierarchyColor1 - (hierarchyColor1 * parentCount);
                    }
                    else if (parentCount > .25f && parentCount <= .5f)
                    {
                        parentCount    -= .25f;
                        backgroundColor = hierarchyColor2 - (hierarchyColor2 * (parentCount * 2));
                    }
                    else if (parentCount > .5f && parentCount <= .75f)
                    {
                        parentCount    -= .5f;
                        backgroundColor = hierarchyColor3 - (hierarchyColor3 * (parentCount * 2));
                    }
                    else if (parentCount > .75f && parentCount <= 1f)
                    {
                        parentCount    -= .75f;
                        backgroundColor = hierarchyColor4 - (hierarchyColor4 * (parentCount * 2));
                    }
                    else if (parentCount > 1f && parentCount <= 1.5f)
                    {
                        parentCount    -= 1f;
                        backgroundColor = hierarchyColor5 - (hierarchyColor5 * (parentCount * 2));
                    }
                }
                EditorGUI.DrawRect(selectionRect, backgroundColor);
                EditorGUI.LabelField(offsetRect, obj.name, new GUIStyle()
                {
                    normal = new GUIStyleState()
                    {
                        textColor = fontColor
                    },
                    fontStyle = styleFont
                }
                                     );
                break;

            case CustomColorType.VariedColor:
                /***************VARIED_COLOR_MODE*****************/
                var primaryColor   = FuzzyTools.PrimaryColor;
                var secondaryColor = FuzzyTools.secondaryColor;
                /*************************************************/

                styleFont = FontStyle.Normal;
                if (Selection.instanceIDs.Contains(instanceID))
                {
                    backgroundColor = DefaultSelected;
                }
#if UNITY_2017 || UNITY_2018_1 || UNITY_2018_2
                else if (prefabType == PrefabType.None)
#endif
#if UNITY_2018_3_OR_NEWER
                else if (prefabType == PrefabAssetType.NotAPrefab)
#endif
                {
                    fontColor   = DefaultFontColor;
                    fontColor.a = gameObj.activeInHierarchy ? 1 : DefaultInactiveAlpha;
                    if (fontColor == backgroundColor)
                    {
                        fontColor += new Color(.25f, .25f, .25f);
                    }
                }
#if UNITY_2017 || UNITY_2018_1 || UNITY_2018_2
                else if (prefabType == PrefabType.PrefabInstance)
#endif
#if UNITY_2018_3_OR_NEWER
                else if (prefabType == PrefabAssetType.Regular)
#endif
                {
                    fontColor   = DefaultPrefabFontColor;
                    fontColor.a = gameObj.activeInHierarchy ? 1 : DefaultInactiveAlpha;
                }
                if (backgroundColor != DefaultSelected)
                {
                    backgroundColor = _everyOther ? primaryColor : secondaryColor;
                }
                _everyOther = !_everyOther;
                EditorGUI.DrawRect(selectionRect, backgroundColor);
                EditorGUI.LabelField(offsetRect, obj.name, new GUIStyle()
                {
                    normal = new GUIStyleState()
                    {
                        textColor = fontColor
                    },
                    fontStyle = styleFont
                }
                                     );
                break;
            }
        }