Ejemplo n.º 1
0
        private void Initialize()
        {
            if (initialized)
            {
                return;
            }

            titleContent = new GUIContent("CompressCheckWindow");
            minSize      = new Vector2(650f, 450f);

            var config = TextureAssetTunerConfig.Instance;

            viewMode      = ViewMode.SelectFolder;
            assetViewMode = AssetViewMode.Asset;

            tabprevIcon      = EditorGUIUtility.IconContent("tab_prev");
            viewToolZoomIcon = EditorGUIUtility.IconContent("ViewToolZoom");

            compressFolderInfos = new CompressFolderInfo[0];

            // Initialize search view.
            compressFolderScrollView = new CompressFolderScrollView();

            compressFolderScrollView.AssetViewMode = assetViewMode;

            compressFolderScrollView.OnSearchRequestAsObservable()
            .Subscribe(x =>
            {
                var infos = GetCompressFolderInfo(new Object[] { x });

                if (infos.Any())
                {
                    var info = infos.FirstOrDefault();

                    textureAssetInfos = info.textureAssetInfos;
                    textureAssetInfoScrollView.Contents = GetFilteredTextureAssetInfos();
                    viewMode = ViewMode.SearchResult;

                    var index = compressFolderInfos.IndexOf(y => y.folder == info.folder);

                    if (index != -1)
                    {
                        compressFolderInfos[index] = info;
                    }

                    Repaint();
                }
            })
            .AddTo(Disposable);

            compressFolderScrollView.Contents = config.CompressFolders;

            // Initialize result view.
            textureAssetInfoScrollView = new TextureAssetInfoScrollView();
            textureAssetInfoScrollView.AssetViewMode = assetViewMode;

            initialized = true;

            Show();
        }
Ejemplo n.º 2
0
        protected override void DrawHeaderContent()
        {
            GUILayout.Space(5f);

            EditorGUI.BeginChangeCheck();

            var mode = (AssetViewMode)EditorGUILayout.EnumPopup(assetViewMode, GUILayout.Width(60f));

            if (EditorGUI.EndChangeCheck())
            {
                assetViewMode = mode;
            }

            GUILayout.Space(4f);
        }
Ejemplo n.º 3
0
        void OnGUI()
        {
            var e = Event.current;

            if (textAreaStyle == null)
            {
                textAreaStyle              = GUI.skin.GetStyle("TextArea");
                textAreaStyle.alignment    = TextAnchor.MiddleLeft;
                textAreaStyle.wordWrap     = false;
                textAreaStyle.stretchWidth = true;
            }

            GUILayout.Space(3f);

            if (current != null)
            {
                using (new EditorGUILayout.HorizontalScope())
                {
                    GUILayout.FlexibleSpace();

                    assetViewMode = (AssetViewMode)EditorGUILayout.EnumPopup(assetViewMode, GUILayout.Width(60f));

                    GUILayout.Space(5f);

                    EditorGUI.BeginChangeCheck();

                    searchText = EditorGUILayout.TextField(string.Empty, searchText, "SearchTextField", GUILayout.Width(200f));

                    if (EditorGUI.EndChangeCheck())
                    {
                        dependencies   = GetDependencies(current);
                        scrollPosition = Vector2.zero;
                    }

                    if (GUILayout.Button(string.Empty, "SearchCancelButton", GUILayout.Width(18f)))
                    {
                        searchText = string.Empty;
                        GUIUtility.keyboardControl = 0;
                        dependencies   = GetDependencies(current);
                        scrollPosition = Vector2.zero;
                    }
                }

                GUILayout.Space(3f);

                var targetAsset = AssetDatabase.LoadMainAssetAtPath(current.AssetPath);

                EditorGUILayout.ObjectField(targetAsset, typeof(Object), false);

                GUILayout.Space(3f);

                if (dependencies.Any())
                {
                    EditorLayoutTools.Title("Dependencies");

                    GUILayout.Space(-2f);

                    using (var scrollViewScope = new EditorGUILayout.ScrollViewScope(scrollPosition))
                    {
                        using (new ContentsScope())
                        {
                            foreach (var assetPath in dependencies)
                            {
                                switch (assetViewMode)
                                {
                                case AssetViewMode.Asset:
                                {
                                    var asset = AssetDatabase.LoadMainAssetAtPath(assetPath);
                                    EditorGUILayout.ObjectField(asset, typeof(Object), false);
                                }
                                break;

                                case AssetViewMode.Path:
                                {
                                    using (new EditorGUILayout.HorizontalScope())
                                    {
                                        EditorGUILayout.SelectableLabel(assetPath, textAreaStyle, GUILayout.Height(16f));

                                        if (GUILayout.Button("select", EditorStyles.miniButton, GUILayout.Width(50f), GUILayout.Height(16f)))
                                        {
                                            var asset = AssetDatabase.LoadMainAssetAtPath(assetPath);
                                            Selection.activeObject = asset;
                                        }
                                    }
                                }
                                break;
                                }

                                GUILayout.Space(1f);
                            }

                            scrollPosition = scrollViewScope.scrollPosition;
                        }
                    }
                }
                else
                {
                    EditorGUILayout.HelpBox("This object has no dependencies.", MessageType.Warning);
                }
            }
            else
            {
                EditorGUILayout.HelpBox("Drag and drop asset.", MessageType.Info);
            }

            // ドロップエリア.
            switch (Event.current.type)
            {
            case EventType.DragUpdated:
            case EventType.DragPerform:

                var validate = ValidateDragAndDrop(DragAndDrop.objectReferences);

                DragAndDrop.visualMode = validate ? DragAndDropVisualMode.Copy : DragAndDropVisualMode.Rejected;

                if (e.type == EventType.DragPerform)
                {
                    DragAndDrop.AcceptDrag();
                    DragAndDrop.activeControlID = 0;

                    if (validate)
                    {
                        Set(DragAndDrop.objectReferences.FirstOrDefault());
                    }
                }

                break;
            }
        }
