DeltaVR/Assets/Asset Cleaner/Systems/SysSceneCleanup.cs
2021-02-23 02:13:14 +02:00

44 lines
1.4 KiB
C#

using Leopotam.Ecs;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine.SceneManagement;
namespace Asset_Cleaner {
class SceneToClose : IEcsAutoReset {
public Scene Scene;
public int SelectionId;
public bool ForceClose;
public void Reset() {
ForceClose = default;
Scene = default;
SelectionId = default;
}
}
class SysSceneCleanup : IEcsRunSystem, IEcsDestroySystem {
EcsFilter<SceneToClose> ScenesToClose = default;
public void Run() {
if (ScenesToClose.IsEmpty()) return;
var selectionId = Globals<PersistentUndoRedoState>.Value.Id;
foreach (var i in ScenesToClose.Out(out var g1, out var entities)) {
var s = g1[i].Scene;
if (g1[i].SelectionId == selectionId && !g1[i].ForceClose) continue;
if (Selection.activeGameObject && Selection.activeGameObject.scene == s) continue;
if (s.isLoaded) EditorSceneManager.CloseScene(s, removeScene: true);
entities[i].Destroy();
}
}
// close scenes on window close
public void Destroy() {
foreach (var i in ScenesToClose.Out(out var g1, out _)) {
var s = g1[i].Scene;
if (s.isLoaded) EditorSceneManager.CloseScene(s, removeScene: true);
}
}
}
}