Beispiel #1
0
        public static MultiColumnHeaderState CreateDefaultMultiColumnHeaderState(float treeViewWidth)
        {
            var columns = new[]
            {
                new MultiColumnHeaderState.Column
                {
                    headerContent         = new GUIContent(EditorGUIUtility.FindTexture("FilterByLabel"), "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "),
                    contextMenuText       = "Asset",
                    headerTextAlignment   = TextAlignment.Center,
                    sortedAscending       = true,
                    sortingArrowAlignment = TextAlignment.Right,
                    width                 = 30,
                    minWidth              = 30,
                    maxWidth              = 60,
                    autoResize            = false,
                    allowToggleVisibility = true
                },
                new MultiColumnHeaderState.Column
                {
                    headerContent         = new GUIContent(EditorGUIUtility.FindTexture("FilterByType"), "Sed hendrerit mi enim, eu iaculis leo tincidunt at."),
                    contextMenuText       = "Type",
                    headerTextAlignment   = TextAlignment.Center,
                    sortedAscending       = true,
                    sortingArrowAlignment = TextAlignment.Right,
                    width                 = 30,
                    minWidth              = 30,
                    maxWidth              = 60,
                    autoResize            = false,
                    allowToggleVisibility = true
                },
                new MultiColumnHeaderState.Column
                {
                    headerContent         = new GUIContent("Name"),
                    headerTextAlignment   = TextAlignment.Left,
                    sortedAscending       = true,
                    sortingArrowAlignment = TextAlignment.Center,
                    width                 = 150,
                    minWidth              = 60,
                    autoResize            = false,
                    allowToggleVisibility = false
                },
                new MultiColumnHeaderState.Column
                {
                    headerContent         = new GUIContent("Multiplier", "In sed porta ante. Nunc et nulla mi."),
                    headerTextAlignment   = TextAlignment.Right,
                    sortedAscending       = true,
                    sortingArrowAlignment = TextAlignment.Left,
                    width      = 110,
                    minWidth   = 60,
                    autoResize = true
                },
                new MultiColumnHeaderState.Column
                {
                    headerContent         = new GUIContent("Material", "Maecenas congue non tortor eget vulputate."),
                    headerTextAlignment   = TextAlignment.Right,
                    sortedAscending       = true,
                    sortingArrowAlignment = TextAlignment.Left,
                    width                 = 95,
                    minWidth              = 60,
                    autoResize            = true,
                    allowToggleVisibility = true
                },
                new MultiColumnHeaderState.Column
                {
                    headerContent         = new GUIContent("Note", "Nam at tellus ultricies ligula vehicula ornare sit amet quis metus."),
                    headerTextAlignment   = TextAlignment.Right,
                    sortedAscending       = true,
                    sortingArrowAlignment = TextAlignment.Left,
                    width      = 70,
                    minWidth   = 60,
                    autoResize = true
                },
                new MultiColumnHeaderState.Column
                {
                    headerContent         = new GUIContent("Properties", "Nam at tellus ultricies ligula vehicula ornare sit amet quis metus."),
                    headerTextAlignment   = TextAlignment.Right,
                    sortedAscending       = true,
                    sortingArrowAlignment = TextAlignment.Left,
                    width      = 70,
                    minWidth   = 60,
                    autoResize = true
                }
            };

            Assert.AreEqual(columns.Length, Enum.GetValues(typeof(MyColumns)).Length, "Number of columns should match number of enum values: You probably forgot to update one of them.");

            var state = new MultiColumnHeaderState(columns);

            return(state);
        }
        public override void OnDrawScrollArea()
        {
            GUILayout.Label(new GUIContent($"Event fixer will replace all saved EventData please be careful", EditorGUIUtility.FindTexture("console.erroricon")));
            foreach (var item in needFixEventData)
            {
                using (var horizon = new EditorGUILayout.HorizontalScope("box"))
                {
                    item.fix = EditorGUILayout.ToggleLeft(GUIContent.none, item.fix, GUILayout.Width(20));
                    using (var vertical = new EditorGUILayout.VerticalScope())
                    {
                        using (var horizon2 = new EditorGUILayout.HorizontalScope())
                        {
                            GUILayout.Label($"Method : [{item.originalMethodName}] in Script : [{item.originalScriptName}]");

                            using (var disable = new EditorGUI.DisabledGroupScope(!classMethodInfo.ContainsKey(item.originalScriptName)))
                            {
                                if (GUILayout.Button("Apply Origin Data"))
                                {
                                    item.modifyScriptName = item.originalScriptName;
                                    item.modifyMethodName = item.originalMethodName;
                                }
                            }
                        }
                        int currentSelectClass = string.IsNullOrEmpty(item.modifyScriptName) ? 0 : classMethodInfo.Values.ToList().IndexOf(classMethodInfo[item.modifyScriptName]);
                        using (var check = new EditorGUI.ChangeCheckScope())
                        {
                            currentSelectClass = EditorGUILayout.Popup("Event Script", currentSelectClass, classMethodInfo.Select(m => m.Key).ToArray());
                            if (check.changed)
                            {
                                ViewSystemLog.Log(currentSelectClass);
                                if (currentSelectClass != 0)
                                {
                                    var c = classMethodInfo.ElementAt(currentSelectClass);
                                    item.modifyScriptName = c.Key;
                                    item.modifyMethodName = "";
                                }
                                else
                                {
                                    item.modifyScriptName = "";
                                    item.modifyMethodName = "";
                                }
                            }
                        }
                        if (currentSelectClass != 0)
                        {
                            using (var check = new EditorGUI.ChangeCheckScope())
                            {
                                using (var horizon2 = new EditorGUILayout.HorizontalScope())
                                {
                                    var c       = classMethodInfo.ElementAt(currentSelectClass).Value;
                                    var current = c.SingleOrDefault(m => m.name == item.modifyMethodName);
                                    CMEditorLayout.GroupedPopupField(item.GetHashCode(), new GUIContent("Event Method"), c, current,
                                                                     (select) =>
                                    {
                                        item.modifyMethodName = select.name;
                                    }
                                                                     );
                                }
                            }
                        }
                    }
                }
            }
        }
        public void SetData(List <string> propertyCannotBeFound, IEnumerable <ViewSystemComponentData> allComponentDatas, ViewSystemSaveData saveData, Action OnComplete)
        {
            titleContent           = new GUIContent("Missing property fixer");
            this.allComponentDatas = allComponentDatas;
            this.icon  = EditorGUIUtility.FindTexture("MetaFile Icon");
            this.lable = "Select the property your wish to fix";
            fixerDatas = propertyCannotBeFound.Select(
                m =>
            {
                var x = m.Split(',');
                return(new { componentName = x[0], propertyName = x[1] });
            }
                ).GroupBy(m => m.componentName).ToDictionary(o => o.Key, o => o.Select(r => new FixerData(r.propertyName)).ToList());

            foreach (var item in fixerDatas)
            {
                var type = MacacaGames.Utility.GetType(item.Key);
                var fis  = type.GetFields(ViewSystemVerifier.bindingFlags).Select(m => new CMEditorLayout.GroupedPopupData {
                    name = m.Name, group = "Filed"
                });
                var pis = type.GetProperties(ViewSystemVerifier.bindingFlags).Select(m => new CMEditorLayout.GroupedPopupData {
                    name = m.Name, group = "Property"
                });

                List <CMEditorLayout.GroupedPopupData> gList = new List <CMEditorLayout.GroupedPopupData>();
                gList.AddRange(pis);
                gList.AddRange(fis);
                fieldsInComponents.Add(item.Key, gList);
            }
            OnAllClick += () =>
            {
                fixerDatas.All(x =>
                {
                    x.Value.All(
                        r =>
                    {
                        r.fix = true;
                        return(true);
                    }
                        );
                    return(true);
                });
            };
            OnNoneClick += () =>
            {
                fixerDatas.All(x =>
                {
                    x.Value.All(
                        r =>
                    {
                        r.fix = false;
                        return(true);
                    }
                        );
                    return(true);
                });
            };
            OnCancelClick += () =>
            {
            };
            OnApplyClick += () =>
            {
                foreach (var item in fixerDatas)
                {
                    var ac = allComponentDatas.Where(m => m.targetComponentType == item.Key);

                    foreach (var item2 in item.Value)
                    {
                        if (item2.delete && item2.fix == true)
                        {
                            foreach (var vp in saveData.viewPages)
                            {
                                foreach (var vpi in vp.viewPage.viewPageItems)
                                {
                                    vpi.overrideDatas.RemoveAll(m => m.targetComponentType == item.Key && m.targetPropertyName == item2.originalPropertyName);
                                }
                            }
                            foreach (var vs in saveData.viewStates)
                            {
                                foreach (var vpi in vs.viewState.viewPageItems)
                                {
                                    vpi.overrideDatas.RemoveAll(m => m.targetComponentType == item.Key && m.targetPropertyName == item2.originalPropertyName);
                                }
                            }
                            continue;
                        }
                        if (string.IsNullOrEmpty(item2.modifiedPropertyName))
                        {
                            continue;
                        }
                        if (item2.fix == false)
                        {
                            continue;
                        }
                        ac.Where(m => m.targetPropertyName == item2.originalPropertyName).All(
                            x =>
                        {
                            x.targetPropertyName = item2.modifiedPropertyName;
                            return(true);
                        }
                            );
                    }
                }
            };
        }
        private void OnEnable()
        {
            _prefabIcon = EditorGUIUtility.FindTexture("Prefab Icon");

            Selection.selectionChanged += HandleSelectionChanged;
        }
