Example #1
0
        protected virtual void OnDragEnter(PointerEventData pointerEventData)
        {
            if (m_prefabInstance != null)
            {
                return;
            }

            if (Editor.DragDrop.DragObjects[0] is AssetItem)
            {
                AssetItem assetItem = (AssetItem)Editor.DragDrop.DragObjects[0];
                if (m_project.ToType(assetItem) == typeof(GameObject))
                {
                    Editor.DragDrop.SetCursor(KnownCursor.DropAllowed);
                    Editor.IsBusy = true;
                    m_project.Load(new[] { assetItem }, (error, obj) =>
                    {
                        Editor.IsBusy = false;

                        OnAssetItemLoaded(error, obj);
                    });
                    m_dragItem = null;
                }
                else if (m_project.ToType(assetItem) == typeof(Material))
                {
                    m_dragItem = assetItem;
                }
            }
        }
Example #2
0
        private void OnProjectResourcesDoubleClick(object sender, ProjectTreeEventArgs e)
        {
            if (e.ProjectItem == null)
            {
                return;
            }

            if (e.ProjectItem.IsFolder)
            {
                m_projectTree.SelectedFolder = e.ProjectItem;
            }
            else
            {
                if (m_project.IsScene(e.ProjectItem))
                {
                    Editor.IsPlaying = false;
                    Editor.IsBusy    = true;
                    m_project.Load(new[] { (AssetItem)e.ProjectItem }, (error, obj) =>
                    {
                        Editor.IsBusy = false;
                        if (error.HasError)
                        {
                            m_windowManager.MessageBox("Unable to load scene " + e.ProjectItem.ToString(), error.ToString());
                        }
                    });
                }
            }
        }
Example #3
0
        private void OnProjectFolderItemDoubleClick(object sender, ProjectTreeEventArgs e)
        {
            if (e.ProjectItem == null)
            {
                return;
            }

            if (e.ProjectItem.IsFolder)
            {
                m_projectTree.SelectedItem = e.ProjectItem;
            }
            else
            {
                if (m_project.IsScene(e.ProjectItem))
                {
                    Editor.IsPlaying = false;
                    Editor.IsBusy    = true;
                    m_project.Load(new[] { (AssetItem)e.ProjectItem }, (error, obj) =>
                    {
                        Editor.IsBusy = false;
                        if (error.HasError)
                        {
                            m_windowManager.MessageBox(m_localization.GetString("ID_RTEditor_ProjectView_UnableToLoadScene", "Unable to load scene") + " " + e.ProjectItem.ToString(), error.ToString());
                        }
                    });
                }
            }
        }
Example #4
0
        private void HandleSelectionChanged(AssetItem assetItem)
        {
            if (assetItem != null && assetItem.TypeGuid == m_noneGuid)
            {
                IsNoneSelected = true;
                SelectedObject = null;
            }
            else
            {
                IsNoneSelected = false;

                if (assetItem != null)
                {
                    if (m_sceneObjects.ContainsKey(assetItem.ItemID))
                    {
                        SelectedObject = m_sceneObjects[assetItem.ItemID];
                    }
                    else
                    {
                        SelectedObject = null;
                        m_project.Load(new[] { assetItem }, (error, obj) =>
                        {
                            SelectedObject = obj[0];
                        });
                    }
                }
                else
                {
                    SelectedObject = null;
                }
            }

            m_parentDialog.IsOkInteractable = m_treeView.SelectedItem != null;
        }
Example #5
0
        private IEnumerator CoLoadScript(AssetItem assetItem, ProjectAsyncOperation <RuntimeTextAsset> ao)
        {
            ProjectAsyncOperation <UnityObject[]> loadAo = m_project.Load(new[] { assetItem });

            yield return(loadAo);

            ao.Error = loadAo.Error;
            if (!ao.HasError)
            {
                ao.Result = (RuntimeTextAsset)loadAo.Result[0];
            }
            ao.IsCompleted = true;
        }
Example #6
0
        public void Load(object dragObject, Type memberInfoType, Action <UnityObject> callback)
        {
            if (dragObject is AssetItem)
            {
                AssetItem assetItem = (AssetItem)dragObject;
                IProject  project   = IOC.Resolve <IProject>();
                project.Load(new[] { assetItem }, (error, loadedObjects) =>
                {
                    if (error.HasError)
                    {
                        IWindowManager wnd = IOC.Resolve <IWindowManager>();
                        wnd.MessageBox("Unable to load object", error.ErrorText);
                        return;
                    }

                    callback(loadedObjects[0]);
                });
            }
            else if (dragObject is GameObject)
            {
                UnityObject value = GetGameObjectOrComponent((GameObject)dragObject, memberInfoType);
                callback(value);
            }
            else if (dragObject is ExposeToEditor)
            {
                UnityObject value = GetGameObjectOrComponent(((ExposeToEditor)dragObject).gameObject, memberInfoType);
                callback(value);
            }
        }
