feat: update asset browser
This commit is contained in:
@@ -33,6 +33,33 @@ namespace {
|
||||
std::ranges::sort(scenes);
|
||||
return scenes;
|
||||
}
|
||||
|
||||
// Layouts saved while the scene tree was part of the inspector have no spot for it, split one off the inspector
|
||||
void DockSceneTreeIntoSavedLayout(ImGuiID dockspaceId)
|
||||
{
|
||||
const ImGuiWindowSettings* inspector = ImGui::FindWindowSettingsByID(ImHashStr("Inspector"));
|
||||
if (ImGui::FindWindowSettingsByID(ImHashStr("Scene Tree")) != nullptr || inspector == nullptr) {
|
||||
return;
|
||||
}
|
||||
const ImGuiID oldNode = inspector->DockId;
|
||||
const ImGuiDockNode* node = ImGui::DockBuilderGetNode(oldNode);
|
||||
if (node == nullptr || node->IsSplitNode()) {
|
||||
return;
|
||||
}
|
||||
|
||||
ImGuiID inspectorNode = 0;
|
||||
const ImGuiID sceneTreeNode = ImGui::DockBuilderSplitNode(oldNode, ImGuiDir_Up, 0.4f, nullptr, &inspectorNode);
|
||||
// Windows aren't bound to their nodes yet, the ones tabbed with the inspector would point at the split node
|
||||
ImGuiContext& context = *ImGui::GetCurrentContext();
|
||||
for (ImGuiWindowSettings* settings = context.SettingsWindows.begin(); settings != nullptr;
|
||||
settings = context.SettingsWindows.next_chunk(settings)) {
|
||||
if (settings->DockId == oldNode) {
|
||||
settings->DockId = inspectorNode;
|
||||
}
|
||||
}
|
||||
ImGui::DockBuilderDockWindow("Scene Tree", sceneTreeNode);
|
||||
ImGui::DockBuilderFinish(dockspaceId);
|
||||
}
|
||||
}
|
||||
|
||||
void Editor::DrawDockSpace()
|
||||
@@ -42,20 +69,26 @@ void Editor::DrawDockSpace()
|
||||
const ImGuiViewport* mainViewport = ImGui::GetMainViewport();
|
||||
ImGui::DockSpaceOverViewport(dockspaceId, mainViewport);
|
||||
if (hasSavedLayout) {
|
||||
if (!std::exchange(m_DockLayoutChecked, true)) {
|
||||
DockSceneTreeIntoSavedLayout(dockspaceId);
|
||||
}
|
||||
return;
|
||||
}
|
||||
m_DockLayoutChecked = true;
|
||||
|
||||
// First run without an imgui.ini: scene in the middle, inspector right, tools left, assets below
|
||||
// First run without an imgui.ini: scene in the middle, scene tree and inspector right, tools left, assets below
|
||||
ImGui::DockBuilderRemoveNode(dockspaceId);
|
||||
ImGui::DockBuilderAddNode(dockspaceId, ImGuiDockNodeFlags_DockSpace);
|
||||
ImGui::DockBuilderSetNodeSize(dockspaceId, mainViewport->WorkSize);
|
||||
|
||||
ImGuiID center = dockspaceId;
|
||||
const ImGuiID right = ImGui::DockBuilderSplitNode(center, ImGuiDir_Right, 0.25f, nullptr, ¢er);
|
||||
ImGuiID right = ImGui::DockBuilderSplitNode(center, ImGuiDir_Right, 0.25f, nullptr, ¢er);
|
||||
const ImGuiID left = ImGui::DockBuilderSplitNode(center, ImGuiDir_Left, 0.2f, nullptr, ¢er);
|
||||
const ImGuiID bottom = ImGui::DockBuilderSplitNode(center, ImGuiDir_Down, 0.28f, nullptr, ¢er);
|
||||
const ImGuiID rightTop = ImGui::DockBuilderSplitNode(right, ImGuiDir_Up, 0.4f, nullptr, &right);
|
||||
|
||||
ImGui::DockBuilderDockWindow("Viewport", center);
|
||||
ImGui::DockBuilderDockWindow("Scene Tree", rightTop);
|
||||
ImGui::DockBuilderDockWindow("Inspector", right);
|
||||
ImGui::DockBuilderDockWindow("Stats", left);
|
||||
ImGui::DockBuilderDockWindow("Physics", left);
|
||||
@@ -155,6 +188,7 @@ void Editor::DrawViewMenu()
|
||||
return;
|
||||
}
|
||||
|
||||
ImGui::MenuItem("Scene Tree", nullptr, &m_Panels.sceneTree);
|
||||
ImGui::MenuItem("Inspector", nullptr, &m_Panels.inspector);
|
||||
ImGui::MenuItem("Assets", nullptr, &m_Panels.assets);
|
||||
ImGui::MenuItem("Stats", nullptr, &m_Panels.stats);
|
||||
|
||||
Reference in New Issue
Block a user