Beispiel #5
0
        void DrawInstallation()
        {
            SetWindowHeight(320f);

            if (EditorApplication.isCompiling)
            {
                EditorGUILayout.Space();
                EditorGUILayout.LabelField(new GUIContent(" Compiling scripts...", EditorGUIUtility.FindTexture("cs Script Icon")), Header);

                EditorGUILayout.Space();
                return;
            }

            if (StylizedWaterCore.compatibleVersion == false && StylizedWaterCore.untestedVersion == false)
            {
                GUI.contentColor = Color.red;
                EditorGUILayout.LabelField("This version of Unity is not supported.", EditorStyles.boldLabel);
                EditorGUILayout.Space();
                EditorGUILayout.LabelField("Please upgrade to at least Unity " + StylizedWaterCore.MIN_UNITY_VERSION);
                return;
            }

            //Folder
            EditorGUILayout.BeginHorizontal(EditorStyles.helpBox);
            EditorGUILayout.LabelField("Unity version");

            Color defaultColor = GUI.contentColor;

            if (StylizedWaterCore.compatibleVersion)
            {
                GUI.contentColor = Color.green;
                EditorGUILayout.LabelField("Compatible");
                GUI.contentColor = defaultColor;
            }
            else if (StylizedWaterCore.untestedVersion)
            {
                GUI.contentColor = new Color(1f, 0.65f, 0f);
                EditorGUILayout.LabelField("Untested", EditorStyles.boldLabel);
                GUI.contentColor = defaultColor;
            }

            EditorGUILayout.EndHorizontal();
            if (StylizedWaterCore.untestedVersion)
            {
                EditorGUILayout.LabelField("The current Unity version has not been tested yet, or compatibility is being worked on. You may run into issues.", EditorStyles.helpBox);
                EditorGUILayout.Space();
            }

            if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android ||
                EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS)
            {
                //PPSv2
                EditorGUILayout.BeginHorizontal(EditorStyles.helpBox);
                EditorGUILayout.LabelField("Target graphics API");

                if (PlayerSettings.GetGraphicsAPIs(BuildTarget.Android)[0] != UnityEngine.Rendering.GraphicsDeviceType.OpenGLES2 || PlayerSettings.GetGraphicsAPIs(BuildTarget.iOS)[0] != UnityEngine.Rendering.GraphicsDeviceType.OpenGLES2)
                {
                    GUI.contentColor = Color.green;
                    EditorGUILayout.LabelField("OpenGL ES 3.0 or better");
                    GUI.contentColor = defaultColor;
                }
                else
                {
                    GUI.contentColor = Color.red;
                    EditorGUILayout.LabelField("OpenGL ES 2.0", EditorStyles.boldLabel);
                    GUI.contentColor = defaultColor;
                }
                EditorGUILayout.EndHorizontal();
            }

            //Version
            EditorGUILayout.BeginHorizontal(EditorStyles.helpBox);
            EditorGUILayout.LabelField("Package version");

            defaultColor = GUI.contentColor;
            if (StylizedWaterCore.IS_UPDATED)
            {
                GUI.contentColor = Color.green;
                EditorGUILayout.LabelField("Up-to-date");
                GUI.contentColor = defaultColor;
            }
            else
            {
                GUILayout.FlexibleSpace();
                GUI.contentColor = new Color(1f, 0.65f, 0f);
                EditorGUILayout.LabelField("Outdated", EditorStyles.boldLabel);

                GUI.contentColor = defaultColor;
            }
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("");
            if (!StylizedWaterCore.IS_UPDATED)
            {
                if (GUILayout.Button(new GUIContent("Update package"), UpdateText))
                {
                    StylizedWaterCore.OpenStorePage();
                }
            }
            EditorGUILayout.EndHorizontal();
        }
Beispiel #6
0
 private static void FindMessageIcons()
 {
     s_ErrorIcon   = EditorGUIUtility.FindTexture("console.errorIcon");
     s_WarningIcon = EditorGUIUtility.FindTexture("console.warnicon");
     s_InfoIcon    = EditorGUIUtility.FindTexture("console.infoIcon");
 }
Beispiel #7
0
        private static void MenuCreatePostProcessingProfile()
        {
            var icon = EditorGUIUtility.FindTexture("ImageSequence Icon");

            ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, ScriptableObject.CreateInstance <DoCreateImageSequenceAsset>(), "New Image Sequence.asset", icon, null);
        }
Beispiel #8
0
 public static Texture2D GetIconForFile(string fileName)
 {
     return(FindIconForFile(fileName) ?? EditorGUIUtility.FindTexture(typeof(DefaultAsset)));
 }
