Exemplo n.º 1
0
        private void HandleChanges(Changes changes)
        {
            foreach (var created in changes.CreatedEntities())
            {
                var entity = m_WorldManager.GetEntityFromGuid(created);
                if (EntityManager.Exists(entity) && EntityManager.HasComponent <EntityName>(entity))
                {
                    m_EntityGuidToName[created] = EntityManager.GetBufferAsString <EntityName>(entity);
                }
            }

            foreach (var changed in changes.ChangedEntitiesWithAddComponent <EntityName>()
                     .Concat(changes.ChangedEntitiesWithSetComponent <EntityName>()))
            {
                var entity = m_WorldManager.GetEntityFromGuid(changed);
                if (EntityManager.Exists(entity) && EntityManager.HasComponent <EntityName>(entity))
                {
                    m_EntityGuidToName[changed] = EntityManager.GetBufferAsString <EntityName>(entity);
                }
            }

            foreach (var changed in changes.ChangedEntitiesWithRemoveComponent <EntityName>())
            {
                m_EntityGuidToName.Remove(changed);
            }

            foreach (var deleted in changes.DeletedEntities())
            {
                m_EntityGuidToName.Remove(deleted);
            }
        }
Exemplo n.º 2
0
 private void HandleChanges(Changes changes)
 {
     if (changes.EntitiesWereCreated ||
         changes.EntitiesWereDeleted ||
         changes.ComponentsWereRemoved ||
         changes.ComponentsWereAdded ||
         changes.ChangedEntitiesWithSetComponent <Parent>().Any() ||
         changes.ChangedEntitiesWithSetSharedComponent <SceneGuid>().Any() ||
         changes.ChangedEntitiesWithSetComponent <SiblingIndex>().Any() ||
         changes.ReparentedEntities().Any() ||
         changes.ChangedEntitiesWithSetComponent <WorkspaceScenes>().Any() ||
         changes.ChangedEntitiesWithSetComponent <ActiveScene>().Any())
     {
         m_TreeView?.Invalidate();
         Repaint();
     }
 }
Exemplo n.º 3
0
        private void HandleChanges(Changes changes)
        {
            if (m_SuspendEvents || null == m_CurrentWorkspace)
            {
                return;
            }

            if (changes.ChangedEntitiesWithSetComponent <WorkspaceScenes>().Any() ||
                changes.ChangedEntitiesWithSetComponent <ActiveScene>().Any())
            {
                m_CurrentWorkspace.ClearScenes();
                for (var i = 0; i < m_SceneManager.LoadedSceneCount; ++i)
                {
                    m_CurrentWorkspace.AddScene(m_SceneManager.GetLoadedSceneAtIndex(i));
                }

                m_CurrentWorkspace.SetActiveScene(m_SceneManager.GetActiveScene());
                SaveWorkspace();
            }
        }
Exemplo n.º 4
0
        private void HandleChanges(Changes changes)
        {
            if (m_EditorUndoManager.IsUndoRedoing || DomainReload.IsDomainReloading)
            {
                return;
            }

            var workspaceScenes = GetWorkspaceScenesRW();

            using (var pooled = HashSetPool <Scene> .GetDisposable())
            {
                var sceneSet = pooled.Set;

                foreach (var entityGuid in changes.AllChangedEntities())
                {
                    var entity = m_WorldManager.GetEntityFromGuid(entityGuid);

                    if (m_WorldManager.EntityManager.HasComponent <SceneGuid>(entity) &&
                        m_WorldManager.EntityManager.HasComponent <SceneInstanceId>(entity))
                    {
                        var sceneGuid       = m_WorldManager.EntityManager.GetSharedComponentData <SceneGuid>(entity);
                        var sceneInstanceId = m_WorldManager.EntityManager.GetSharedComponentData <SceneInstanceId>(entity);

                        if (ConfigurationScene.Guid == sceneGuid.Guid)
                        {
                            continue;
                        }

                        sceneSet.Add(new Scene(sceneGuid, sceneInstanceId));
                    }
                }

                if (sceneSet.Count > 0)
                {
                    foreach (var scene in sceneSet)
                    {
                        if (m_ChangedScenes.Add(scene))
                        {
                            var index          = IndexOf(workspaceScenes, scene);
                            var workspaceScene = workspaceScenes[index];
                            workspaceScene.ChangeVersion++;
                            workspaceScenes[index] = workspaceScene;
                        }
                    }
                }
            }

            if (changes.EntitiesWereDeleted)
            {
                // Use the created inverse entities. Since we have component data for them.
                foreach (var scene in GetScenesForCreatedEntities(changes.InverseDiff))
                {
                    m_RebuildScenes.Add(scene);

                    if (m_ChangedScenes.Add(scene))
                    {
                        var index = IndexOf(workspaceScenes, scene);
                        if (index != -1)
                        {
                            var workspaceScene = workspaceScenes[index];
                            workspaceScene.ChangeVersion++;
                            workspaceScenes[index] = workspaceScene;
                        }
                        else
                        {
                            m_Graphs.Remove(scene.SceneGuid.Guid);
                        }
                    }
                }
            }

            using (var pooledGuids = ListPool <Guid> .GetDisposable())
            {
                var guids = pooledGuids.List;
                guids.AddRange(changes.ChangedEntitiesWithSetComponent <SiblingIndex>());
                guids.AddRange(changes.ChangedEntitiesWithSetComponent <Parent>());

                if (guids.Count > 0)
                {
                    var entityManager = m_WorldManager.EntityManager;

                    for (var i = 0; i < guids.Count; ++i)
                    {
                        var entityGuid = guids[i];
                        var entity     = m_WorldManager.GetEntityFromGuid(entityGuid);
                        if (entityManager.HasComponent <SceneGuid>(entity) &&
                            entityManager.HasComponent <SceneInstanceId>(entity))
                        {
                            var sceneGuid       = entityManager.GetSharedComponentData <SceneGuid>(entity);
                            var sceneInstanceId = entityManager.GetSharedComponentData <SceneInstanceId>(entity);

                            m_RebuildScenes.Add(new Scene(sceneGuid, sceneInstanceId));
                        }
                    }
                }
            }
        }