|
|
@ -2,6 +2,7 @@ import { Intent } from "@blueprintjs/core";
|
|
|
|
import { app } from "../ApplicationServices/Application";
|
|
|
|
import { app } from "../ApplicationServices/Application";
|
|
|
|
import { arrayRemoveIf } from "../Common/ArrayExt";
|
|
|
|
import { arrayRemoveIf } from "../Common/ArrayExt";
|
|
|
|
import { Database } from "../DatabaseServices/Database";
|
|
|
|
import { Database } from "../DatabaseServices/Database";
|
|
|
|
|
|
|
|
import { Entity } from "../DatabaseServices/Entity/Entity";
|
|
|
|
import { Command } from "../Editor/CommandMachine";
|
|
|
|
import { Command } from "../Editor/CommandMachine";
|
|
|
|
import { TempEditor } from "../Editor/TempEditor";
|
|
|
|
import { TempEditor } from "../Editor/TempEditor";
|
|
|
|
import { AppToaster } from "../UI/Components/Toaster";
|
|
|
|
import { AppToaster } from "../UI/Components/Toaster";
|
|
|
@ -58,15 +59,31 @@ export function Purge(db: Database): void
|
|
|
|
if (isErase) e.GoodBye();
|
|
|
|
if (isErase) e.GoodBye();
|
|
|
|
return isErase;
|
|
|
|
return isErase;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
arrayRemoveIf(db.TemplateTable.Objects, e =>
|
|
|
|
|
|
|
|
|
|
|
|
//应该避免占位空间被PU(占位空间内没有实体,也没有子层)
|
|
|
|
|
|
|
|
arrayRemoveIf(db.TemplateTable.Objects, t =>
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (!e || e.IsErase) return true;
|
|
|
|
if (!t || t.IsErase) return true;
|
|
|
|
e.Purge();
|
|
|
|
|
|
|
|
if (e.AllEntitys.length === 0)
|
|
|
|
let allEnts: Entity[] = [];
|
|
|
|
|
|
|
|
t.Traverse(ct =>
|
|
|
|
{
|
|
|
|
{
|
|
|
|
e.Erase();
|
|
|
|
for (let id of ct.Objects)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (id.Object)
|
|
|
|
|
|
|
|
allEnts.push(id.Object as Entity);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (allEnts.length && allEnts.every(e => e.IsErase))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
t.Erase();
|
|
|
|
|
|
|
|
t.Traverse(ct => ct.Erase());//PU所有子层
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//否则PU本层
|
|
|
|
|
|
|
|
t.Purge();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
//再次清理,避免子模块没了之后,父模块还引用它
|
|
|
|
//再次清理,避免子模块没了之后,父模块还引用它
|
|
|
|