Beispiel #9
0
        public void Display()
        {
            AssetPreview.SetPreviewTextureCacheSize(256); //FIX clickeing issues when displaying multiple prefab previews (when a tile has a prefab attached
            Event e = Event.current;

            m_dblClick.Update();

            //FIX: when a tileset is changed, the layout change and during some frames, the BeginScrollView could return wrong values
            // This will make sure the scroll position is updated after mouse is over the control
            if (e.isMouse || e.type == EventType.ScrollWheel)
            {
                m_updateScrollPos = true;
            }

            // This way a gui exception is avoided
            if (e.type == EventType.Layout && m_selectBrushInInspector != null)
            {
                Selection.activeObject   = m_selectBrushInInspector;
                m_selectBrushInInspector = null;
            }

            if (m_lastTime == 0f)
            {
                m_lastTime = Time.realtimeSinceStartup;
            }
            m_timeDt   = Time.realtimeSinceStartup - m_lastTime;
            m_lastTime = Time.realtimeSinceStartup;

            if (Tileset == null)
            {
                EditorGUILayout.HelpBox("There is no tileset selected", MessageType.Info);
                return;
            }
            else if (Tileset.AtlasTexture == null)
            {
                EditorGUILayout.HelpBox("There is no atlas texture set", MessageType.Info);
                return;
            }
            else if (Tileset.Tiles.Count == 0)
            {
                EditorGUILayout.HelpBox("There are no tiles to show in the current tileset", MessageType.Info);
                return;
            }

            m_sharedData = GetSharedTilesetData(Tileset);

            float visualTilePadding       = 1;
            bool  isLeftMouseReleased     = e.type == EventType.MouseUp && e.button == 0;
            bool  isRightMouseReleased    = e.type == EventType.MouseUp && e.button == 1;
            bool  isInsideTileScrollArea  = e.isMouse && m_rTileScrollArea.Contains(e.mousePosition);
            bool  isInsideBrushScrollArea = e.isMouse && m_rBrushScrollArea.Contains(e.mousePosition);

            // Create TileView ReorderableList
            if (m_sharedData.tileViewList == null || m_sharedData.tileViewList.list != Tileset.TileViews)
            {
                m_sharedData.tileViewList = TilesetEditor.CreateTileViewReorderableList(Tileset);
                m_sharedData.tileViewList.onSelectCallback += (ReorderableList list) =>
                {
                    /* NOTE: this will select the tileview for the painting brush. Commented just in case.
                     * if(list.index >= 0)
                     * {
                     *  TileSelection tileSelection = Tileset.TileViews[list.index].tileSelection.Clone();
                     *  tileSelection.FlipVertical();
                     *  Tileset.TileSelection = tileSelection;
                     * }
                     * else*/
                    RemoveTileSelection();
                };
                m_sharedData.tileViewList.onRemoveCallback += (ReorderableList list) =>
                {
                    RemoveTileSelection();
                };
            }

            // Draw TileView ReorderableList
            {
                GUI.color = Color.cyan;
                GUILayout.BeginVertical(Styles.Instance.customBox);
                m_sharedData.tileViewList.index = Mathf.Clamp(m_sharedData.tileViewList.index, -1, Tileset.TileViews.Count - 1);
                m_sharedData.tileViewList.DoLayoutList();
                Rect rList = GUILayoutUtility.GetLastRect();
                if (e.isMouse && !rList.Contains(e.mousePosition))
                {
                    m_sharedData.tileViewList.ReleaseKeyboardFocus();
                }
                GUILayout.EndVertical();
                GUI.color = Color.white;
            }
            TileView tileView = m_sharedData.tileViewList != null && m_sharedData.tileViewList.index >= 0 ? Tileset.TileViews[m_sharedData.tileViewList.index] : null;

            if (tileView == null)
            {
                Tileset.TileRowLength = Mathf.Clamp(EditorGUILayout.IntField("TileRowLength", Tileset.TileRowLength), 1, Tileset.Width);
            }


            List <string> viewNameList = new List <string>()
            {
                "(All)"
            };

            viewNameList.AddRange(Tileset.TileViews.Select(x => x.name));
            string[] tileViewNames  = viewNameList.ToArray();
            int[]    tileViewValues = Enumerable.Range(-1, Tileset.TileViews.Count + 1).ToArray();
            EditorGUI.BeginChangeCheck();
            m_sharedData.tileViewList.index = EditorGUILayout.IntPopup("Tileset View", m_sharedData.tileViewList.index, tileViewNames, tileViewValues);
            if (EditorGUI.EndChangeCheck())
            {
                RemoveTileSelection();
            }

            // Draw Background Color Selector
            Tileset.BackgroundColor = EditorGUILayout.ColorField("Background Color", Tileset.BackgroundColor);
            if (m_prevBgColor != Tileset.BackgroundColor || Styles.Instance.scrollStyle.normal.background == null)
            {
                m_prevBgColor = Tileset.BackgroundColor;
                if (Styles.Instance.scrollStyle.normal.background == null)
                {
                    Styles.Instance.scrollStyle.normal.background = new Texture2D(1, 1)
                    {
                        hideFlags = HideFlags.DontSave
                    }
                }
                ;
                Styles.Instance.scrollStyle.normal.background.SetPixel(0, 0, Tileset.BackgroundColor);
                Styles.Instance.scrollStyle.normal.background.Apply();
            }
            //---

            // Draw Zoom Selector
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label(EditorGUIUtility.FindTexture("ViewToolZoom"), GUILayout.Width(35f));
            float visualTileZoom = EditorGUILayout.Slider(Tileset.VisualTileSize.x / Tileset.TilePxSize.x, 0.25f, 4f);

            Tileset.VisualTileSize = visualTileZoom * Tileset.TilePxSize;
            if (GUILayout.Button("Reset", GUILayout.Width(50f)))
            {
                Tileset.VisualTileSize = new Vector2(32f * Tileset.TilePxSize.x / Tileset.TilePxSize.y, 32f);
            }
            EditorGUILayout.EndHorizontal();
            //---

            string sTileIdLabel = Tileset.SelectedTileId != Tileset.k_TileId_Empty? " (id:" + Tileset.SelectedTileId + ")" : "";

            EditorGUILayout.LabelField("Tile Palette" + sTileIdLabel, EditorStyles.boldLabel);

            // keeps values safe
            m_sharedData.tileViewRowLength = Mathf.Max(1, m_sharedData.tileViewRowLength);

            float tileAreaWidth  = m_sharedData.tileViewRowLength * (Tileset.VisualTileSize.x + visualTilePadding) + 4f;
            float tileAreaHeight = (Tileset.VisualTileSize.y + visualTilePadding) * (1 + (m_visibleTileCount - 1) / m_sharedData.tileViewRowLength) + 4f;

            m_sharedData.tileViewRowLength = tileView != null ? tileView.tileSelection.rowLength : Tileset.TileRowLength;

            //float minTileScrollHeight = (Tileset.VisualTileSize.y + visualTilePadding) * 6f;// NOTE: GUILayout.MinHeight is not working with BeginScrollView
            Vector2 tilesScrollPos = EditorGUILayout.BeginScrollView(m_sharedData.tilesScrollPos, Styles.Instance.scrollStyle /*, GUILayout.MinHeight(minTileScrollHeight)*/);

            if (m_updateScrollPos)
            {
                m_sharedData.tilesScrollPos = tilesScrollPos;
            }
            {
                // Scroll Moving Drag
                if (e.type == EventType.MouseDrag && (e.button == 1 || e.button == 2))
                {
                    m_sharedData.tilesScrollPos -= e.delta;
                }
                else
                {
                    DoAutoScroll();
                }

                if (e.isMouse)
                {
                    m_lastTileScrollMousePos = e.mousePosition;
                }
                if (Tileset.Tiles != null)
                {
                    GUILayoutUtility.GetRect(tileAreaWidth, tileAreaHeight);
                    m_visibleTileCount = 0;
                    List <uint> visibleTileList = new List <uint>();
                    int         tileViewWidth   = tileView != null ? tileView.tileSelection.rowLength : Tileset.Width;
                    int         tileViewHeight  = tileView != null ? ((tileView.tileSelection.selectionData.Count - 1) / tileView.tileSelection.rowLength) + 1 : Tileset.Height;
                    int         totalCount      = ((((tileViewWidth - 1) / m_sharedData.tileViewRowLength) + 1) * m_sharedData.tileViewRowLength) * tileViewHeight;
                    int         tileIdOffset    = 0;
                    for (int i = 0; i < totalCount; ++i)
                    {
                        int  tileId   = GetTileIdFromIdx(i, m_sharedData.tileViewRowLength, tileViewWidth, tileViewHeight) + tileIdOffset;
                        uint tileData = (uint)tileId;
                        if (tileView != null && tileId != Tileset.k_TileId_Empty)
                        {
                            tileData = tileView.tileSelection.selectionData[tileId - tileIdOffset];
                            tileId   = (int)(tileData & Tileset.k_TileDataMask_TileId);
                        }
                        Tile tile = Tileset.GetTile(tileId);
                        while (tile != null && tile.uv == default(Rect)) // skip invalid tiles
                        {
                            tile         = Tileset.GetTile(++tileId);
                            tileData     = (uint)tileId;
                            tileIdOffset = tileId;
                        }
                        visibleTileList.Add(tileData);

                        int  tx          = m_visibleTileCount % m_sharedData.tileViewRowLength;
                        int  ty          = m_visibleTileCount / m_sharedData.tileViewRowLength;
                        Rect rVisualTile = new Rect(2 + tx * (Tileset.VisualTileSize.x + visualTilePadding), 2 + ty * (Tileset.VisualTileSize.y + visualTilePadding), Tileset.VisualTileSize.x, Tileset.VisualTileSize.y);

                        // Optimization, skipping not visible tiles
                        Rect rLocalVisualTile = rVisualTile; rLocalVisualTile.position -= m_sharedData.tilesScrollPos;
                        if (!rLocalVisualTile.Overlaps(m_rTileScrollSize))
                        {
                            ; // Do Nothing
                        }
                        else
                        //---
                        {
                            // Draw Tile
                            if (tile == null)
                            {
                                HandlesEx.DrawRectWithOutline(rVisualTile, new Color(0f, 0f, 0f, 0.2f), new Color(0f, 0f, 0f, 0.2f));
                            }
                            else
                            {
                                HandlesEx.DrawRectWithOutline(rVisualTile, new Color(0f, 0f, 0f, 0.1f), new Color(0f, 0f, 0f, 0.1f));
                                TilesetEditor.DoGUIDrawTileFromTileData(rVisualTile, tileData, Tileset);
                            }

                            Rect rTileRect = new Rect(2 + tx * (Tileset.VisualTileSize.x + visualTilePadding), 2 + ty * (Tileset.VisualTileSize.y + visualTilePadding), (Tileset.VisualTileSize.x + visualTilePadding), (Tileset.VisualTileSize.y + visualTilePadding));
                            if (rVisualTile.Contains(e.mousePosition))
                            {
                                if (e.type == EventType.MouseDrag && e.button == 0)
                                {
                                    m_sharedData.pointedTileIdxRect = new KeyValuePair <int, Rect>(m_visibleTileCount, rTileRect);
                                }
                                else if (e.type == EventType.MouseDown && e.button == 0)
                                {
                                    m_sharedData.startDragTileIdxRect = m_sharedData.pointedTileIdxRect = m_sharedData.endDragTileIdxRect = new KeyValuePair <int, Rect>(m_visibleTileCount, rTileRect);
                                }
                                else if (e.type == EventType.MouseUp && e.button == 0)
                                {
                                    m_sharedData.endDragTileIdxRect = new KeyValuePair <int, Rect>(m_visibleTileCount, rTileRect);
                                    DoSetTileSelection();
                                }
                            }

                            if ((isLeftMouseReleased || isRightMouseReleased) && isInsideTileScrollArea && rVisualTile.Contains(e.mousePosition) &&
                                (m_sharedData.startDragTileIdxRect.Key == m_sharedData.endDragTileIdxRect.Key) && // and there is not dragging selection
                                m_rTileScrollSize.Contains(e.mousePosition - m_sharedData.tilesScrollPos))   // and it's inside the scroll area
                            {
                                Tileset.SelectedTileId = tileId;

                                //Give focus to SceneView to get key events
                                FocusSceneView();

                                if (isRightMouseReleased)
                                {
                                    TilePropertiesWindow.Show(Tileset);
                                }
                            }
                            else if (tile != null && Tileset.SelectedTileId == tileId)
                            {
                                HandlesEx.DrawRectWithOutline(rTileRect, new Color(0f, 0f, 0f, 0.1f), new Color(1f, 1f, 0f, 1f));
                            }
                        }

                        ++m_visibleTileCount;
                    }
                    m_visibleTileList = visibleTileList;

                    // Draw selection rect
                    if (m_sharedData.startDragTileIdxRect.Key != m_sharedData.pointedTileIdxRect.Key /*&& m_startDragTileIdxRect.Key == m_endDragTileIdxRect.Key*/)
                    {
                        Rect rSelection = new Rect(m_sharedData.startDragTileIdxRect.Value.center, m_sharedData.pointedTileIdxRect.Value.center - m_sharedData.startDragTileIdxRect.Value.center);
                        rSelection.Set(Mathf.Min(rSelection.xMin, rSelection.xMax), Mathf.Min(rSelection.yMin, rSelection.yMax), Mathf.Abs(rSelection.width), Mathf.Abs(rSelection.height));
                        rSelection.xMin -= m_sharedData.startDragTileIdxRect.Value.width / 2;
                        rSelection.xMax += m_sharedData.startDragTileIdxRect.Value.width / 2;
                        rSelection.yMin -= m_sharedData.startDragTileIdxRect.Value.height / 2;
                        rSelection.yMax += m_sharedData.startDragTileIdxRect.Value.height / 2;
                        HandlesEx.DrawRectWithOutline(rSelection, new Color(0f, 0f, 0f, 0.1f), new Color(1f, 1f, 1f, 1f));
                    }
                }
            }
            EditorGUILayout.EndScrollView();
            if (e.type == EventType.Repaint)
            {
                m_rTileScrollArea          = GUILayoutUtility.GetLastRect();
                m_rTileScrollSize          = m_rTileScrollArea;
                m_rTileScrollSize.position = Vector2.zero; // reset position to the Contains and Overlaps inside the tile scroll view without repositioning the position of local positions
                if (tileAreaWidth > m_rTileScrollSize.width)
                {
                    m_rTileScrollSize.height -= GUI.skin.verticalScrollbar.fixedWidth;
                }
                if (tileAreaHeight > m_rTileScrollSize.height)
                {
                    m_rTileScrollSize.width -= GUI.skin.verticalScrollbar.fixedWidth;
                }
            }

            EditorGUILayout.BeginHorizontal();
            string sBrushIdLabel = Tileset.SelectedBrushId > 0 ? " (id:" + Tileset.SelectedBrushId + ")" : "";

            EditorGUILayout.LabelField("Brush Palette" + sBrushIdLabel, EditorStyles.boldLabel);
            m_displayBrushReordList = EditorUtils.DoToggleButton("Display List", m_displayBrushReordList);
            EditorGUILayout.EndHorizontal();
            string[] brushTypeArray = Tileset.GetBrushTypeArray();
            if (brushTypeArray != null && brushTypeArray.Length > 0)
            {
                Tileset.BrushTypeMask = EditorGUILayout.MaskField("Brush Mask", Tileset.BrushTypeMask, brushTypeArray);
            }

            int tileRowLength = (int)(m_rTileScrollSize.width / (Tileset.VisualTileSize.x + visualTilePadding));

            if (tileRowLength <= 0)
            {
                tileRowLength = 1;
            }
            float fBrushesScrollMaxHeight = Screen.height / 4;
            //commented because m_rTileScrollSize.width.height was changed to Screen.height;  fBrushesScrollMaxHeight -= fBrushesScrollMaxHeight % 2; // sometimes because size of tile scroll affects size of brush scroll, the height is dancing between +-1, so this is always taking the pair value
            float fBrushesScrollHeight = Mathf.Min(fBrushesScrollMaxHeight, 4 + (Tileset.VisualTileSize.y + visualTilePadding) * (1 + (Tileset.Brushes.Count / tileRowLength)));

            EditorGUILayout.BeginVertical(GUILayout.MinHeight(fBrushesScrollHeight));
            if (m_displayBrushReordList)
            {
                DisplayBrushReorderableList();
            }
            else
            {
                bool    refreshBrushes   = false;
                Vector2 brushesScrollPos = EditorGUILayout.BeginScrollView(m_sharedData.brushesScrollPos, Styles.Instance.scrollStyle);
                if (m_updateScrollPos)
                {
                    m_sharedData.brushesScrollPos = brushesScrollPos;
                }
                {
                    Rect rScrollView = new Rect(0, 0, m_rTileScrollSize.width, 0);
                    tileRowLength = Mathf.Clamp((int)rScrollView.width / (int)(Tileset.VisualTileSize.x + visualTilePadding), 1, tileRowLength);
                    if (Tileset.Brushes != null)
                    {
                        GUILayout.Space((Tileset.VisualTileSize.y + visualTilePadding) * (1 + (Tileset.Brushes.Count - 1) / tileRowLength));
                        for (int i = 0, idx = 0; i < Tileset.Brushes.Count; ++i, ++idx)
                        {
                            Tileset.BrushContainer brushCont = Tileset.Brushes[i];
                            if (brushCont.BrushAsset == null || brushCont.BrushAsset.Tileset != Tileset)
                            {
                                refreshBrushes = true;
                                continue;
                            }
                            if (!brushCont.BrushAsset.ShowInPalette || !Tileset.IsBrushVisibleByTypeMask(brushCont.BrushAsset))
                            {
                                continue;
                            }

                            int  tx          = idx % tileRowLength;
                            int  ty          = idx / tileRowLength;
                            Rect rVisualTile = new Rect(2 + tx * (Tileset.VisualTileSize.x + visualTilePadding), 2 + ty * (Tileset.VisualTileSize.y + visualTilePadding), Tileset.VisualTileSize.x, Tileset.VisualTileSize.y);
                            //Fix Missing Tileset reference
                            if (brushCont.BrushAsset.Tileset == null)
                            {
                                Debug.LogWarning("Fixed missing tileset reference in brush " + brushCont.BrushAsset.name + " Id(" + brushCont.Id + ")");
                                brushCont.BrushAsset.Tileset = Tileset;
                            }
                            uint tileData = Tileset.k_TileData_Empty;
                            if (brushCont.BrushAsset.IsAnimated())
                            {
                                tileData = brushCont.BrushAsset.GetAnimTileData();
                            }
                            else
                            {
                                tileData = brushCont.BrushAsset.PreviewTileData();
                            }
                            TilesetEditor.DoGUIDrawTileFromTileData(rVisualTile, tileData, Tileset, brushCont.BrushAsset.GetAnimUV());
                            if ((isLeftMouseReleased || isRightMouseReleased || m_dblClick.IsDblClick) && isInsideBrushScrollArea && rVisualTile.Contains(Event.current.mousePosition))
                            {
                                Tileset.SelectedBrushId = brushCont.Id;
                                RemoveTileSelection();
                                if (m_dblClick.IsDblClick)
                                {
                                    EditorGUIUtility.PingObject(brushCont.BrushAsset);
                                    m_selectBrushInInspector = brushCont.BrushAsset;
                                }
                                if (isRightMouseReleased)
                                {
                                    TilePropertiesWindow.Show(Tileset);
                                }
                            }
                            else if (Tileset.SelectedBrushId == brushCont.Id)
                            {
                                Rect rSelection = new Rect(2 + tx * (Tileset.VisualTileSize.x + visualTilePadding), 2 + ty * (Tileset.VisualTileSize.y + visualTilePadding), (Tileset.VisualTileSize.x + visualTilePadding), (Tileset.VisualTileSize.y + visualTilePadding));
                                HandlesEx.DrawRectWithOutline(rSelection, new Color(0f, 0f, 0f, 0.1f), new Color(1f, 1f, 0f, 1f));
                            }
                        }
                    }

                    if (refreshBrushes)
                    {
                        Tileset.RemoveInvalidBrushes();
                        Tileset.UpdateBrushTypeArray();
                    }
                }
                EditorGUILayout.EndScrollView();
                if (e.type == EventType.Repaint)
                {
                    m_rBrushScrollArea = GUILayoutUtility.GetLastRect();
                }
            }
            EditorGUILayout.EndVertical();

            if (GUILayout.Button("Import all brushes found in the project"))
            {
                TilesetEditor.AddAllBrushesFoundInTheProject(Tileset);
                EditorUtility.SetDirty(Tileset);
            }
        }