Example #7
0
        IEnumerator LoadScene()
        {
            if (m_progressText != null)
            {
                m_progressText.text = "Loading ...";
            }


            yield return(FadeInProgress());

            ProjectAsyncOperation ao = m_project.Load <Scene>(m_scenePath);

            yield return(ao);

            yield return(FadeOutProgress());

            if (m_progress != null)
            {
                m_progress.gameObject.SetActive(false);
            }

            if (ao.Error.HasError)
            {
                Debug.LogError(ao.Error.ToString());
            }
        }
        public override void Drop(object[] dragObjects, PointerEventData pointerEventData)
        {
            base.Drop(dragObjects, pointerEventData);

            m_isSpawningPrefab = true;
            if (CanDrop(dragObjects))
            {
                for (int i = 0; i < dragObjects.Length; ++i)
                {
                    object    dragObject = dragObjects[i];
                    AssetItem assetItem  = dragObject as AssetItem;

                    if (assetItem != null)
                    {
                        m_project.Load(assetItem, (error, obj) =>
                        {
                            if (obj is GameObject)
                            {
                                GameObject prefab     = (GameObject)obj;
                                bool wasPrefabEnabled = prefab.activeSelf;
                                prefab.SetActive(false);

                                GameObject prefabInstance = Instantiate(prefab, Vector3.zero, Quaternion.identity, ((GameObject)m_treeView.DropTarget).transform);

                                prefab.SetActive(wasPrefabEnabled);

                                ExposeToEditor exposeToEditor = prefabInstance.GetComponent <ExposeToEditor>();
                                if (exposeToEditor == null)
                                {
                                    exposeToEditor = prefabInstance.AddComponent <ExposeToEditor>();
                                }

                                exposeToEditor.SetName(obj.name);
                                exposeToEditor.Parent = ((GameObject)m_treeView.DropTarget).GetComponent <ExposeToEditor>();
                                prefabInstance.SetActive(true);

                                RuntimeUndo.BeginRecord();
                                RuntimeUndo.RecordSelection();
                                RuntimeUndo.BeginRegisterCreateObject(prefabInstance);
                                RuntimeUndo.EndRecord();

                                bool isEnabled      = RuntimeUndo.Enabled;
                                RuntimeUndo.Enabled = false;
                                RuntimeSelection.activeGameObject = prefabInstance;
                                RuntimeUndo.Enabled = isEnabled;

                                RuntimeUndo.BeginRecord();
                                RuntimeUndo.RegisterCreatedObject(prefabInstance);
                                RuntimeUndo.RecordSelection();
                                RuntimeUndo.EndRecord();

                                m_isSpawningPrefab = false;
                            }
                        });
                    }
                }
                m_treeView.ExternalItemDrop();
            }
        }
