コード例 #1
0
        public override VisualElement Build()
        {
            var root = Resources.TypeInspector.Clone();

            var label = root.Q <Label>("label");

            label.text = DisplayName;

            var input = root.Q <VisualElement>("input");

            input.RegisterCallback <MouseDownEvent>(e =>
            {
                var items = new List <SearchView.Item>();
                foreach (var platform in Platform.AvailablePlatforms)
                {
                    var type = platform.GetType();
                    if (type.HasAttribute <HideInInspector>() ||
                        type.HasAttribute <ObsoleteAttribute>())
                    {
                        continue;
                    }

                    items.Add(new SearchView.Item
                    {
                        Path = platform.DisplayName,
                        Icon = Resources.GetPlatformIcon(platform.IconName),
                        Data = platform
                    });
                }

                items = items.OrderBy(item => item.Path).ToList();

                SearchWindow searchWindow = SearchWindow.Create();
                searchWindow.Title        = "Platform";
                searchWindow.Items        = items;
                searchWindow.OnSelection += item =>
                {
                    Target             = (Platform)item.Data;
                    m_TextElement.text = Target.DisplayName;
                };

                var rect              = EditorWindow.focusedWindow.position;
                var button            = input.worldBound;
                searchWindow.position = new Rect(rect.x + button.x, rect.y + button.y + button.height, 230, 315);
                searchWindow.ShowPopup();

                e.StopPropagation();
            });

            m_TextElement      = input.Q <TextElement>("text");
            m_TextElement.text = Target?.DisplayName;

            return(root);
        }
コード例 #2
0
        public override VisualElement Build()
        {
            var root = Resources.TypeInspector.Clone();

            var label = root.Q <Label>("label");

            label.text = DisplayName;

            var input = root.Q <VisualElement>("input");

            input.RegisterCallback <MouseDownEvent>(e =>
            {
                var items = new List <SearchView.Item>();
                var types = TypeCache.GetTypesDerivedFrom <T>();
                foreach (var type in types)
                {
                    if (type.IsAbstract || type.IsInterface ||
                        type.HasAttribute <HideInInspector>() ||
                        type.HasAttribute <ObsoleteAttribute>())
                    {
                        continue;
                    }

                    if (!TypeConstruction.CanBeConstructed(type))
                    {
                        continue;
                    }

                    if (TypeFilter != null && !TypeFilter(type))
                    {
                        continue;
                    }

                    var name     = GetName(type);
                    var category = GetCategory(type);
                    items.Add(new SearchView.Item
                    {
                        Path = !string.IsNullOrEmpty(category) ? $"{category}/{name}" : name,
                        Icon = GetIcon(type),
                        Data = type
                    });
                }
                items = items.OrderBy(item => item.Path).ToList();

                SearchWindow searchWindow = SearchWindow.Create();
                searchWindow.Title        = Title;
                searchWindow.Items        = items;
                searchWindow.OnSelection += item =>
                {
                    var type = (Type)item.Data;
                    if (TypeConstruction.TryConstruct <T>(type, out var instance))
                    {
                        Target             = instance;
                        m_TextElement.text = GetName(type);
                    }
                };

                var rect              = EditorWindow.focusedWindow.position;
                var button            = input.worldBound;
                searchWindow.position = new Rect(rect.x + button.x, rect.y + button.y + button.height, 230, 315);
                searchWindow.ShowPopup();

                e.StopPropagation();
            });

            m_TextElement      = input.Q <TextElement>("text");
            m_TextElement.text = GetName(Target?.GetType());

            return(root);
        }