Beispiel #10
0
        public static MultiColumnHeaderState CreateDefaultMultiColumnHeaderState(float treeViewWidth)
        {
            var columns = new[]
            {
                new MultiColumnHeaderState.Column
                {
                    headerContent         = new GUIContent(EditorGUIUtility.FindTexture("FilterByLabel"), "Category"),
                    contextMenuText       = "Category",
                    headerTextAlignment   = TextAlignment.Center,
                    sortedAscending       = true,
                    sortingArrowAlignment = TextAlignment.Right,
                    width                 = 30,
                    minWidth              = 30,
                    maxWidth              = 60,
                    autoResize            = false,
                    allowToggleVisibility = true
                },
                new MultiColumnHeaderState.Column
                {
                    headerContent         = new GUIContent("Package -> AssetTarget"),
                    contextMenuText       = "Package",
                    headerTextAlignment   = TextAlignment.Left,
                    sortedAscending       = true,
                    sortingArrowAlignment = TextAlignment.Center,
                    width                 = 250,
                    minWidth              = 60,
                    autoResize            = true,
                    allowToggleVisibility = false
                },
                new MultiColumnHeaderState.Column
                {
                    headerContent = new GUIContent("Asset Path"),
                    // contextMenuText = "Type",
                    headerTextAlignment   = TextAlignment.Left,
                    sortedAscending       = true,
                    sortingArrowAlignment = TextAlignment.Left,
                    width    = 300,
                    minWidth = 30,
                    // maxWidth = 60,
                    autoResize            = true,
                    allowToggleVisibility = false
                },
                new MultiColumnHeaderState.Column
                {
                    headerContent         = new GUIContent("StreamingAssets?/Load/Filter"),
                    contextMenuText       = "Option",
                    headerTextAlignment   = TextAlignment.Left,
                    sortedAscending       = true,
                    sortingArrowAlignment = TextAlignment.Left,
                    width                 = 600,
                    minWidth              = 60,
                    autoResize            = true,
                    allowToggleVisibility = true
                },
                new MultiColumnHeaderState.Column
                {
                    headerContent         = new GUIContent("Priority"),
                    headerTextAlignment   = TextAlignment.Left,
                    sortedAscending       = true,
                    sortingArrowAlignment = TextAlignment.Left,
                    width      = 270,
                    minWidth   = 60,
                    autoResize = true
                },
                new MultiColumnHeaderState.Column
                {
                    headerContent         = new GUIContent("Build Order"),
                    headerTextAlignment   = TextAlignment.Left,
                    sortedAscending       = true,
                    sortingArrowAlignment = TextAlignment.Left,
                    width      = 70,
                    minWidth   = 60,
                    autoResize = true
                },
            };

            // Assert.AreEqual(columns.Length, Enum.GetValues(typeof(MyColumns)).Length, "Number of columns should match number of enum values: You probably forgot to update one of them.");
            var state = new MultiColumnHeaderState(columns);

            return(state);
        }