Ejemplo n.º 4
0
        private void DrawContents()
        {
            var labelBackgroundColor = new Color(0.2f, 0.8f, 0.5f, 0.8f);

            EditorLayoutTools.DrawLabelWithBackground("ShaderVariantCollection", labelBackgroundColor, EditorLayoutTools.LabelColor);

            EditorGUI.BeginChangeCheck();

            shaderVariantCollection = EditorLayoutTools.ObjectField(shaderVariantCollection, false);

            if (EditorGUI.EndChangeCheck())
            {
                targetFolder = null;
                shaderInfos.Clear();
                scrollPosition = Vector2.zero;
            }

            GUILayout.Space(2f);

            EditorLayoutTools.DrawLabelWithBackground("TargetFolder", labelBackgroundColor, EditorLayoutTools.LabelColor);

            EditorGUI.BeginChangeCheck();

            targetFolder = EditorLayoutTools.ObjectField(targetFolder, false);

            if (EditorGUI.EndChangeCheck())
            {
                if (!UnityEditorUtility.IsFolder(targetFolder))
                {
                    targetFolder = null;
                }

                shaderInfos.Clear();
                scrollPosition = Vector2.zero;
            }

            GUILayout.Space(2f);

            if (shaderVariantCollection != null)
            {
                if (shaderInfos.IsEmpty())
                {
                    EditorGUILayout.HelpBox("Please search shader.", MessageType.Info);
                }
                else
                {
                    using (new EditorGUILayout.HorizontalScope())
                    {
                        EditorLayoutTools.DrawLabelWithBackground("Shaders", labelBackgroundColor, EditorLayoutTools.LabelColor);

                        assetViewMode = (AssetViewMode)EditorGUILayout.EnumPopup(assetViewMode, GUILayout.Width(60f));
                    }

                    using (new EditorGUILayout.HorizontalScope())
                    {
                        if (GUILayout.Button("add all", GUILayout.Width(120f)))
                        {
                            shaderInfos.ForEach(x => x.add = true);
                        }

                        if (GUILayout.Button("remove all", GUILayout.Width(120f)))
                        {
                            shaderInfos.ForEach(x => x.add = false);
                        }

                        GUILayout.FlexibleSpace();
                    }

                    using (var scrollViewScope = new EditorGUILayout.ScrollViewScope(scrollPosition))
                    {
                        using (new ContentsScope())
                        {
                            foreach (var shaderInfo in shaderInfos)
                            {
                                using (new EditorGUILayout.HorizontalScope())
                                {
                                    shaderInfo.add = EditorGUILayout.Toggle(shaderInfo.add, GUILayout.Width(20f));

                                    switch (assetViewMode)
                                    {
                                    case AssetViewMode.Asset:
                                        EditorLayoutTools.ObjectField(shaderInfo.shader, false, GUILayout.Height(15f));
                                        break;

                                    case AssetViewMode.Path:
                                        EditorGUILayout.SelectableLabel(shaderInfo.assetPath, GUILayout.Height(15f));
                                        break;
                                    }
                                }

                                GUILayout.Space(2f);
                            }
                        }

                        scrollPosition = scrollViewScope.scrollPosition;
                    }
                }

                GUILayout.Space(2f);

                GUILayout.FlexibleSpace();

                using (new EditorGUILayout.HorizontalScope())
                {
                    GUILayout.FlexibleSpace();

                    if (GUILayout.Button("Search", GUILayout.Width(150f)))
                    {
                        BuildShaderInfos();
                    }

                    GUILayout.Space(20f);

                    using (new DisableScope(shaderInfos.IsEmpty()))
                    {
                        if (GUILayout.Button("Update", GUILayout.Width(150f)))
                        {
                            ApplyShaderVariantCollection();
                        }
                    }

                    GUILayout.FlexibleSpace();
                }
            }
            else
            {
                EditorGUILayout.HelpBox("Select shaderVariant file.", MessageType.Info);
            }
        }
