From cb3f10b7d584bb7687cb70c6f5ee450e4459a393 Mon Sep 17 00:00:00 2001 From: CatChow0 Date: Fri, 17 Jan 2025 17:57:58 +0100 Subject: [PATCH] Minor update - Log window in Ui --- enginecustom/Logger.h | 19 +++++++ enginecustom/applicationclass.cpp | 4 +- enginecustom/imgui.ini | 64 ++++++++++++++-------- enginecustom/imguiManager.cpp | 90 ++++++++++++++++++++++++++++++- enginecustom/imguiManager.h | 2 + 5 files changed, 154 insertions(+), 25 deletions(-) diff --git a/enginecustom/Logger.h b/enginecustom/Logger.h index 2486fc7..3b655a6 100644 --- a/enginecustom/Logger.h +++ b/enginecustom/Logger.h @@ -40,6 +40,12 @@ public: Debug }; + struct LogEntry + { + std::string message; + LogLevel level; + }; + Logger() { char* appdata = nullptr; @@ -134,6 +140,8 @@ public: << "[" << fileName << ":" << lineNumber << "] " << message; + SendLogToUI(ss.str(), level); + std::ofstream file(m_logFilePath, std::ios::app); if (file.is_open()) { @@ -142,6 +150,16 @@ public: } } + void SendLogToUI(const std::string& message, LogLevel level) + { + m_logs.push_back({ message, level }); + } + + const std::vector& GetLogs() const + { + return m_logs; + } + void ManageLogFiles(const std::string& directoryPath) { std::vector logFiles; @@ -189,4 +207,5 @@ private: std::string m_appdataPath; std::string m_logFileName; std::string m_logFilePath; + std::vector m_logs; }; diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index e81268d..784fa1e 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -1956,10 +1956,10 @@ bool ApplicationClass::RenderPhysics(bool keyLeft, bool keyRight, bool keyUp, bo float forceX = 0, forceY = 0, forceZ = 0, forceW = 0; if (keyLeft) { - forceX = -10.0f; + forceX = -40.0f; } if (keyRight) { - forceX = 10.0f; + forceX = 40.0f; } if (keyUp) { forceY = 40.0f; diff --git a/enginecustom/imgui.ini b/enginecustom/imgui.ini index 9c068d8..ebe957f 100644 --- a/enginecustom/imgui.ini +++ b/enginecustom/imgui.ini @@ -4,22 +4,22 @@ Size=400,400 Collapsed=0 [Window][Khaotic Engine] -Pos=1537,27 -Size=375,974 +Pos=1180,27 +Size=396,489 Collapsed=0 DockId=0x00000005,0 [Window][Objects] -Pos=8,516 -Size=330,485 +Pos=8,442 +Size=395,411 Collapsed=0 -DockId=0x00000006,0 +DockId=0x0000000A,0 [Window][Terrain] Pos=8,27 -Size=330,487 +Size=290,489 Collapsed=0 -DockId=0x00000004,0 +DockId=0x00000009,0 [Window][Light] Pos=8,27 @@ -34,28 +34,50 @@ Collapsed=0 DockId=0x00000004,2 [Window][Engine Settings] -Pos=1537,27 -Size=375,974 +Pos=1180,27 +Size=396,489 Collapsed=0 DockId=0x00000005,1 [Window][DockSpace Demo] -Pos=0,0 -Size=1920,1009 +Size=1584,861 Collapsed=0 [Window][Render Window] -Pos=340,27 -Size=1195,974 +Pos=8,27 +Size=1170,489 Collapsed=0 DockId=0x00000002,0 -[Docking][Data] -DockSpace ID=0xC0DFADC4 Window=0xD0388BC8 Pos=8,27 Size=1904,974 Split=X - DockNode ID=0x00000001 Parent=0xC0DFADC4 SizeRef=330,1094 Split=Y Selected=0x393905AB - DockNode ID=0x00000004 Parent=0x00000001 SizeRef=330,487 Selected=0x393905AB - DockNode ID=0x00000006 Parent=0x00000001 SizeRef=330,485 Selected=0x031DC75C - DockNode ID=0x00000003 Parent=0xC0DFADC4 SizeRef=1700,1094 Split=X - DockNode ID=0x00000002 Parent=0x00000003 SizeRef=1655,1094 CentralNode=1 Selected=0x9204953B - DockNode ID=0x00000005 Parent=0x00000003 SizeRef=375,1094 Selected=0x9F035453 +[Window][DockSpace] +Pos=0,0 +Size=1584,861 +Collapsed=0 + +[Window][Add Object] +Pos=1188,0 +Size=396,430 +Collapsed=0 + +[Window][Log] +Pos=8,518 +Size=1568,335 +Collapsed=0 +DockId=0x0000000C,0 + +[Docking][Data] +DockSpace ID=0xC0DFADC4 Pos=8,27 Size=1568,826 Split=X + DockNode ID=0x00000001 Parent=0xC0DFADC4 SizeRef=330,1094 Split=Y Selected=0x393905AB + DockNode ID=0x00000004 Parent=0x00000001 SizeRef=330,487 Selected=0x393905AB + DockNode ID=0x00000006 Parent=0x00000001 SizeRef=330,485 Selected=0x031DC75C + DockNode ID=0x00000003 Parent=0xC0DFADC4 SizeRef=1700,1094 CentralNode=1 +DockSpace ID=0xCCBD8CF7 Window=0x3DA2F1DE Pos=8,27 Size=1568,826 Split=Y + DockNode ID=0x0000000B Parent=0xCCBD8CF7 SizeRef=1568,637 Split=X + DockNode ID=0x00000007 Parent=0x0000000B SizeRef=290,826 Split=Y Selected=0x393905AB + DockNode ID=0x00000009 Parent=0x00000007 SizeRef=395,413 Selected=0x393905AB + DockNode ID=0x0000000A Parent=0x00000007 SizeRef=395,411 Selected=0x031DC75C + DockNode ID=0x00000008 Parent=0x0000000B SizeRef=1276,826 Split=X + DockNode ID=0x00000002 Parent=0x00000008 SizeRef=878,826 CentralNode=1 Selected=0x9204953B + DockNode ID=0x00000005 Parent=0x00000008 SizeRef=396,826 Selected=0x9F035453 + DockNode ID=0x0000000C Parent=0xCCBD8CF7 SizeRef=1568,335 Selected=0x139FDA3F diff --git a/enginecustom/imguiManager.cpp b/enginecustom/imguiManager.cpp index b2c36e7..be72242 100644 --- a/enginecustom/imguiManager.cpp +++ b/enginecustom/imguiManager.cpp @@ -66,10 +66,10 @@ void imguiManager::SetupDockspace() { window_flags |= ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove; window_flags |= ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoNavFocus; - ImGui::Begin("DockSpace Demo", nullptr, window_flags); + ImGui::Begin("DockSpace", nullptr, window_flags); ImGui::PopStyleVar(2); - ImGuiID dockspace_id = ImGui::GetID("MyDockSpace"); + ImGuiID dockspace_id = ImGui::GetID("MainDockSpace"); ImGui::DockSpace(dockspace_id, ImVec2(0.0f, 0.0f), ImGuiDockNodeFlags_PassthruCentralNode); ImGui::End(); @@ -388,6 +388,11 @@ bool imguiManager::ImGuiWidgetRenderer(ApplicationClass* app) showEngineSettingsWindow = true; } + if (ImGui::Button("Open Log Window")) + { + showLogWindow = true; + } + ImGui::End(); // Show windows if their corresponding variables are true @@ -416,6 +421,11 @@ bool imguiManager::ImGuiWidgetRenderer(ApplicationClass* app) WidgetEngineSettingsWindow(app); } + if (showLogWindow) + { + WidgetLogWindow(app); + } + WidgetRenderWindow(app, ImVec2(800, 600)); //render imgui @@ -463,6 +473,9 @@ void imguiManager::WidgetEngineSettingsWindow(ApplicationClass* app) { ImGui::Begin("Engine Settings", &showEngineSettingsWindow); + // Begining Of General Setting + ImGui::Text("General"); + // Checkbox for toggling vsync globally in the application class by calling the SetVsync function in the application class when the checkbox state changes bool vsync = app->GetVsync(); if (ImGui::Checkbox("Vsync", &vsync)) @@ -470,6 +483,11 @@ void imguiManager::WidgetEngineSettingsWindow(ApplicationClass* app) app->SetVsync(vsync); } + // End Of General Setting + ImGui::Separator(); + // culling section + ImGui::Text("Culling"); + // float input for frustum tolerance float frustumTolerance = app->GetFrustumTolerance(); if (ImGui::DragFloat("Frustum Tolerance", &frustumTolerance, 0.1f, 0.0f, 100.0f)) @@ -477,6 +495,12 @@ void imguiManager::WidgetEngineSettingsWindow(ApplicationClass* app) app->SetFrustumTolerance(frustumTolerance); } + // End Of Culling Setting + ImGui::Separator(); + + // Physics section + ImGui::Text("Physics"); + // Input To set the Fixed Update Interval int physicsInterval = app->GetPhysicsTickRate(); if (ImGui::InputInt("Physics Tick Rate", &physicsInterval)) @@ -484,9 +508,71 @@ void imguiManager::WidgetEngineSettingsWindow(ApplicationClass* app) app->SetPhysicsTickRate(physicsInterval); } + // Input to change the gravity on same line + XMVECTOR gravity = app->GetPhysics()->GetGravity(); + float gravityValues[3] = { XMVectorGetX(gravity), XMVectorGetY(gravity), XMVectorGetZ(gravity) }; + if (ImGui::DragFloat3("Gravity", gravityValues)) + { + app->GetPhysics()->SetGravity(XMVectorSet(gravityValues[0], gravityValues[1], gravityValues[2], 0.0f)); + } + ImGui::End(); } +void imguiManager::WidgetLogWindow(ApplicationClass* app) +{ + ImGui::Begin("Log", &showLogWindow); + + // Récupérer les logs depuis le Logger + const std::vector& logs = Logger::Get().GetLogs(); + + // Afficher les logs dans ImGui + for (const auto& log : logs) + { + switch (log.level) + { + case Logger::LogLevel::Info: + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.0f, 1.0f, 0.0f, 1.0f)); // Vert pour les messages d'info + break; + case Logger::LogLevel::Shutdown: + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.5f, 0.0f, 0.0f, 1.0f)); // Rouge sombre pour les messages de shutdown + break; + case Logger::LogLevel::Error: + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 0.0f, 0.0f, 1.0f)); // Rouge pour les messages d'erreur + break; + case Logger::LogLevel::Debug: + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.0f, 0.0f, 1.0f, 1.0f)); // Bleu pour les messages de debug + break; + case Logger::LogLevel::Initialize: + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 1.0f, 0.0f, 1.0f)); // Jaune pour les messages d'initialisation + break; + default: + break; + } + + ImGui::TextUnformatted(log.message.c_str()); + + if (log.level == Logger::LogLevel::Info || + log.level == Logger::LogLevel::Shutdown || + log.level == Logger::LogLevel::Error || + log.level == Logger::LogLevel::Debug || + log.level == Logger::LogLevel::Initialize) + { + ImGui::PopStyleColor(); + } + } + + // Scroll to the bottom of the log window + if (ImGui::GetScrollY() >= ImGui::GetScrollMaxY()) + { + ImGui::SetScrollHereY(1.0f); + } + + ImGui::End(); +} + + + void imguiManager::WidgetRenderWindow(ApplicationClass* app, ImVec2 availableSize) { ImGui::Begin("Render Window"); diff --git a/enginecustom/imguiManager.h b/enginecustom/imguiManager.h index 1287b57..45706ac 100644 --- a/enginecustom/imguiManager.h +++ b/enginecustom/imguiManager.h @@ -35,6 +35,7 @@ public: void WidgetShaderWindow(ApplicationClass* app); void WidgetEngineSettingsWindow(ApplicationClass* app); void WidgetRenderWindow(ApplicationClass* app, ImVec2 availableSize); + void WidgetLogWindow(ApplicationClass* app); bool ImGuiWidgetRenderer(ApplicationClass* app); @@ -51,6 +52,7 @@ private : bool showLightWindow = false; bool showShaderWindow = false; bool showEngineSettingsWindow = false; + bool showLogWindow = false; bool m_isPhyiscsEnabled = false;