Beispiel #11
0
        public static Texture2D FindIconForFile(string fileName)
        {
            int    i         = fileName.LastIndexOf('.');
            string extension = i == -1 ? "" : fileName.Substring(i + 1).ToLower();

            switch (extension)
            {
            // Most .asset files use their scriptable object defined icon instead of a default one.
            case "asset": return(AssetDatabase.GetCachedIcon(fileName) as Texture2D ?? EditorGUIUtility.FindTexture("GameManager Icon"));

            case "cginc": return(EditorGUIUtility.FindTexture("CGProgram Icon"));

            case "cs": return(EditorGUIUtility.FindTexture("cs Script Icon"));

            case "guiskin": return(EditorGUIUtility.FindTexture(typeof(GUISkin)));

            case "dll": return(EditorGUIUtility.FindTexture("Assembly Icon"));

            case "asmdef": return(EditorGUIUtility.FindTexture(typeof(AssemblyDefinitionAsset)));

            case "asmref": return(EditorGUIUtility.FindTexture(typeof(AssemblyDefinitionAsset)));

            case "mat": return(EditorGUIUtility.FindTexture(typeof(Material)));

            case "physicmaterial": return(EditorGUIUtility.FindTexture(typeof(PhysicMaterial)));

            case "prefab": return(EditorGUIUtility.FindTexture("Prefab Icon"));

            case "shader": return(EditorGUIUtility.FindTexture(typeof(Shader)));

            case "txt": return(EditorGUIUtility.FindTexture(typeof(TextAsset)));

            case "unity": return(EditorGUIUtility.FindTexture(typeof(SceneAsset)));

            case "prefs": return(EditorGUIUtility.FindTexture(typeof(EditorSettings)));

            case "anim": return(EditorGUIUtility.FindTexture(typeof(Animation)));

            case "meta": return(EditorGUIUtility.FindTexture("MetaFile Icon"));

            case "mixer": return(EditorGUIUtility.FindTexture(typeof(UnityEditor.Audio.AudioMixerController)));

            case "uxml": return(EditorGUIUtility.FindTexture(typeof(UnityEngine.UIElements.VisualTreeAsset)));

            case "uss": return(EditorGUIUtility.FindTexture(typeof(StyleSheet)));

            case "ttf":
            case "otf":
            case "fon":
            case "fnt":
                return(EditorGUIUtility.FindTexture(typeof(Font)));

            case "aac":
            case "aif":
            case "aiff":
            case "au":
            case "mid":
            case "midi":
            case "mp3":
            case "mpa":
            case "ra":
            case "ram":
            case "wma":
            case "wav":
            case "wave":
            case "ogg":
                return(EditorGUIUtility.FindTexture(typeof(AudioClip)));

            case "ai":
            case "apng":
            case "png":
            case "bmp":
            case "cdr":
            case "dib":
            case "eps":
            case "exif":
            case "gif":
            case "ico":
            case "icon":
            case "j":
            case "j2c":
            case "j2k":
            case "jas":
            case "jiff":
            case "jng":
            case "jp2":
            case "jpc":
            case "jpe":
            case "jpeg":
            case "jpf":
            case "jpg":
            case "jpw":
            case "jpx":
            case "jtf":
            case "mac":
            case "omf":
            case "qif":
            case "qti":
            case "qtif":
            case "tex":
            case "tfw":
            case "tga":
            case "tif":
            case "tiff":
            case "wmf":
            case "psd":
            case "exr":
            case "hdr":
                return(EditorGUIUtility.FindTexture(typeof(Texture)));

            case "3df":
            case "3dm":
            case "3dmf":
            case "3ds":
            case "3dv":
            case "3dx":
            case "blend":
            case "c4d":
            case "lwo":
            case "lws":
            case "ma":
            case "max":
            case "mb":
            case "mesh":
            case "obj":
            case "vrl":
            case "wrl":
            case "wrz":
            case "fbx":
                return(EditorGUIUtility.FindTexture(typeof(Mesh)));

            case "dv":
            case "mp4":
            case "mpg":
            case "mpeg":
            case "m4v":
            case "ogv":
            case "vp8":
            case "webm":
            case "asf":
            case "asx":
            case "avi":
            case "dat":
            case "divx":
            case "dvx":
            case "mlv":
            case "m2l":
            case "m2t":
            case "m2ts":
            case "m2v":
            case "m4e":
            case "mjp":
            case "mov":
            case "movie":
            case "mp21":
            case "mpe":
            case "mpv2":
            case "ogm":
            case "qt":
            case "rm":
            case "rmvb":
            case "wmw":
            case "xvid":
                return(AssetDatabase.GetCachedIcon(fileName) as Texture2D ?? EditorGUIUtility.FindTexture(typeof(VideoClip)));

            case "colors":
            case "gradients":
            case "curves":
            case "curvesnormalized":
            case "particlecurves":
            case "particlecurvessigned":
            case "particledoublecurves":
            case "particledoublecurvessigned":
                return(EditorGUIUtility.FindTexture(typeof(ScriptableObject)));

            default: return(null);
            }
        }
 public Texture2D GetEditorTexture(string key)
 {
     return(EditorGUIUtility.FindTexture(GetIconName(key)));
 }
 public Texture2D GetEditorTexture(AssetBundleResType resType)
 {
     return(EditorGUIUtility.FindTexture(GetIconName(resType)));
 }
 void FindMessageIcons()
 {
     m_ErrorIcon   = EditorGUIUtility.FindTexture("console.errorIcon");
     m_WarningIcon = EditorGUIUtility.FindTexture("console.warnicon");
     m_InfoIcon    = EditorGUIUtility.FindTexture("console.infoIcon");
 }
Beispiel #15
0
 protected Texture2D FindTextureBuiltIn(string name)
 {
     return(EditorGUIUtility.FindTexture(name));
 }
    public static void ShowWindow()
    {
        SceneSwitcher sceneSwitcherWindow = (SceneSwitcher)EditorWindow.GetWindow(typeof(SceneSwitcher));

        sceneSwitcherWindow.titleContent = new GUIContent(" Scene Switcher", EditorGUIUtility.FindTexture("BuildSettings.Editor"));
    }
        public void OnGUI(Rect rect)
        {
            if (creatingNewConfig == true && GUI.GetNameOfFocusedControl() != "InputField1")
            {
                creatingNewConfig = false;
            }
            GUILayout.BeginArea(rect, GUIContent.none);

            //SettingPanel
            EditorGUILayout.BeginVertical(EditorStyles.helpBox);
            GUILayout.FlexibleSpace();
            EBPEditorGUILayout.RootSettingLine(G.Module, ChangeRootPath);
            GUILayout.FlexibleSpace();

            EditorGUILayout.BeginHorizontal();
            EditorGUI.BeginDisabledGroup(LoadBundlesFromConfig);
            if (ShowTagsDropdown())
            {
                return;
            }
            EditorGUI.EndDisabledGroup();
            GUILayout.FlexibleSpace();
            GUILayout.Space(10);
            if (GUILayout.Button(new GUIContent("New", "新建配置文件"), buttonStyle, buttonOptions))
            {
                ClickedNew(); return;
            }
            if (GUILayout.Button(new GUIContent("Save", "保存配置文件"), buttonStyle, buttonOptions))
            {
                ClickedSave(); return;
            }

            if (creatingNewConfig)
            {
                ShowInputField();
            }
            else
            {
                if (ShowMapDropdown())
                {
                    return;
                }
            }

            if (GUILayout.Button(new GUIContent(EditorGUIUtility.FindTexture("ViewToolOrbit"), "查看该文件"), buttonStyle, GUILayout.Height(25)))
            {
                ClickedShowConfigFile(); return;
            }
            EditorGUILayout.EndHorizontal();
            GUILayout.FlexibleSpace();

            EditorGUILayout.BeginHorizontal();
            bool result = EditorGUILayout.Toggle(GUIContent.none, LoadBundlesFromConfig, GUILayout.Width(16));

            if (result != LoadBundlesFromConfig)
            {
                LoadBundlesFromConfig = result;
                G.g.bundleTree.LoadBundlesFromConfig = result;
                OnChangeBundles();
                return;
            }
            EditorGUI.BeginDisabledGroup(!LoadBundlesFromConfig);
            if (ShowBundleConfigsDropdown())
            {
                return;
            }
            GUILayout.FlexibleSpace();
            EditorGUI.EndDisabledGroup();
            EditorGUILayout.LabelField("Mode:", labelStyle, shortLabelOptions2);
            int currentPackageModeIndex_new = EditorGUILayout.Popup(selectedPackageModeIndex, G.PackageModeEnum, dropdownStyle, shortPopupOptions);

            if (selectedPackageModeIndex != currentPackageModeIndex_new)
            {
                selectedPackageModeIndex             = currentPackageModeIndex_new;
                G.Module.UserConfig.Json.PackageMode = G.PackageModeEnum[selectedPackageModeIndex];
                G.g.packageTree.UpdateAllFileName();
                G.Module.IsDirty = true;
                return;
            }
            GUILayout.Space(10);
            EditorGUILayout.LabelField("Lua:", labelStyle, shortLabelOptions);
            int currentLuaSourceIndex_new = EditorGUILayout.Popup(selectedLuaSourceIndex, G.LuaSourceEnum, dropdownStyle, shortPopupOptions);

            if (selectedLuaSourceIndex != currentLuaSourceIndex_new)
            {
                selectedLuaSourceIndex             = currentLuaSourceIndex_new;
                G.Module.UserConfig.Json.LuaSource = G.LuaSourceEnum[selectedLuaSourceIndex];
                G.Module.IsDirty = true;
                return;
            }
            GUILayout.Space(10);
            EditorGUILayout.LabelField("CompressLevel:", labelStyle, labelOptions);
            int compressionLevel_new = EditorGUILayout.IntPopup(G.Module.UserConfig.Json.CompressionLevel, compressionLevelsEnumStr,
                                                                compressionLevelEnum, dropdownStyle, miniPopupOptions);

            if (compressionLevel_new != G.Module.UserConfig.Json.CompressionLevel)
            {
                G.Module.UserConfig.Json.CompressionLevel = compressionLevel_new;
                G.Module.IsDirty = true;
                return;
            }
            GUILayout.Space(20);
            if (GUILayout.Button(new GUIContent("Revert"), buttonStyle, buttonOptions))
            {
                ClickedRevert(); return;
            }
            if (G.Module.StateConfigAvailable && !LoadBundlesFromConfig)
            {
                if (GUILayout.Button(new GUIContent("Build"), buttonStyle, buttonOptions))
                {
                    ClickedApply(); return;
                }
            }
            else
            {
                if (GUILayout.Button(new GUIContent("Check"), buttonStyle, buttonOptions))
                {
                    ClickedCheck(); return;
                }
            }
            EditorGUILayout.EndHorizontal();
            GUILayout.FlexibleSpace();
            EditorGUILayout.EndVertical();

            //VersionPanel
            EditorGUILayout.BeginHorizontal(EditorStyles.helpBox);
            EditorGUILayout.LabelField("Resource Version: " + G.Module.ModuleStateConfig.Json.ResourceVersion, labelStyle, GUILayout.MaxWidth(150));
            GUILayout.FlexibleSpace();
            if (G.Module.UserConfig.Json.PackageMode == "Addon")
            {
                EditorGUILayout.LabelField("Client Version:", labelStyle, GUILayout.MaxWidth(110));
                string addonVersion_new = EditorGUILayout.TextField(G.Module.ModuleStateConfig.Json.ClientVersion);
                {
                    if (!string.IsNullOrEmpty(addonVersion_new))
                    {
                        addonVersion_new = addonVersion_new.Trim();
                    }
                    if (addonVersion_new != G.Module.ModuleStateConfig.Json.ClientVersion)
                    {
                        G.Module.ModuleStateConfig.Json.ClientVersion = addonVersion_new;
                        G.g.packageTree.UpdateAllFileName();
                        return;
                    }
                }
            }
            EditorGUILayout.EndHorizontal();

            GUILayout.EndArea();
        }
