コード例 #1
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));
                        }
                    }
                }
            }
        }