Example #9
0
        private void UpdateDependantAssetPreviews(AssetItem[] assetItems, Action callback)
        {
            IResourcePreviewUtility previewUtil = IOC.Resolve <IResourcePreviewUtility>();

            AssetItem[] dependantItems = m_project.GetDependantAssetItems(assetItems).Where(item => !m_project.IsScene(item)).ToArray();
            if (dependantItems.Length > 0)
            {
                m_project.Load(dependantItems, (loadError, loadedObjects) =>
                {
                    if (loadError.HasError)
                    {
                        IsBusy = false;
                        m_wm.MessageBox("Unable to load assets", loadError.ErrorText);
                        return;
                    }

                    for (int i = 0; i < loadedObjects.Length; ++i)
                    {
                        UnityObject loadedObject = loadedObjects[i];
                        AssetItem dependantItem  = dependantItems[i];
                        if (loadedObject != null)
                        {
                            byte[] previewData    = previewUtil.CreatePreviewData(loadedObject);
                            dependantItem.Preview = new Preview {
                                ItemID = dependantItem.ItemID, PreviewData = previewData
                            };
                        }
                        else
                        {
                            dependantItem.Preview = new Preview {
                                ItemID = dependantItem.ItemID
                            };
                        }
                    }

                    m_project.SavePreview(dependantItems, (savePreviewError, savedAssetItems) =>
                    {
                        if (savePreviewError.HasError)
                        {
                            IsBusy = false;
                            m_wm.MessageBox("Unable to load assets", savePreviewError.ErrorText);
                            return;
                        }

                        callback();
                    });
                });
            }
            else
            {
                callback();
            }
        }
        public override void DragEnter(object[] dragObjects, PointerEventData eventData)
        {
            base.DragEnter(dragObjects, eventData);
            if (Editor.DragDrop.DragObjects[0] is AssetItem)
            {
                AssetItem assetItem = (AssetItem)Editor.DragDrop.DragObjects[0];
                if (m_project.ToType(assetItem) == typeof(GameObject))
                {
                    Editor.DragDrop.SetCursor(KnownCursor.DropAllowed);
                    Editor.IsBusy = true;
                    m_project.Load(assetItem, (error, obj) =>
                    {
                        Editor.IsBusy = false;
                        if (IsPointerOver)
                        {
                            if (obj is GameObject)
                            {
                                IScenePivot scenePivot = IOCContainer.Resolve <IScenePivot>();
                                Vector3 up             = Vector3.up;
                                if (Mathf.Abs(Vector3.Dot(Camera.transform.up, Vector3.up)) > Mathf.Cos(Mathf.Deg2Rad))
                                {
                                    up = Vector3.Cross(Camera.transform.right, Vector3.up);
                                }
                                else
                                {
                                    up = Vector3.up;
                                }
                                m_dragPlane = new Plane(up, scenePivot.SecondaryPivot.position);

                                GameObject prefab     = (GameObject)obj;
                                bool wasPrefabEnabled = prefab.activeSelf;
                                prefab.SetActive(false);

                                m_prefabInstance = Instantiate(prefab, Vector3.zero, Quaternion.identity);

                                prefab.SetActive(wasPrefabEnabled);

                                ExposeToEditor exposeToEditor = m_prefabInstance.GetComponent <ExposeToEditor>();
                                if (exposeToEditor == null)
                                {
                                    exposeToEditor = m_prefabInstance.AddComponent <ExposeToEditor>();
                                }

                                exposeToEditor.SetName(obj.name);
                                m_prefabInstance.SetActive(true);
                            }
                        }
                    });
                }
            }
        }
Example #11
0
        public override void DragEnter(object[] dragObjects, PointerEventData eventData)
        {
            base.DragEnter(dragObjects, eventData);
            if(Editor.DragDrop.DragObjects[0] is AssetItem)
            {
                AssetItem assetItem = (AssetItem)Editor.DragDrop.DragObjects[0];
                if (m_project.ToType(assetItem) == typeof(GameObject))
                {
                    Editor.DragDrop.SetCursor(KnownCursor.DropAllowed);
                    Editor.IsBusy = true;
                    m_project.Load(assetItem, (error, obj) =>
                    {
                        Editor.IsBusy = false;
                        if(IsPointerOver)
                        {
                            if (obj is GameObject)
                            {
                                GameObject prefab = (GameObject)obj;
                                bool wasPrefabEnabled = prefab.activeSelf;
                                prefab.SetActive(false);

                                m_prefabInstance = Instantiate(prefab, Vector3.zero, Quaternion.identity);

                                prefab.SetActive(wasPrefabEnabled);

                                ExposeToEditor exposeToEditor = m_prefabInstance.GetComponent<ExposeToEditor>();
                                if (exposeToEditor == null)
                                {
                                    exposeToEditor = m_prefabInstance.AddComponent<ExposeToEditor>();
                                }

                                exposeToEditor.SetName(obj.name);
                                m_prefabInstance.SetActive(true);

                                if(m_dropExecuted)
                                {
                                    RecordUndo();
                                    m_prefabInstance = null;
                                    m_dropExecuted = true;
                                }
                            }
                        }
                    });
                }
            }
        }
        protected virtual void OnDrop(PointerEventData pointerEventData)
        {
            if (!IsFilterEmpty)
            {
                return;
            }

            object[] dragObjects = Editor.DragDrop.DragObjects;
            if (CanDrop(dragObjects))
            {
                ExposeToEditor           dropTarget   = (ExposeToEditor)m_treeView.DropTarget;
                VirtualizingTreeViewItem treeViewItem = null;
                if (dropTarget != null)
                {
                    treeViewItem = m_treeView.GetTreeViewItem(m_treeView.DropTarget);
                }

                AssetItem[] loadAssetItems = dragObjects.Where(o => o is AssetItem && m_project.ToType((AssetItem)o) == typeof(GameObject)).Select(o => (AssetItem)o).ToArray();
                if (loadAssetItems.Length > 0)
                {
                    m_isSpawningPrefab = true;
                    Editor.IsBusy      = true;
                    m_project.Load(loadAssetItems, (error, objects) =>
                    {
                        Editor.IsBusy = false;
                        if (error.HasError)
                        {
                            IWindowManager wm = IOC.Resolve <IWindowManager>();
                            wm.MessageBox(m_localization.GetString("ID_RTEditor_HierarchyView_UnableToLoadAssetItems", "Unable to load asset items"), error.ErrorText);
                            return;
                        }

                        OnAssetItemsLoaded(objects, dropTarget, treeViewItem);
                    });
                }
                else
                {
                    m_treeView.ExternalItemDrop();
                }
            }
            else
            {
                m_treeView.ExternalItemDrop();
            }
        }