Beispiel #18
0
        static void MenuCreateCameraBodyModel()
        {
            var icon = EditorGUIUtility.FindTexture("ScriptableObject Icon");

            ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, ScriptableObject.CreateInstance <DoCreateCameraBodyModel>(), "New Physically Based Camera Body.asset", icon, null);
        }
        private void ParamSection()
        {
            if (PaddedBoxGS == null)
            {
                PaddedBoxGS = new GUIStyle((GUIStyle)"HelpBox")
                {
                    normal = ((GUIStyle)"GroupBox").normal, padding = new RectOffset(4, 4, 4, 4)
                }
            }
            ;

            if (PaddedGS == null)
            {
                PaddedGS = new GUIStyle(PaddedBoxGS)
                {
                    normal = ((GUIStyle)"MiniLabel").normal
                }
            }
            ;

            t.useGlobalParamSettings = EditorGUILayout.ToggleLeft("Use Global Settings", t.useGlobalParamSettings);

            showAdvancedParams[uid] = IndentedFoldout(new GUIContent("Adv. Parameter Settings"), showAdvancedParams[uid], 1);

            if (showAdvancedParams[uid])
            {
                var indenthold = EditorGUI.indentLevel;

                EditorGUI.indentLevel = 0;
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.GetControlRect(GUILayout.MinWidth(COL1));
                EditorGUILayout.LabelField(label_Interp, (GUIStyle)"MiniLabel", GUILayout.MaxWidth(COL2));
                EditorGUILayout.LabelField(label_Extrap, (GUIStyle)"MiniLabel", GUILayout.MaxWidth(COL3));
                EditorGUILayout.LabelField(label_Default, (GUIStyle)"MiniLabel", GUILayout.MaxWidth(COL4));
                EditorGUILayout.EndHorizontal();

                var defs = t.sharedParamDefaults;

                if (t.useGlobalParamSettings)
                {
                    EditorGUILayout.BeginHorizontal();
                    InspectorWidgets.MiniToggle(t, EditorGUILayout.GetControlRect(GUILayout.MinWidth(COL1)), new GUIContent("Ints"), ref defs.includeInts);
                    DrawInterp(AnimatorControllerParameterType.Int, ref defs.interpolateInts);
                    DrawExtrap(AnimatorControllerParameterType.Int, ref defs.extrapolateInts);
                    DrawDefaults(AnimatorControllerParameterType.Int, ref defs.defaultInt);
                    EditorGUILayout.EndHorizontal();

                    EditorGUILayout.BeginHorizontal();
                    InspectorWidgets.MiniToggle(t, EditorGUILayout.GetControlRect(GUILayout.MinWidth(COL1)), new GUIContent("Floats"), ref defs.includeFloats);
                    DrawInterp(AnimatorControllerParameterType.Float, ref defs.interpolateFloats);
                    DrawExtrap(AnimatorControllerParameterType.Float, ref defs.extrapolateFloats);
                    DrawDefaults(AnimatorControllerParameterType.Float, ref defs.defaultFloat);
                    EditorGUILayout.EndHorizontal();

                    EditorGUILayout.BeginHorizontal();
                    InspectorWidgets.MiniToggle(t, EditorGUILayout.GetControlRect(GUILayout.MinWidth(COL1)), new GUIContent("Bools"), ref defs.includeBools);
                    EditorGUILayout.GetControlRect(GUILayout.MaxWidth(COL2));
                    DrawExtrap(AnimatorControllerParameterType.Bool, ref defs.extrapolateBools);
                    DrawDefaults(AnimatorControllerParameterType.Bool, ref defs.defaultBool);
                    EditorGUILayout.EndHorizontal();

                    EditorGUILayout.BeginHorizontal();
                    var tr = EditorGUILayout.GetControlRect(GUILayout.MinWidth(COL1));
                    InspectorWidgets.MiniToggle(t, tr, triggerLabel, ref defs.includeTriggers);
                    if (t.sharedParamDefaults.includeTriggers)
                    {
                        GUI.DrawTexture(new Rect(tr)
                        {
                            x = 2, width = 16
                        }, EditorGUIUtility.FindTexture("console.warnicon"));
                    }
                    EditorGUILayout.GetControlRect(GUILayout.MaxWidth(COL2));
                    DrawExtrap(AnimatorControllerParameterType.Trigger, ref defs.extrapolateTriggers);
                    DrawDefaults(AnimatorControllerParameterType.Trigger, ref defs.defaultTrigger);
                    EditorGUILayout.EndHorizontal();
                }
                else
                {
                    var names = ParameterSettings.RebuildParamSettings(a, ref t.sharedParamSettings, ref t.paramCount, t.sharedParamDefaults);
                    serializedObject.Update();

                    var pms = t.sharedParamSettings;
                    for (int i = 0; i < t.paramCount; ++i)
                    {
                        var pm = pms[i];

                        EditorGUILayout.BeginHorizontal();

                        // Type Letter Box (left vertical)
                        EditorGUILayout.BeginVertical(PaddedBoxGS, GUILayout.MaxWidth(8));
                        TypeLabel(EditorGUILayout.GetControlRect(GUILayout.MaxWidth(12)), pm.paramType);

                        EditorGUILayout.EndVertical();

                        // Main Vertical (Right)
                        EditorGUILayout.BeginVertical((pm.include) ? PaddedBoxGS : PaddedGS);

                        EditorGUILayout.BeginHorizontal();

                        InspectorWidgets.MiniToggle(t, EditorGUILayout.GetControlRect(GUILayout.MinWidth(COL1)), new GUIContent(names[i]), ref pm.include);

                        EditorGUI.BeginDisabledGroup(!pm.include);
                        DrawInterp(pm.paramType, ref pm.interpolate);
                        DrawExtrap(pm.paramType, ref pm.extrapolate);
                        DrawDefaults(pm.paramType, ref pm.defaultValue);
                        EditorGUI.EndDisabledGroup();

                        EditorGUILayout.EndHorizontal();

                        // Compression Row
                        if (pm.include)
                        {
                            if (pm.paramType == AnimatorControllerParameterType.Float || pm.paramType == AnimatorControllerParameterType.Int)
                            {
                                var sharedPSs = serializedObject.FindProperty("sharedParamSettings");
                                var ps        = sharedPSs.GetArrayElementAtIndex(i);

                                var fcrusher = (pm.paramType == AnimatorControllerParameterType.Float) ? ps.FindPropertyRelative("fcrusher") : ps.FindPropertyRelative("icrusher");

                                var r = EditorGUILayout.GetControlRect(false, EditorGUI.GetPropertyHeight(fcrusher));

                                Rect rectCrusher = new Rect(r)
                                {
                                    height = 16
                                };
                                EditorGUI.PropertyField(rectCrusher, fcrusher);
                            }
                        }

                        // End Right Vertical
                        EditorGUILayout.EndVertical();

                        // End Parameter
                        EditorGUILayout.EndHorizontal();
                    }
                }

                EditorGUI.indentLevel = indenthold;
            }
        }
Beispiel #20
0
    // private float val = 0f;

    void OnEnable()
    {
        this.trashTexture = EditorGUIUtility.FindTexture("d_TreeEditor.Trash");
        this.plusTexture  = EditorGUIUtility.FindTexture("Toolbar Plus");
    }
        private ReorderableList CreateAnimReorderableList()
        {
            ReorderableList reordList     = new ReorderableList(m_target.DirectionalAnimController.GetAnimList(), typeof(DirectionalAnimData), true, true, true, true);
            float           elementHeight = m_target.DirectionalAnimController.DirectionsPerAnim <= 4 ? 64f : 128f;

            reordList.displayAdd          = reordList.displayRemove = false;
            reordList.elementHeight       = 0;
            reordList.draggable           = reordList.elementHeight > 0f;
            reordList.drawHeaderCallback += (Rect rect) =>
            {
                EditorGUI.LabelField(new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight), "Animations", EditorStyles.boldLabel);
                Texture2D btnTexture = reordList.elementHeight == 0f ? EditorGUIUtility.FindTexture("winbtn_win_max_h") : EditorGUIUtility.FindTexture("winbtn_win_min_h");
                if (GUI.Button(new Rect(rect.x + rect.width - EditorGUIUtility.singleLineHeight, rect.y, EditorGUIUtility.singleLineHeight, EditorGUIUtility.singleLineHeight), btnTexture, EditorStyles.label))
                {
                    reordList.elementHeight = reordList.elementHeight == 0f ? elementHeight : 0f;
                    reordList.draggable     = reordList.elementHeight > 0f;
                }
            };
            reordList.drawElementCallback += (Rect rect, int index, bool isActive, bool isFocused) =>
            {
                if (reordList.elementHeight == 0f)
                {
                    return;
                }
                DirectionalAnimData anim = (DirectionalAnimData)reordList.list[index];
                anim.name = GUI.TextField(new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight), anim.name);

                int   dirNb       = m_target.DirectionalAnimController.DirectionsPerAnim;
                float frameWidth  = rect.width / Mathf.Min(4, dirNb);
                int   rowNb       = 1 + (dirNb - 1) / 4;
                float frameHeight = (rect.height - EditorGUIUtility.singleLineHeight) / rowNb;
                for (int i = 0; i < dirNb; ++i)
                {
                    Vector2 dir    = Quaternion.Euler(Vector3.forward * (((float)i / dirNb) * 360f)) * Vector3.down;
                    Sprite  sprite = m_target.DirectionalAnimController.GetPreviewAnimSprite(dir, index);
                    if (sprite)
                    {
                        float aspectRatio = sprite.rect.width / sprite.rect.height;
                        Rect  uv          = new Rect()
                        {
                            position = Vector2.Scale(sprite.rect.position, sprite.texture.texelSize), size = Vector2.Scale(sprite.rect.size, sprite.texture.texelSize)
                        };
                        Rect rAnim = new Rect(rect.x + frameWidth * (i % 4), rect.y + EditorGUIUtility.singleLineHeight + (i / 4) * frameHeight, frameHeight * aspectRatio, frameHeight);
                        GUI.DrawTextureWithTexCoords(rAnim, sprite.texture, uv);
                    }
                    else
                    {
                        Rect rBox = new Rect(rect.x + frameWidth * i, rect.y + EditorGUIUtility.singleLineHeight, frameWidth, rect.height - EditorGUIUtility.singleLineHeight);
                        GUI.Box(rBox, "");
                    }
                }
            };
            reordList.onSelectCallback += (ReorderableList list) =>
            {
                m_target.AnimIndex = m_animReordList.index;
                GUI.changed        = true;
            };
            return(reordList);
        }
