Tighten editor scene mutation boundary

This commit is contained in:
2026-04-28 17:53:36 +08:00
parent 357dc136fe
commit b67af931de
12 changed files with 290 additions and 62 deletions

View File

@@ -163,6 +163,20 @@ HierarchyNode BuildSceneNodeRecursive(
return node;
}
HierarchyNode BuildSnapshotNodeRecursive(
const EditorSceneHierarchyNode& snapshotNode) {
HierarchyNode node = {};
node.nodeId = snapshotNode.itemId;
node.label = snapshotNode.displayName.empty()
? std::string("GameObject")
: snapshotNode.displayName;
node.children.reserve(snapshotNode.children.size());
for (const EditorSceneHierarchyNode& child : snapshotNode.children) {
node.children.push_back(BuildSnapshotNodeRecursive(child));
}
return node;
}
} // namespace
HierarchyModel HierarchyModel::BuildFromScene(
@@ -184,6 +198,20 @@ HierarchyModel HierarchyModel::BuildFromScene(
return model;
}
HierarchyModel HierarchyModel::BuildFromSnapshot(
const EditorSceneHierarchySnapshot& snapshot) {
HierarchyModel model = {};
model.m_roots.reserve(snapshot.roots.size());
for (const EditorSceneHierarchyNode& root : snapshot.roots) {
if (root.itemId.empty()) {
continue;
}
model.m_roots.push_back(BuildSnapshotNodeRecursive(root));
}
return model;
}
bool HierarchyModel::Empty() const {
return m_roots.empty();
}