Example #13
0
        public static ProjectAsyncOperation <UnityObject[]> Load <T>(this IProject project, string path)
        {
            if (!project.IsOpened)
            {
                throw new InvalidOperationException("OpenProject first");
            }

            path = string.Format("{0}/{1}", project.Root.Name, path);

            AssetItem assetItem = project.Root.Get(path + project.GetExt(typeof(T))) as AssetItem;

            if (assetItem == null)
            {
                throw new ArgumentException("not found", "path");
            }

            return(project.Load(new[] { assetItem }));
        }
Example #14
0
        private static void GenerateProjCode(IProject proj)
        {
            proj.Load();

            if (proj is BEProj)
            {
                BuildEntityProj bp = new Net.Code.Builder.Build.BEBuild.BuildEntityProj(proj as BEProj);
                bp.BuildCode();
                bp.BuildMSSQL();
                bp.BuildMetaData();
            }
            else
            {
                BuildBPProj bp = new BuildBPProj(proj as BPProj);
                bp.BuildCode();
                bp.BuildMetaData();
            }
            //   compilerCode(proj);
        }
Example #15
0
        private static IEnumerator Load2(AssetItem assetItem, GameObject dummyGo, GameObject dummyChild, IProject project)
        {
            var loadResult = project.Load(assetItem);

            yield return(loadResult);

            Assert.IsFalse(loadResult.Error.HasError);
            GameObject loadedGo = (GameObject)loadResult.Result;

            Assert.AreEqual(dummyGo.name, loadedGo.name);
            Assert.AreEqual(dummyGo.transform.position, loadedGo.transform.position);

            Assert.AreEqual(1, loadedGo.transform.childCount);
            foreach (Transform child in loadedGo.transform)
            {
                Assert.AreEqual(dummyChild.name, child.gameObject.name);
                Assert.AreEqual(dummyChild.transform.position, child.transform.position);
            }
        }
Example #16
0
        public void OpenScene()
        {
            IsBusy = true;

            AssetItem assetItem = m_project.Root.Get("Assets/TestScene" + m_project.GetExt(typeof(Scene))) as AssetItem;

            if (assetItem != null)
            {
                m_project.Load(assetItem, (error, scene) =>
                {
                    if (error.HasError)
                    {
                        Debug.LogError(error.ToString());
                    }
                    Debug.Log("Scene Opened");
                    IsBusy = false;
                });
            }
        }
        private void OnDrop(PointerEventData pointerEventData)
        {
            object dragObject = Editor.DragDrop.DragObjects[0];

            if (dragObject is AssetItem)
            {
                AssetItem assetItem = (AssetItem)dragObject;
                IProject  project   = IOC.Resolve <IProject>();
                Editor.IsBusy = true;
                project.Load(new[] { assetItem }, (error, loadedObjects) =>
                {
                    Editor.IsBusy = false;
                    if (error.HasError)
                    {
                        IWindowManager wnd = IOC.Resolve <IWindowManager>();
                        wnd.MessageBox("Unable to load object", error.ErrorText);
                        return;
                    }

                    SetValue(loadedObjects[0]);
                    EndEdit();
                    SetInputField(loadedObjects[0]);
                    HideDragHighlight();
                });
            }
            else if (dragObject is GameObject)
            {
                UnityObject value = GetGameObjectOrComponent((GameObject)dragObject);
                SetValue(value);
                EndEdit();
                SetInputField(value);
                HideDragHighlight();
            }
            else if (dragObject is ExposeToEditor)
            {
                UnityObject value = GetGameObjectOrComponent(((ExposeToEditor)dragObject).gameObject);
                SetValue(value);
                EndEdit();
                SetInputField(value);
                HideDragHighlight();
            }
        }