Beispiel #22
0
 public static void CreateStruct()
 {
     ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, new EndNameActions.SetFileName2FirstKeyWord(), "NewStruct.cs", EditorGUIUtility.FindTexture("cs Script Icon"), "CsSturct t:CsCodeTemplate");
 }
Beispiel #23
0
        private void OnScene(SceneView view)
        {
            if (EditorWindow.focusedWindow != view)
            {
                toSelect = null;
            }
            if (toSelect != null)
            {
                Selection.activeObject = toSelect;
            }

            using (HandleGUIDispose.BeginGUI()) {
                // editMode = GUI.Toggle(new Rect(10, 10, 80, EditorGUIUtility.singleLineHeight), editMode, "Edit Tilemap", "Button");
                RenderToolButtons();
                if (mode == WorkingMode.Disable)
                {
                    toSelect = null;
                    return;
                }
                if (mode == WorkingMode.Select)
                {
                    SelectTilemap(view);
                }
                if (active == null && (int)mode >= 2)
                {
                    mode = WorkingMode.Disable;
                }

                if (mode == WorkingMode.Paint)
                {
                    int sel_x = selectedTile % active.TilesetWidth;
                    int sel_y = selectedTile / active.TilesetWidth;

                    GUI.DrawTextureWithTexCoords(new Rect(10, 50, 128, 128), active.TilesetMaterial.mainTexture, new Rect(sel_x * 1f / 16, 1 - (1 + sel_y) * 1 / 16f, 1 / 16f, 1 / 16f));
                    selectedTile = EditorGUI.IntField(new Rect(10 + 32, 50 + 8, 64, EditorGUIUtility.singleLineHeight), selectedTile);

                    if (GUI.Button(new Rect(10 - 8, 50 + 64 - 8, 16, 16), EditorGUIUtility.FindTexture("node1 hex")))
                    {
                        selectedTile = (active.TilesetWidth * active.TilesetHeight + selectedTile - 1) % (active.TilesetWidth * active.TilesetHeight);
                    }
                    if (GUI.Button(new Rect(10 - 8 + 128, 50 + 64 - 8, 16, 16), EditorGUIUtility.FindTexture("node1 hex")))
                    {
                        selectedTile = (active.TilesetWidth * active.TilesetHeight + selectedTile + 1) % (active.TilesetWidth * active.TilesetHeight);
                    }

                    if (GUI.Button(new Rect(10 + 64 - 8, 50 - 8, 16, 16), EditorGUIUtility.FindTexture("node1 hex")))
                    {
                        selectedTile = (active.TilesetWidth * active.TilesetHeight + selectedTile - active.TilesetWidth) % (active.TilesetWidth * active.TilesetHeight);
                    }

                    if (GUI.Button(new Rect(10 + 64 - 8, 50 + 120, 16, 16), EditorGUIUtility.FindTexture("node1 hex")))
                    {
                        selectedTile = (active.TilesetWidth * active.TilesetHeight + selectedTile + active.TilesetWidth) % (active.TilesetWidth * active.TilesetHeight);
                    }
                }
            }

            if (mode == WorkingMode.Paint)
            {
                var planes = GeometryUtility.CalculateFrustumPlanes(view.camera);
                var plane  = new Plane(Vector3.forward, active.TilemapBounds.center);

                float enter;
                var   ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
                plane.Raycast(ray, out enter);
                var hitpoint = ray.GetPoint(enter);

                if (!active.TilemapBounds.Contains(hitpoint))
                {
                    return;
                }

                var tilepos = (hitpoint - active.transform.position);
                var tile_x  = Mathf.RoundToInt(tilepos.x);
                var tile_y  = Mathf.RoundToInt(tilepos.y);

                if (Handles.Button(new Vector3(tile_x, tile_y, 0) + active.transform.position, Quaternion.identity, active.TileSize / 2f, 1f, Handles.RectangleCap))
                {
                    active.Tiles[tile_y * active.TileMapWidth + tile_x] = selectedTile;
                    active.OnValidate();
                    EditorUtility.SetDirty(active);
                }
            }



            if (mode == WorkingMode.Modify)
            {
                #region Modify

                var p  = active.TilemapBounds.center;
                var d  = active.TilemapBounds.extents;
                var dx = new Vector3(d.x, 0, 0);
                var dy = new Vector3(0, d.y, 0);

                var size = 0.25f;
                Handles.color = Color.yellow;
                EditorGUI.BeginChangeCheck();
                var pos = Handles.FreeMoveHandle(p + dx, Quaternion.identity, 0.25f, Vector3.right, Handles.RectangleCap);
                if (EditorGUI.EndChangeCheck())
                {
                    var delta = pos - (p + dx);
                    if (delta.x > 0.75f * active.TileSize)
                    {
                        var rows = active.Tiles.Count / active.TileMapWidth;
                        for (int i = 0; i < rows; ++i)
                        {
                            active.Tiles.Insert(active.TileMapWidth * (i + 1) + i, 0);
                        }
                        active.TileMapWidth += 1;
                    }
                    else
                    if (delta.x < -0.75f * active.TileSize)
                    {
                        if (active.TileMapWidth < 2)
                        {
                            return;
                        }

                        var rows = active.Tiles.Count / active.TileMapWidth;
                        for (int r = 1; r < rows; ++r)
                        {
                            for (int i = 0; i < active.TileMapWidth; ++i)
                            {
                                active.Tiles[i - r + r * active.TileMapWidth] = active.Tiles[i + r * active.TileMapWidth];
                            }
                        }
                        active.Tiles.RemoveRange(active.Tiles.Count - 1 - rows, rows);

                        active.TileMapWidth -= 1;
                    }

                    active.OnValidate();
                    EditorUtility.SetDirty(active);
                }

                EditorGUI.BeginChangeCheck();
                pos = Handles.FreeMoveHandle(p + dy, Quaternion.identity, 0.25f, Vector3.up, Handles.RectangleCap);
                if (EditorGUI.EndChangeCheck())
                {
                    var delta = pos - (p + dy);
                    if (delta.y > 0.75f * active.TileSize)
                    {
                        active.Tiles.AddRange(new int[StepUp(active.TileMapWidth, active.Tiles.Count) - active.Tiles.Count]);
                    }
                    if (delta.y < -0.75f * active.TileSize)
                    {
                        var n = StepDown(active.TileMapWidth, active.Tiles.Count);
                        active.Tiles.RemoveRange(n, active.Tiles.Count - n);
                    }

                    active.OnValidate();
                    EditorUtility.SetDirty(active);
                }

                #endregion
            }
        }
        static void MenuCreateDiffusionProfile()
        {
            var icon = EditorGUIUtility.FindTexture("ScriptableObject Icon");

            ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, ScriptableObject.CreateInstance <DoCreateNewAssetDiffusionProfileSettings>(), "New Diffusion Profile.asset", icon, null);
        }
