static void Init()
        {
            // Get existing open window or if none, make a new one:
            ObjectSpawner m_thisWindow = (ObjectSpawner)EditorWindow.GetWindow(typeof(ObjectSpawner));

            m_thisWindow.minSize = m_minWindowSize;
            m_thisWindow.Show();
        }
        void OnGUI()
        {
            if (m_thisWindow == null)
            {
                m_thisWindow = (ObjectSpawner)EditorWindow.GetWindow(typeof(ObjectSpawner));
            }
            if (m_thisWindow != null)
            {
                m_thisWindow.minSize = m_minWindowSize;
            }

            //selectedStyle = EditorStyles.miniButton;
            //selectedStyle.normal.background = Texture2D.blackTexture;

            GUILayout.Label("Jack's Custom Instancing Manager", EditorStyles.boldLabel);
            EditorGUILayout.Space();

            int registeredCount = SceneViewInstancing.m_registeredInstancedAssets.Count;

            for (int i = 0; i < registeredCount; i++)
            {
                IndirectInstancedAsset asset = SceneViewInstancing.m_registeredInstancedAssets[i];
                if (!m_activeIcons.Exists(x => x.asset == asset))
                {
                    SelectableIcon newIcon = new SelectableIcon();
                    newIcon.asset      = asset;
                    newIcon.icon       = null;
                    newIcon.isSelected = false;
                    m_activeIcons.Add(newIcon);
                }
            }

            //repaint unloaded icons and remove icons of assets that are no longer active in the scene
            for (int i = 0; i < m_activeIcons.Count; i++)
            {
                Mesh instancedObject = m_activeIcons[i].asset.m_LodSettings[0].mesh;
                if (instancedObject != null)
                {
                    bool           isLoadingAssetPreview = AssetPreview.IsLoadingAssetPreview(instancedObject.GetInstanceID());
                    SelectableIcon icon = m_activeIcons[i];
                    icon.icon = AssetPreview.GetAssetPreview(instancedObject);
                    if (!icon.icon)
                    {
                        // We have a static preview it just hasn't been loaded yet. Repaint until we have it loaded.
                        if (isLoadingAssetPreview)
                        {
                            Repaint();
                        }
                        icon.icon = AssetPreview.GetMiniThumbnail(instancedObject);
                    }
                    m_activeIcons[i] = icon; //we cannot modify 1 part of a struct, we need to make a copy, modify it, then set the original to the copy
                }

                IndirectInstancedAsset asset = m_activeIcons[i].asset;
                if (!SceneViewInstancing.m_registeredInstancedAssets.Contains(asset))
                {
                    m_activeIcons.RemoveAt(i);
                }
            }

            int windowWidth = (int)EditorGUIUtility.currentViewWidth;
            int numColumns  = Mathf.FloorToInt(windowWidth / m_buttonDimension);
            int numRows     = Mathf.CeilToInt((float)registeredCount / numColumns);

            GUILayout.BeginArea(new Rect(10, 40, numColumns * m_buttonDimension, numRows * m_buttonDimension), Texture2D.whiteTexture, EditorStyles.helpBox);
            for (int i = 0; i < m_activeIcons.Count; i++)
            {
                if (i % numColumns == 0)
                {
                    GUILayout.BeginHorizontal();
                }

                SelectableIcon icon = m_activeIcons[i];
                if (icon.isSelected)
                {
                    GUI.backgroundColor = Color.blue;
                }
                else
                {
                    GUI.backgroundColor = Color.white;
                }

                if (GUILayout.Button(icon.icon, GUILayout.Width(64), GUILayout.Height(64)))
                {
                    icon.isSelected  = !icon.isSelected;
                    m_activeIcons[i] = icon;
                    Debug.Log(icon.isSelected);
                }

                if (i % numColumns == (numColumns - 1))
                {
                    GUILayout.EndHorizontal();
                }
            }
            GUILayout.EndArea();
        }