Example #18
0
        private static bool Load(AssetItem assetItem, GameObject dummyGo, GameObject dummyChild, IProject project, bool done)
        {
            project.Load(assetItem, (loadError, obj) =>
            {
                Assert.IsFalse(loadError.HasError);
                GameObject loadedGo = (GameObject)obj;
                Assert.AreEqual(dummyGo.name, loadedGo.name);
                Assert.AreEqual(dummyGo.transform.position, loadedGo.transform.position);

                Assert.AreEqual(1, loadedGo.transform.childCount);
                foreach (Transform child in loadedGo.transform)
                {
                    Assert.AreEqual(dummyChild.name, child.gameObject.name);
                    Assert.AreEqual(dummyChild.transform.position, child.transform.position);
                }

                done = true;
            });
            return(done);
        }
Example #19
0
        private void SaveAssetToFolder(ProjectItem folder)
        {
            Editor.IsBusy = true;

            IRuntimeEditor editor = IOC.Resolve <IRuntimeEditor>();

            Asset.name = Input.text;

            m_project.Save(new[] { folder }, new[] { new byte[0] }, new[] { Asset }, null, SelectSavedAssets, (saveError, saveResult) =>
            {
                if (saveError.HasError)
                {
                    Editor.IsBusy = false;
                    m_windowManager.MessageBox(m_localization.GetString("ID_RTEditor_SaveAssetsDialog_UnableToSaveAsset", "Unable to save asset"), saveError.ToString());
                    RaseSaveCompleted(null);
                }
                else
                {
                    Editor.IsBusy = true;
                    m_project.Load(saveResult, (loadError, UnityObject) =>
                    {
                        Editor.IsBusy = false;
                        if (loadError.HasError)
                        {
                            m_windowManager.MessageBox(m_localization.GetString("ID_RTEditor_SaveAssetsDialog_UnableToSaveAsset", "Unable to save asset"), loadError.ToString());
                            RaseSaveCompleted(null);
                        }
                        else
                        {
                            if (UnityObject.Length > 0)
                            {
                                Destroy(Asset);
                                Asset = UnityObject[0];
                            }

                            RaseSaveCompleted(Asset);
                        }
                    });
                }
            });
        }
Example #20
0
        private IEnumerator CoLoad()
        {
            IProject project = IOC.Resolve <IProject>();

            yield return(project.OpenProject("SurvivalGameProject"));

            yield return(new WaitUntil(() => project.IsOpened));

            IRuntimeScriptManager scriptManager = IOC.Resolve <IRuntimeScriptManager>();

            yield return(new WaitUntil(() => scriptManager.IsLoaded));

            IRTE editor = IOC.Resolve <IRTE>();

            if (project.Exist <Scene>("Game"))
            {
                editor.IsBusy = true;
                yield return(project.Load <Scene>("Game"));

                editor.IsBusy = false;
            }
        }
Example #21
0
        public static void LoadScene()
        {
            string path = EditorUtility.OpenFilePanel("Open Scene", Application.persistentDataPath, "rtsc");

            if (path.Length != 0)
            {
                IProject    project    = Dependencies.Project;
                ISerializer serializer = Dependencies.Serializer;

                project.Load(new[] { path }, loadDataCompleted =>
                {
                    ProjectItem scene = loadDataCompleted.Data[0];

                    PersistentScene persistentScene = serializer.Deserialize <PersistentScene>(scene.Internal_Data.RawData);
                    PersistentScene.InstantiateGameObjects(persistentScene);

                    project.UnloadData(scene);

                    ExtraSceneData extraData = Object.FindObjectOfType <ExtraSceneData>();
                    Object.DestroyImmediate(extraData.gameObject);
                });
            }
        }
Example #22
0
        private void btnBuild_Click(object sender, EventArgs e)
        {
            IProject cmd = (IProject)_projects.Where(t => t.CommandID == cboTemplateProjeto.SelectedItem.ToString()).Single();

            cmd.Load(projectModel);

            if (txtOutputPath.Text == "")
            {
                MessageBox.Show("Favor informar o path de saida");
                txtOutputPath.Focus();
                return;
            }
            try
            {
                cmd.Build(txtOutputPath.Text);
                txtConsole.Text = FormatarConsole(cmd.Mensagens);
            }
            catch (Exception err)
            {
                txtConsole.Text  = FormatarConsole(cmd.Mensagens);
                txtConsole.Text += Environment.NewLine + string.Format("Erro no processamento!Msg: {0}", err.Message);
            }
        }