Beispiel #25
0
 /// <summary>
 /// \~english   Initialization of the class
 /// </summary>
 static MaterialTreeView()
 {
     s_FolderIcon   = EditorGUIUtility.FindTexture("Folder Icon");
     s_MaterialIcon = EditorGUIUtility.FindTexture("Material Icon");
     s_toggleMixed  = new GUIStyle("ToggleMixed");
 }
        public override void OnInspectorGUI()
        {
            serializedObject.Update();

            EditorGUILayout.Space();
            TileRenderer renderer = tileMap.GetComponent <TileRenderer>();

            if (renderer == null)
            {
                Texture2D tex = EditorGUIUtility.FindTexture("console.erroricon");
                if (GUILayout.Button(new GUIContent("No TileRenderer attached! Click here to add one.", tex), EditorStyles.helpBox))
                {
                    GenericMenu menu = new GenericMenu();
                    foreach (Type type in Assembly.GetAssembly(typeof(TileRenderer)).GetTypes().Where(t => t.IsClass && !t.IsAbstract && t.IsSubclassOf(typeof(TileRenderer))))
                    {
                        menu.AddItem(new GUIContent(type.Name), false, () => { tileMap.gameObject.AddComponent(type); });
                    }
                    menu.ShowAsContext();
                }
            }
            EditorGUILayout.Space();
            EditorGUI.BeginChangeCheck();
            tileMap.isInEditMode = GUILayout.Toggle(tileMap.isInEditMode, "", "Button", GUILayout.Height(EditorGUIUtility.singleLineHeight * 1.5f));
            string toggleButtonText = (tileMap.isInEditMode ? "Exit" : "Enter") + " Edit Mode [TAB]";

            GUI.Label(GUILayoutUtility.GetLastRect(), toggleButtonText, MyStyles.centerBoldLabel);

            if (EditorGUI.EndChangeCheck())
            {
                if (tileMap.isInEditMode)
                {
                    OnEnterEditMode();
                }
                else
                {
                    OnExitEditMode();
                }
            }
            EditorGUILayout.Space();

            GUILayout.Label("Settings", MyStyles.leftBoldLabel);

            int width = spWidth.intValue;

            width = EditorGUILayout.IntField(spWidth.displayName, width);
            int height = spHeight.intValue;

            height = EditorGUILayout.IntField(spHeight.displayName, height);

            if (width != spWidth.intValue || height != spHeight.intValue)
            {
                tileMap.Resize(width, height);
                OnSceneGUI();
            }
            EditorGUILayout.Space();

            GUILayout.Label("Tools", MyStyles.leftBoldLabel);
            GUILayout.BeginHorizontal();
            if (GUILayout.Button("Force Refresh"))
            {
                tileMap.UpdateTileMap();
            }
            GUI.color = new Color(1f, 0.5f, 0.5f);
            if (GUILayout.Button("Clear All Tiles"))
            {
                if (EditorUtility.DisplayDialog("Are you sure?", "Do you really want to clear this tilemap without saving?", "Okay", "Cancel"))
                {
                    tileMap.Reset();
                    SetTileMapDirty();
                }
            }
            GUI.color = Color.white;
            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal();
            if (GUILayout.Button("Import"))
            {
                string path = EditorUtility.OpenFilePanelWithFilters("Select .tilemap File", "Assets", new string[] { "ScriptableObject", "asset" });
                if (path != string.Empty)
                {
                    int cutoffFrom = path.IndexOf("Assets");
                    path = path.Substring(cutoffFrom);
                    Debug.Log(path);
                    TileMapContainer container = AssetDatabase.LoadAssetAtPath <TileMapContainer>(path) as TileMapContainer;
                    if (EditorUtility.DisplayDialog("Are you sure?", "Importing this tilemap will override the current one without saving it.", "Okay", "Cancel"))
                    {
                        tileMap.Resize(container.width, container.height);
                        for (int x = 0; x < container.width; x++)
                        {
                            for (int y = 0; y < container.height; y++)
                            {
                                tileMap.SetTileAt(x, y, container.map[x + y * container.width]);
                            }
                        }
                    }
                }
            }
            if (GUILayout.Button("Export"))
            {
                TileMapContainer container = ScriptableObjectUtility.CreateAsset <TileMapContainer>(tileMap.name + ".asset");
                container.map    = tileMap.Map;
                container.width  = tileMap.Width;
                container.height = tileMap.Height;
            }
            GUILayout.EndHorizontal();
            if (Event.current.type == EventType.KeyDown && Event.current.isKey && Event.current.keyCode == KeyCode.Tab)
            {
                tileMap.isInEditMode = !tileMap.isInEditMode;
            }
            if (Event.current.type == EventType.KeyDown && Event.current.isKey && Event.current.keyCode == KeyCode.Escape)
            {
                tileMap.isInEditMode = false;
            }

            serializedObject.ApplyModifiedProperties();
        }
        public void SetData(IEnumerable <ViewSystemVerifier.ViewSystemGameObjectMissingData> originalNotFoundItems, ViewSystemSaveData saveData, Action OnComplete)
        {
            titleContent = new GUIContent("Missing GameObject fixer");
            this.icon    = EditorGUIUtility.FindTexture("MetaFile Icon");
            this.lable   = "Select the GameObject Path your wish to fix";
            fixerDatas   = originalNotFoundItems.Select(m =>
                                                        new FixerData
            {
                originalNotFoundItem = m,
                tempPath             = m.viewSystemComponent.targetTransformPath
            }).ToList();

            OnAllClick += () =>
            {
                fixerDatas.All(x =>
                {
                    x.fix = true;
                    return(true);
                });
            };
            OnNoneClick += () =>
            {
                fixerDatas.All(x =>
                {
                    x.fix = false;
                    return(true);
                });
            };
            OnCancelClick += () =>
            {
            };
            OnApplyClick += () =>
            {
                foreach (var item in fixerDatas)
                {
                    if (item.fix == false)
                    {
                        continue;
                    }

                    if (item.delete == true)
                    {
                        foreach (var vp in saveData.viewPages)
                        {
                            foreach (var vpi in vp.viewPage.viewPageItems.Where(m => m.viewElement == item.originalNotFoundItem.viewElement))
                            {
                                vpi.overrideDatas.RemoveAll(
                                    m => m.targetTransformPath == item.originalNotFoundItem.viewSystemComponent.targetTransformPath);
                            }
                        }
                        foreach (var vs in saveData.viewStates)
                        {
                            // foreach (var vpi in vs.viewState.viewPageItems)
                            // {
                            //     vpi.overrideDatas.RemoveAll(m => m.targetComponentType == item.Key && m.targetPropertyName == item2.originalPropertyName);
                            // }
                            foreach (var vpi in vs.viewState.viewPageItems.Where(m => m.viewElement == item.originalNotFoundItem.viewElement))
                            {
                                vpi.overrideDatas.RemoveAll(
                                    m => m.targetTransformPath == item.originalNotFoundItem.viewSystemComponent.targetTransformPath);
                            }
                        }
                        continue;
                    }
                    item.originalNotFoundItem.viewSystemComponent.targetTransformPath = item.tempPath;
                }

                // var f = fixerDatas.Where(m => m.fix);
                // foreach (var item in f)
                // {
                // }

                // var d = fixerDatas.Where(m => m.delete);
                // foreach (var item in d)
                // {
                //     item.originalNotFoundItem.viewSystemComponent.targetTransformPath = item.tempPath;
                // }
            };
        }
    private static bool PopupButtonClicked()
    {
        var buttonImage = EditorGUIUtility.FindTexture("_Popup");

        return(GUILayout.Button(buttonImage, GUI.skin.GetStyle("Label"), GUILayout.MinWidth(20), GUILayout.Width(20)));
    }
Beispiel #29
0
 private static bool ShouldUseNewUI()
 {
     return(EditorGUIUtility.FindTexture("Folder Icon").width > 64);
 }
        internal void AddEntries(List <SearchTreeEntry> cache, IEnumerable <UdonNodeDefinition> definitions, int level,
                                 bool stripToLastDot = false)
        {
            Texture2D icon = AssetPreview.GetMiniTypeThumbnail(typeof(GameObject));
            Texture2D iconGetComponents = EditorGUIUtility.FindTexture("d_ViewToolZoom");
            Texture2D iconOther         = new Texture2D(1, 1);

            iconOther.SetPixel(0, 0, new Color(0, 0, 0, 0));
            iconOther.Apply();
            Dictionary <string, UdonNodeDefinition> baseNodeDefinition = new Dictionary <string, UdonNodeDefinition>();

            foreach (UdonNodeDefinition nodeDefinition in definitions.OrderBy(
                         s => UdonGraphExtensions.PrettyFullName(s)))
            {
                string   baseIdentifier      = nodeDefinition.fullName;
                string[] splitBaseIdentifier = baseIdentifier.Split(new[] { "__" }, StringSplitOptions.None);
                if (splitBaseIdentifier.Length >= 2)
                {
                    baseIdentifier = $"{splitBaseIdentifier[0]}__{splitBaseIdentifier[1]}";
                }

                if (baseNodeDefinition.ContainsKey(baseIdentifier))
                {
                    continue;
                }

                baseNodeDefinition.Add(baseIdentifier, nodeDefinition);
            }

            var nodesOfGetComponentType = new List <SearchTreeEntry>();
            var nodesOfOtherType        = new List <SearchTreeEntry>();

            // add all subTypes
            foreach (KeyValuePair <string, UdonNodeDefinition> nodeDefinitionsEntry in baseNodeDefinition)
            {
                string nodeName = UdonGraphExtensions.PrettyBaseName(nodeDefinitionsEntry.Key);
                nodeName = nodeName.UppercaseFirst();
                nodeName = nodeName.Replace("_", " ");
                if (stripToLastDot)
                {
                    int lastDotIndex = nodeName.LastIndexOf('.');
                    nodeName = nodeName.Substring(lastDotIndex + 1);
                }

                // Skip some nodes that should be added in other ways (variables and comments)
                if (nodeName.StartsWithCached("Variable") || nodesToSkip.Contains(nodeDefinitionsEntry.Key))
                {
                    continue;
                }

                if (nodeName.StartsWithCached("Object"))
                {
                    nodeName = $"{nodeDefinitionsEntry.Value.type.Namespace}.{nodeName}";
                }

                if (nodeNamesGetComponentType.Contains(nodeName))
                {
                    nodesOfGetComponentType.Add(new SearchTreeEntry(new GUIContent(nodeName, iconGetComponents))
                    {
                        level = level + 1, userData = nodeDefinitionsEntry.Value
                    });
                    continue;
                }

                // Only put 'Equals' in the 'Other' category if this definition is not an Enum
                if (nodeNamesOtherType.Contains(nodeName) || nodeName == "Equals" && !nodeDefinitionsEntry.Value.type.IsEnum)
                {
                    nodesOfOtherType.Add(new SearchTreeEntry(new GUIContent(nodeName, iconOther))
                    {
                        level = level + 1, userData = nodeDefinitionsEntry.Value
                    });
                    continue;
                }

                cache.Add(new SearchTreeEntry(new GUIContent(nodeName, icon))
                {
                    level = level, userData = nodeDefinitionsEntry.Value
                });
            }

            // add getComponents level
            if (nodesOfGetComponentType.Count > 0)
            {
                cache.Add(new SearchTreeGroupEntry(new GUIContent("GetComponents"), level));
                foreach (var entry in nodesOfGetComponentType)
                {
                    cache.Add(entry);
                }
            }

            // add other level
            if (nodesOfOtherType.Count > 0)
            {
                cache.Add(new SearchTreeGroupEntry(new GUIContent("Other"), level));
                foreach (var entry in nodesOfOtherType)
                {
                    cache.Add(entry);
                }
            }
        }