feat: expand editor scripting asset and viewport flow
This commit is contained in:
@@ -28,6 +28,14 @@ inline ActionBinding MakeSaveProjectAction(bool enabled = true) {
|
||||
return MakeAction("Save Project", nullptr, false, enabled);
|
||||
}
|
||||
|
||||
inline ActionBinding MakeRebuildScriptsAction(bool enabled = true) {
|
||||
return MakeAction("Rebuild Script Assemblies", nullptr, false, enabled);
|
||||
}
|
||||
|
||||
inline ActionBinding MakeMigrateSceneAssetReferencesAction(bool enabled = true) {
|
||||
return MakeAction("Migrate Scene AssetRefs", nullptr, false, enabled);
|
||||
}
|
||||
|
||||
inline ActionBinding MakeNewSceneAction(bool enabled = true) {
|
||||
return MakeAction("New Scene", "Ctrl+N", false, enabled, true, Shortcut(ImGuiKey_N, true));
|
||||
}
|
||||
|
||||
@@ -168,6 +168,19 @@ inline void DrawHierarchySortOptionsPopup(
|
||||
}
|
||||
|
||||
inline void DrawHierarchyCreateActions(IEditorContext& context, ::XCEngine::Components::GameObject* parent) {
|
||||
const auto drawPrimitiveCreateAction = [&](
|
||||
const ActionBinding& action,
|
||||
::XCEngine::Resources::BuiltinPrimitiveType primitiveType) {
|
||||
const char* label = ::XCEngine::Resources::GetBuiltinPrimitiveDisplayName(primitiveType);
|
||||
DrawMenuAction(action, [&]() {
|
||||
TraceHierarchyPopup(std::string("Hierarchy create clicked: ") + label);
|
||||
auto* created = Commands::CreatePrimitiveEntity(context, primitiveType, parent);
|
||||
TraceHierarchyPopup(
|
||||
std::string("Hierarchy create result: ") + label + ", createdId=" +
|
||||
std::to_string(created ? created->GetID() : 0));
|
||||
});
|
||||
};
|
||||
|
||||
DrawMenuAction(MakeCreateEmptyEntityAction(), [&]() {
|
||||
TraceHierarchyPopup("Hierarchy create clicked: Empty Object");
|
||||
auto* created = Commands::CreateEmptyEntity(context, parent, "Create Entity", "GameObject");
|
||||
@@ -175,6 +188,16 @@ inline void DrawHierarchyCreateActions(IEditorContext& context, ::XCEngine::Comp
|
||||
std::string("Hierarchy create result: Empty Object, createdId=") +
|
||||
std::to_string(created ? created->GetID() : 0));
|
||||
});
|
||||
|
||||
UI::DrawContextSubmenu("3D Object", [&]() {
|
||||
drawPrimitiveCreateAction(MakeCreateCubeEntityAction(), ::XCEngine::Resources::BuiltinPrimitiveType::Cube);
|
||||
drawPrimitiveCreateAction(MakeCreateSphereEntityAction(), ::XCEngine::Resources::BuiltinPrimitiveType::Sphere);
|
||||
drawPrimitiveCreateAction(MakeCreateCapsuleEntityAction(), ::XCEngine::Resources::BuiltinPrimitiveType::Capsule);
|
||||
drawPrimitiveCreateAction(MakeCreateCylinderEntityAction(), ::XCEngine::Resources::BuiltinPrimitiveType::Cylinder);
|
||||
drawPrimitiveCreateAction(MakeCreatePlaneEntityAction(), ::XCEngine::Resources::BuiltinPrimitiveType::Plane);
|
||||
drawPrimitiveCreateAction(MakeCreateQuadEntityAction(), ::XCEngine::Resources::BuiltinPrimitiveType::Quad);
|
||||
});
|
||||
|
||||
DrawMenuSeparator();
|
||||
DrawMenuAction(MakeCreateCameraEntityAction(), [&]() {
|
||||
TraceHierarchyPopup("Hierarchy create clicked: Camera");
|
||||
@@ -190,28 +213,6 @@ inline void DrawHierarchyCreateActions(IEditorContext& context, ::XCEngine::Comp
|
||||
std::string("Hierarchy create result: Light, createdId=") +
|
||||
std::to_string(created ? created->GetID() : 0));
|
||||
});
|
||||
DrawMenuSeparator();
|
||||
DrawMenuAction(MakeCreateCubeEntityAction(), [&]() {
|
||||
TraceHierarchyPopup("Hierarchy create clicked: Cube");
|
||||
auto* created = Commands::CreateEmptyEntity(context, parent, "Create Cube", "Cube");
|
||||
TraceHierarchyPopup(
|
||||
std::string("Hierarchy create result: Cube, createdId=") +
|
||||
std::to_string(created ? created->GetID() : 0));
|
||||
});
|
||||
DrawMenuAction(MakeCreateSphereEntityAction(), [&]() {
|
||||
TraceHierarchyPopup("Hierarchy create clicked: Sphere");
|
||||
auto* created = Commands::CreateEmptyEntity(context, parent, "Create Sphere", "Sphere");
|
||||
TraceHierarchyPopup(
|
||||
std::string("Hierarchy create result: Sphere, createdId=") +
|
||||
std::to_string(created ? created->GetID() : 0));
|
||||
});
|
||||
DrawMenuAction(MakeCreatePlaneEntityAction(), [&]() {
|
||||
TraceHierarchyPopup("Hierarchy create clicked: Plane");
|
||||
auto* created = Commands::CreateEmptyEntity(context, parent, "Create Plane", "Plane");
|
||||
TraceHierarchyPopup(
|
||||
std::string("Hierarchy create result: Plane, createdId=") +
|
||||
std::to_string(created ? created->GetID() : 0));
|
||||
});
|
||||
}
|
||||
|
||||
inline void HandleHierarchyItemContextRequest(
|
||||
@@ -275,7 +276,7 @@ inline void DrawHierarchyBackgroundContextPopup(IEditorContext& context, UI::Def
|
||||
backgroundContextMenu.ConsumeOpenRequest("HierarchyContextMenu");
|
||||
static bool s_lastBackgroundPopupOpen = false;
|
||||
|
||||
if (!UI::BeginPopup("HierarchyContextMenu")) {
|
||||
if (!UI::BeginContextMenu("HierarchyContextMenu")) {
|
||||
if (s_lastBackgroundPopupOpen) {
|
||||
TraceHierarchyPopup("Hierarchy background popup closed");
|
||||
s_lastBackgroundPopupOpen = false;
|
||||
@@ -289,7 +290,7 @@ inline void DrawHierarchyBackgroundContextPopup(IEditorContext& context, UI::Def
|
||||
}
|
||||
|
||||
DrawHierarchyContextActions(context, nullptr, true);
|
||||
UI::EndPopup();
|
||||
UI::EndContextMenu();
|
||||
}
|
||||
|
||||
inline void DrawHierarchyEntityContextPopup(
|
||||
@@ -298,7 +299,7 @@ inline void DrawHierarchyEntityContextPopup(
|
||||
itemContextMenu.ConsumeOpenRequest("HierarchyEntityContextMenu");
|
||||
static bool s_lastEntityPopupOpen = false;
|
||||
|
||||
if (!UI::BeginPopup("HierarchyEntityContextMenu")) {
|
||||
if (!UI::BeginContextMenu("HierarchyEntityContextMenu")) {
|
||||
if (s_lastEntityPopupOpen) {
|
||||
TraceHierarchyPopup("Hierarchy entity popup closed");
|
||||
s_lastEntityPopupOpen = false;
|
||||
@@ -314,7 +315,7 @@ inline void DrawHierarchyEntityContextPopup(
|
||||
if (itemContextMenu.HasTarget()) {
|
||||
DrawHierarchyContextActions(context, itemContextMenu.TargetValue());
|
||||
}
|
||||
UI::EndPopup();
|
||||
UI::EndContextMenu();
|
||||
|
||||
if (!ImGui::IsPopupOpen("HierarchyEntityContextMenu") && !itemContextMenu.HasPendingOpenRequest()) {
|
||||
itemContextMenu.Clear();
|
||||
|
||||
@@ -34,6 +34,14 @@ inline void ExecuteSaveProject(IEditorContext& context) {
|
||||
Commands::SaveProject(context);
|
||||
}
|
||||
|
||||
inline void ExecuteRebuildScriptAssemblies(IEditorContext& context) {
|
||||
Commands::RebuildScriptAssemblies(context);
|
||||
}
|
||||
|
||||
inline void ExecuteMigrateSceneAssetReferences(IEditorContext& context) {
|
||||
Commands::MigrateSceneAssetReferences(context);
|
||||
}
|
||||
|
||||
inline void ExecuteOpenScene(IEditorContext& context) {
|
||||
Commands::OpenSceneWithDialog(context);
|
||||
}
|
||||
@@ -143,6 +151,10 @@ inline void DrawFileMenuActions(IEditorContext& context) {
|
||||
DrawMenuAction(MakeSaveSceneAction(canEditDocuments), [&]() { ExecuteSaveScene(context); });
|
||||
DrawMenuAction(MakeSaveSceneAsAction(canEditDocuments), [&]() { ExecuteSaveSceneAs(context); });
|
||||
DrawMenuSeparator();
|
||||
DrawMenuAction(
|
||||
MakeMigrateSceneAssetReferencesAction(Commands::CanMigrateSceneAssetReferences(context)),
|
||||
[&]() { ExecuteMigrateSceneAssetReferences(context); });
|
||||
DrawMenuSeparator();
|
||||
DrawMenuAction(MakeExitAction(), [&]() { RequestEditorExit(context); });
|
||||
}
|
||||
|
||||
@@ -160,6 +172,12 @@ inline void DrawRunMenuActions(IEditorContext& context) {
|
||||
});
|
||||
}
|
||||
|
||||
inline void DrawScriptsMenuActions(IEditorContext& context) {
|
||||
DrawMenuAction(
|
||||
MakeRebuildScriptsAction(Commands::CanRebuildScriptAssemblies(context)),
|
||||
[&]() { ExecuteRebuildScriptAssemblies(context); });
|
||||
}
|
||||
|
||||
inline void DrawViewMenuActions(IEditorContext& context) {
|
||||
DrawMenuAction(MakeResetLayoutAction(), [&]() { RequestDockLayoutReset(context); });
|
||||
}
|
||||
@@ -186,6 +204,9 @@ inline void DrawMainMenuBar(IEditorContext& context, UI::DeferredPopupState& abo
|
||||
UI::DrawMenuScope("Run", [&]() {
|
||||
DrawRunMenuActions(context);
|
||||
});
|
||||
UI::DrawMenuScope("Scripts", [&]() {
|
||||
DrawScriptsMenuActions(context);
|
||||
});
|
||||
UI::DrawMenuScope("View", [&]() {
|
||||
DrawViewMenuActions(context);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user