diff --git a/scripts/clean.bat b/scripts/clean.bat index a4f75c0..3060bfd 100644 --- a/scripts/clean.bat +++ b/scripts/clean.bat @@ -12,4 +12,6 @@ echo Removing the build directory del /s /q build rd /s /q build +mkdir build + :END \ No newline at end of file diff --git a/src/gui/panel.cpp b/src/gui/panel.cpp index e33480a..39a7bc3 100644 --- a/src/gui/panel.cpp +++ b/src/gui/panel.cpp @@ -14,7 +14,7 @@ namespace lunarium { Panel::Panel(std::string name, PanelDockZone dock_zone, bool isOpen, int window_flags) : mIsOpen(isOpen), mPanelName(name), mDockZone(dock_zone), mWindowFlags(window_flags), - mX(-1), mY(-1), mWidth(-1), mHeight(-1) + mX(-1), mY(-1), mWidth(-1), mHeight(-1), mNumPushedStyles(0) { } diff --git a/src/gui/panel_manager.cpp b/src/gui/panel_manager.cpp index 14f8d1a..186c32c 100644 --- a/src/gui/panel_manager.cpp +++ b/src/gui/panel_manager.cpp @@ -8,6 +8,7 @@ #include "panel_manager.h" #include "gui.h" +#include #include #include #include // To use the DockWindowXXX methods @@ -133,6 +134,7 @@ namespace lunarium { if ((*iter)->IsOpen()) { + ImGui::SetNextWindowClass(&mWindowClass); (*iter)->OnUIRender(); } @@ -162,7 +164,6 @@ namespace lunarium mDockSpaceID = ImGui::DockSpace(ImGui::GetID(dock_name.c_str()), ImVec2(0, 0), 0, &mWindowClass); if (!ImGui::DockBuilderGetNode(mDockSpaceID) || mResetDockSpace) { - Logger::Trace(GUI::LogCat, "Resetting Dockspace: %s", dock_name.c_str()); mResetDockSpace = false; ImGui::DockBuilderRemoveNode(mDockSpaceID); diff --git a/src/main.cpp b/src/main.cpp index 5076aa4..b20ccd2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -53,7 +53,15 @@ int main(int argc, char** argv) //std::cout << "\nEngine core successfully initialized!\n"; - core.RunGameLoop(); + try + { + core.RunGameLoop(); + } + catch(const std::exception& e) + { + lunarium::Logger::Fatal(lunarium::LogCategory::CORE, "Unhandled exception: %s", e.what()); + } + core.Shutdown(); lunarium::Logger::GetInstance()->FreeAllListeners(); diff --git a/src/run_modes/editor/editor.cpp b/src/run_modes/editor/editor.cpp index 68043d4..653b58e 100644 --- a/src/run_modes/editor/editor.cpp +++ b/src/run_modes/editor/editor.cpp @@ -103,13 +103,16 @@ namespace editor int w, h; Core::MainWindow().GetFramebufferSize(&w, &h); OrthographicCamera main_cam(Vec2f { 0.0f, 0.0f }, Sizef { (float)w, (float)h }); + Core::GUI().NewFrame(); Core::Graphics().ResetFrameStats(); Core::Graphics().BeginDraw(&main_cam); // No non-gui graphics are drawn + Core::Graphics().EndDraw(); // Graphics end draw must happen before GUI end frame + OnRender(&Core::Graphics()); Core::GUI().EndFrame(); Core::MainWindow().SwapBuffers(); @@ -117,6 +120,7 @@ namespace editor void Editor::OnRender(lunarium::Renderer2D* g) { + DoMainMenu(); //DoStatusBar(); RenderWindow(); @@ -170,6 +174,7 @@ namespace editor void Editor::RenderWindow() { ImGuiViewport* Viewport = ImGui::GetWindowViewport(); + ImGui::SetNextWindowPos( Viewport->WorkPos ); ImGui::SetNextWindowSize( Viewport->WorkSize ); ImGui::SetNextWindowViewport( Viewport->ID ); @@ -208,6 +213,7 @@ namespace editor //////////////////////////////////////////////////////////// void Editor::DoMainMenu() { + //throw std::exception("TEST ERROR"); ImGui::BeginMainMenuBar(); // File diff --git a/src/run_modes/editor/panels/asset_browser.cpp b/src/run_modes/editor/panels/asset_browser.cpp index bdaceb6..e470071 100644 --- a/src/run_modes/editor/panels/asset_browser.cpp +++ b/src/run_modes/editor/panels/asset_browser.cpp @@ -59,6 +59,7 @@ namespace editor ImGui::SetCursorPosY(row_height); if (ImGui::BeginChild("Directory Tree", ImVec2(wind_size.x * 0.15f, wind_size.y), true, ImGuiWindowFlags_NoCollapse)) { + ImGui::SetNextItemOpen(true); DoDirTree(mAssetDirectory); mSyncTree = false; @@ -69,6 +70,7 @@ namespace editor ImGui::SetCursorPosX(ImGui::GetCursorPosX() + wind_size.x * 0.15f); // Contents + DoContentArea(wind_size); //HandlePopupActions(); @@ -137,11 +139,12 @@ namespace editor { if (std::filesystem::exists(mSelectedDir)) { + float yPos = ImGui::GetCursorPosY(); float xPos = ImGui::GetCursorPosX(); float left = xPos; - + ImGui::BeginChild("ToolBar", ImVec2(0, ImGui::GetFrameHeightWithSpacing() * 1.5f)); ImGui::PushFont(GUI::GetInstance().GetFont(GuiFont::FONT_ROBO_SMALL)); ImGui::TextUnformatted(mpEditor->GetProject()->MakeRelativeToAssets(mSelectedDir, true).string().c_str()); @@ -162,6 +165,7 @@ namespace editor ImVec2(DataManager::mNewFolderIcon->GetWidth(), DataManager::mNewFolderIcon->GetHeight()), ImVec2(0, 0), ImVec2(1, 1), 4)) { + OpenPopup(PopUp::NEW_FOLDER).LogIfFailed(Editor::LogCat); } @@ -169,7 +173,7 @@ namespace editor ImGui::Separator(); ImGui::BeginChild("Files"); - + // List directories for (auto const &dir_entry : std::filesystem::directory_iterator{mSelectedDir}) { @@ -226,7 +230,7 @@ namespace editor // TODO: CONTEXT MENU FOR ITEMS - Test Removing/Trashing } } - + DoContentContextMenu(); ImGui::EndChild(); diff --git a/src/run_modes/editor/panels/properties_view.cpp b/src/run_modes/editor/panels/properties_view.cpp index 1925853..0a0dc01 100644 --- a/src/run_modes/editor/panels/properties_view.cpp +++ b/src/run_modes/editor/panels/properties_view.cpp @@ -31,6 +31,7 @@ namespace lunarium { namespace editor : Panel("Properties", PanelDockZone::DDZ_RIGHT, true, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoScrollbar), mpSelectedAsset(nullptr), mpSelectedEntity(nullptr), mIsLocked(false) { + // ADD COMPONENT POPUP AddPopup(Popup::ADD_COMP, "Add Component", [](Panel* p) { PropertiesView* pv = (PropertiesView*)p; @@ -39,9 +40,15 @@ namespace lunarium { namespace editor PRESENT_COMP_CHOICE("Tag Component", TagComponent, pv) PRESENT_COMP_CHOICE("Transform Component", TransformComponent, pv) + if ((ImGui::IsMouseClicked(ImGuiMouseButton_Left) && !ImGui::IsWindowHovered())) + { + return false; + } + return true; }).LogIfFailed(Editor::LogCat); + // ADD COMP FAILED POPUP AddPopup(Popup::ADD_COMP_FAIL, "Add Comp Fail", [] (Panel* p) { ImGui::Text("Can not add that component - Entity already has it"); diff --git a/src/run_modes/editor/panels/world_tree.cpp b/src/run_modes/editor/panels/world_tree.cpp index 0f0bbf2..47db2d2 100644 --- a/src/run_modes/editor/panels/world_tree.cpp +++ b/src/run_modes/editor/panels/world_tree.cpp @@ -72,6 +72,7 @@ namespace lunarium Entity *pSelection = nullptr; if (!mpWorld) { + ImGui::Text("No World Loaded"); return; } diff --git a/test_data/imgui.ini b/test_data/imgui.ini index 60c8ead..e7b27e4 100644 --- a/test_data/imgui.ini +++ b/test_data/imgui.ini @@ -3,32 +3,28 @@ Pos=0,546 Size=1280,174 Collapsed=0 DockId=0x00000003,0 -ClassId=0x00000001 [Window][World Tree] -Pos=0,24 -Size=204,520 +Pos=0,22 +Size=204,522 Collapsed=0 DockId=0x00000007,0 -ClassId=0x00000001 [Window][World View] -Pos=206,24 -Size=816,520 +Pos=206,22 +Size=816,522 Collapsed=0 DockId=0x00000008,0 -ClassId=0x00000001 [Window][Properties] -Pos=1024,24 -Size=256,520 +Pos=1024,22 +Size=256,522 Collapsed=0 DockId=0x00000006,0 -ClassId=0x00000001 [Window][Lunarium Editor] -Pos=0,24 -Size=1280,696 +Pos=0,22 +Size=1280,698 Collapsed=0 [Window][Debug##Default] @@ -36,55 +32,8 @@ Pos=60,60 Size=400,400 Collapsed=0 -[Window][File Browser] -ViewportPos=526,598 -ViewportId=0x2389D759 -Size=600,400 -Collapsed=0 - -[Window][Map Editor] -ViewportPos=622,126 -ViewportId=0xDAA48CA2 -Size=1056,762 -Collapsed=0 - -[Window][Map Canvas] -ViewportPos=622,126 -ViewportId=0xDAA48CA2 -Pos=8,56 -Size=830,698 -Collapsed=0 -DockId=0x0000000E,0 -ClassId=0x00000045 - -[Window][Tile Set View] -ViewportPos=622,126 -ViewportId=0xDAA48CA2 -Pos=840,56 -Size=208,698 -Collapsed=0 -DockId=0x0000000C,0 -ClassId=0x00000045 - -[Window][DockSpaceViewport_11111111] -Size=1280,720 -Collapsed=0 - -[Window][Dear ImGui Demo] -ViewportPos=172,128 -ViewportId=0xE927CF2F -Size=550,680 -Collapsed=0 - [Docking][Data] -DockSpace ID=0x27CF68A1 Pos=630,182 Size=1040,698 Split=Y - DockNode ID=0x00000009 Parent=0x27CF68A1 SizeRef=1056,570 Split=X - DockNode ID=0x0000000B Parent=0x00000009 SizeRef=843,570 Split=X - DockNode ID=0x0000000D Parent=0x0000000B SizeRef=168,570 - DockNode ID=0x0000000E Parent=0x0000000B SizeRef=673,570 CentralNode=1 Selected=0xB3CA1100 - DockNode ID=0x0000000C Parent=0x00000009 SizeRef=211,570 Selected=0xB093288C - DockNode ID=0x0000000A Parent=0x27CF68A1 SizeRef=1056,190 -DockSpace ID=0x2F8DD699 Window=0xBEB76114 Pos=476,90 Size=1280,696 Split=Y +DockSpace ID=0x2F8DD699 Pos=240,154 Size=1280,698 Split=Y DockNode ID=0x00000001 Parent=0x2F8DD699 SizeRef=1280,538 Split=X DockNode ID=0x00000005 Parent=0x00000001 SizeRef=1022,538 Split=X DockNode ID=0x00000007 Parent=0x00000005 SizeRef=204,538 Selected=0xFD1747F8