Ejemplo n.º 5
0
        void OnGUI()
        {
            if (!initialized)
            {
                Initialize();
            }

            EditorGUILayout.Separator();

            using (new EditorGUILayout.HorizontalScope())
            {
                var config = TextureAssetTunerConfig.Instance;

                if (GUILayout.Button(viewToolZoomIcon, EditorStyles.miniButton, GUILayout.Width(24f), GUILayout.Height(15f)))
                {
                    var allFolders = config.CompressFolders;

                    compressFolderInfos = GetCompressFolderInfo(allFolders);

                    textureAssetInfos = null;
                    viewMode          = ViewMode.SelectFolder;

                    Repaint();
                }

                EditorGUILayout.ObjectField(config, typeof(TextureAssetTunerConfig), false, GUILayout.Width(400f));

                if (viewMode == ViewMode.SearchResult)
                {
                    if (GUILayout.Button(tabprevIcon, EditorStyles.miniButton, GUILayout.Width(30f), GUILayout.Height(15f)))
                    {
                        viewMode = ViewMode.SelectFolder;
                        compressFolderScrollView.Contents = config.CompressFolders;
                    }
                }

                GUILayout.FlexibleSpace();

                EditorGUI.BeginChangeCheck();

                assetViewMode = (AssetViewMode)EditorGUILayout.EnumPopup(assetViewMode, GUILayout.Width(60f));

                if (EditorGUI.EndChangeCheck())
                {
                    compressFolderScrollView.AssetViewMode   = assetViewMode;
                    textureAssetInfoScrollView.AssetViewMode = assetViewMode;
                    Repaint();
                }

                var originLabelWidth = EditorLayoutTools.SetLabelWidth(70f);

                EditorGUI.BeginChangeCheck();

                failedOnly = EditorGUILayout.Toggle("Failed Only", failedOnly, GUILayout.Width(90f));

                if (EditorGUI.EndChangeCheck())
                {
                    if (viewMode == ViewMode.SearchResult)
                    {
                        textureAssetInfoScrollView.Contents = GetFilteredTextureAssetInfos();
                    }

                    Repaint();
                }

                EditorLayoutTools.SetLabelWidth(originLabelWidth);

                GUILayout.Space(5f);
            }

            EditorGUILayout.Separator();

            EditorLayoutTools.DrawLabelWithBackground("Assets");

            switch (viewMode)
            {
            case ViewMode.SelectFolder:
                compressFolderScrollView.CompressFolderInfos = compressFolderInfos;
                compressFolderScrollView.Draw();
                break;

            case ViewMode.SearchResult:
                textureAssetInfoScrollView.Draw();
                break;
            }
        }
