internal void AddGameObject(GameObject gameObject, string type, bool autoselect = true, bool addToSelectedParent = false, bool expand = false)
        {
            if (gameObject == null)
            {
                switch (type.ToLower())
                {
                case "empty":
                    gameObject      = new GameObject();
                    gameObject.Name = "Empty Game Object";

                    break;

                case "sprite":
                    gameObject      = new Sprite();
                    gameObject.Name = "Sprite Game Object";

                    break;

                case "animatedsprite":
                    gameObject      = new AnimatedSprite();
                    gameObject.Name = "Animated Sprite Game Object";

                    break;

                case "audio":
                    gameObject      = new AudioObject();
                    gameObject.Name = "Audio Game Object";

                    break;

                case "tileset":
                    gameObject      = new Tileset();
                    gameObject.Name = "Tileset Game Object";

                    break;

                case "bmfont":
                    gameObject      = new BMFont();
                    gameObject.Name = "Bitmap Font Object";

                    break;

                case "particleemitter":
                    gameObject      = new ParticleEmitter();
                    gameObject.Name = "Particle Emitter Object";

                    break;
                }
            }
            else
            {
                gameObject.Initialize();
            }

            if (SelectedItem == null)
            {
                SceneManager.ActiveScene.GameObjects.Add(gameObject);
            }
            else
            {
                if (addToSelectedParent)
                {
                    GameObject _gameObject = (GameObject)(SelectedItem as DragDropTreeViewItem).Tag;
                    if (_gameObject.Transform.Parent == null)
                    {
                        SceneManager.ActiveScene.GameObjects.Add(gameObject);
                    }
                    else
                    {
                        _gameObject.Transform.Parent.GameObject.Children.Add(gameObject);
                    }
                }
                else
                {
                    GameObject _gameObject = (GameObject)(SelectedItem as DragDropTreeViewItem).Tag;
                    _gameObject.Children.Add(gameObject);
                }
            }

            if (gameObject != null)
            {
                DragDropTreeViewItem _parent = SelectedItem as DragDropTreeViewItem;
                if (addToSelectedParent)
                {
                    var tmp = EditorUtils.FindVisualParent <DragDropTreeViewItem>(_parent);

                    if (tmp != null)
                    {
                        _parent = tmp;
                    }
                    else
                    {
                        _parent = null;
                    }
                }

                DragDropTreeViewItem node = AddNode(_parent, gameObject, GameObjectImageSource(gameObject));

                if (_parent != null && expand)
                {
                    //_parent.ExpandSubtree();
                    _parent.IsExpanded = true;
                }

                node.ContextMenu = contextMenu;
                // AddNodes(gameObject);
                //node.IsSelected = true;

                AttachChildren(node);
                //foreach (GameObject _obj in gameObject.Children)
                //    AddGameObject(_obj, string.Empty);

                if (autoselect)
                {
                    node.IsSelected = true;
                    EditorHandler.SelectedGameObjects = new List <GameObject>();
                    EditorHandler.SelectedGameObjects.Add(gameObject);
                }
            }
        }