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)); } } } } }