Ejemplo n.º 6
0
        void OnGUI()
        {
            GUILayout.Space(5f);

            using (new EditorGUILayout.HorizontalScope())
            {
                GUILayout.Space(5f);

                using (new EditorGUILayout.VerticalScope())
                {
                    GUILayout.Space(5f);

                    using (new EditorGUILayout.HorizontalScope())
                    {
                        GUILayout.FlexibleSpace();

                        assetViewMode = (AssetViewMode)EditorGUILayout.EnumPopup(assetViewMode, GUILayout.Width(60f));

                        GUILayout.Space(5f);

                        string before = searchText;
                        string after  = EditorGUILayout.TextField(string.Empty, before, "SearchTextField", GUILayout.Width(200f));

                        if (before != after)
                        {
                            searchText     = after;
                            scrollPosition = Vector2.zero;
                        }

                        if (GUILayout.Button(string.Empty, "SearchCancelButton", GUILayout.Width(18f)))
                        {
                            searchText = string.Empty;
                            GUIUtility.keyboardControl = 0;
                            scrollPosition             = Vector2.zero;
                        }
                    }

                    GUILayout.Space(5f);

                    var list = GetMatchOfList();

                    if (list.Any())
                    {
                        using (var scrollViewScope = new EditorGUILayout.ScrollViewScope(scrollPosition))
                        {
                            foreach (var item in list)
                            {
                                using (new EditorGUILayout.HorizontalScope())
                                {
                                    var asset = assetObjectByAssetPath.GetValueOrDefault(item.assetPath);

                                    if (asset != null)
                                    {
                                        EditorGUILayout.LabelField(item.GetSizeText(), GUILayout.Width(70f));

                                        EditorGUILayout.LabelField(string.Format("{0}%", item.ratio), GUILayout.Width(50f));

                                        switch (assetViewMode)
                                        {
                                        case AssetViewMode.Asset:
                                            EditorGUILayout.ObjectField(asset, typeof(Object), false, GUILayout.MinWidth(250f));
                                            break;

                                        case AssetViewMode.Path:
                                            EditorGUILayout.DelayedTextField(item.assetPath, GUILayout.MinWidth(250f));
                                            break;
                                        }

                                        var isInvalidAsset =
                                            !builtInAssetTargetPaths.Any(x => item.assetPath.StartsWith(x)) ||          // 指定ディレクトリ以外のディレクトリに存在.
                                            ignoreBuiltInAssetTargetPaths.Any(x => item.assetPath.StartsWith(x)) ||     // 含まれてはいけないディレクトリに存在.
                                            ignoreBuiltInFolderNames.Any(x => item.assetPath.Split('/').Contains(x));   // 含まれていけないフォルダ名が含まれているか.

                                        var titleStyle = new EditorLayoutTools.TitleGUIStyle();

                                        // 指定されたAsset置き場にない or 同梱しないAsset置き場のAssetが混入.
                                        if (isInvalidAsset)
                                        {
                                            titleStyle.backgroundColor = Color.red;
                                            titleStyle.labelColor      = Color.gray;
                                            titleStyle.width           = 85f;

                                            EditorLayoutTools.Title("InvalidAsset", titleStyle);
                                        }

                                        // ファイルサイズが指定された値を超えている.
                                        if (warningAssetSize <= item.size)
                                        {
                                            titleStyle.backgroundColor = Color.yellow;
                                            titleStyle.labelColor      = Color.gray;
                                            titleStyle.width           = 80f;

                                            EditorLayoutTools.Title("LargeAsset", titleStyle);
                                        }

                                        GUILayout.Space(5f);
                                    }
                                }
                            }

                            scrollPosition = scrollViewScope.scrollPosition;
                        }
                    }
                    else
                    {
                        EditorGUILayout.HelpBox("Asset Not Found.", MessageType.Info);
                    }

                    GUILayout.Space(5f);
                }

                GUILayout.Space(5f);
            }
        }