Example #23
0
        public override void Drop(object[] dragObjects, PointerEventData pointerEventData)
        {
            base.Drop(dragObjects, pointerEventData);

            if (CanDrop(dragObjects))
            {
                ExposeToEditor           dropTarget   = (ExposeToEditor)m_treeView.DropTarget;
                VirtualizingTreeViewItem treeViewItem = null;
                if (dropTarget != null)
                {
                    treeViewItem = m_treeView.GetTreeViewItem(m_treeView.DropTarget);
                }

                AssetItem[] loadAssetItems = dragObjects.Where(o => o is AssetItem && m_project.ToType((AssetItem)o) == typeof(GameObject)).Select(o => (AssetItem)o).ToArray();
                if (loadAssetItems.Length > 0)
                {
                    m_isSpawningPrefab = true;
                    Editor.IsBusy      = true;
                    m_project.Load(loadAssetItems, (error, objects) =>
                    {
                        Editor.IsBusy = false;
                        if (error.HasError)
                        {
                            IWindowManager wm = IOC.Resolve <IWindowManager>();
                            wm.MessageBox("Unable to load asset items.", error.ErrorText);
                            return;
                        }

                        GameObject[] createdObjects = new GameObject[objects.Length];
                        for (int i = 0; i < objects.Length; ++i)
                        {
                            GameObject prefab     = (GameObject)objects[i];
                            bool wasPrefabEnabled = prefab.activeSelf;
                            prefab.SetActive(false);
                            GameObject prefabInstance = Instantiate(prefab, Vector3.zero, Quaternion.identity);
                            prefab.SetActive(wasPrefabEnabled);

                            ExposeToEditor exposeToEditor = prefabInstance.GetComponent <ExposeToEditor>();
                            if (exposeToEditor == null)
                            {
                                exposeToEditor = prefabInstance.AddComponent <ExposeToEditor>();
                            }

                            exposeToEditor.SetName(prefab.name);

                            if (dropTarget == null)
                            {
                                exposeToEditor.transform.SetParent(null);
                                m_treeView.Add(exposeToEditor);
                            }
                            else
                            {
                                if (m_treeView.DropAction == ItemDropAction.SetLastChild)
                                {
                                    exposeToEditor.transform.SetParent(dropTarget.transform);
                                    m_treeView.AddChild(dropTarget, exposeToEditor);
                                    treeViewItem.CanExpand  = true;
                                    treeViewItem.IsExpanded = true;
                                }
                                else if (m_treeView.DropAction != ItemDropAction.None)
                                {
                                    int index;
                                    int siblingIndex;
                                    if (m_treeView.DropAction == ItemDropAction.SetNextSibling)
                                    {
                                        index        = m_treeView.IndexOf(dropTarget) + 1;
                                        siblingIndex = dropTarget.transform.GetSiblingIndex() + 1;
                                    }
                                    else
                                    {
                                        index        = m_treeView.IndexOf(dropTarget);
                                        siblingIndex = dropTarget.transform.GetSiblingIndex();
                                    }

                                    exposeToEditor.transform.SetParent(dropTarget.transform.parent != null ? dropTarget.transform.parent : null);
                                    exposeToEditor.transform.SetSiblingIndex(siblingIndex);

                                    TreeViewItemContainerData newTreeViewItemData = (TreeViewItemContainerData)m_treeView.Insert(index, exposeToEditor);
                                    VirtualizingTreeViewItem newTreeViewItem      = m_treeView.GetTreeViewItem(exposeToEditor);
                                    if (newTreeViewItem != null)
                                    {
                                        newTreeViewItem.Parent = treeViewItem.Parent;
                                    }
                                    else
                                    {
                                        newTreeViewItemData.Parent = treeViewItem.Parent;
                                    }
                                }
                            }

                            prefabInstance.SetActive(true);
                            createdObjects[i] = prefabInstance;
                        }

                        if (createdObjects.Length > 0)
                        {
                            IRuntimeEditor editor = IOC.Resolve <IRuntimeEditor>();
                            editor.RegisterCreatedObjects(createdObjects);
                        }

                        m_treeView.ExternalItemDrop();
                        m_isSpawningPrefab = false;
                    });
                }
                else
                {
                    m_treeView.ExternalItemDrop();
                }
            }
            else
            {
                m_treeView.ExternalItemDrop();
            }
        }