add ApplicationSpecification

This commit is contained in:
2025-07-09 17:37:38 +08:00
parent 37c17bdb5c
commit c17527e3b9
2 changed files with 34 additions and 6 deletions

View File

@ -1,6 +1,7 @@
#include "Hazel/Core/Application.h" #include "Hazel/Core/Application.h"
#include <filesystem>
#include <iostream> #include <iostream>
#include <Hazel/Debug/Instrumentor.h> #include <Hazel/Debug/Instrumentor.h>
#include <SDL3/SDL.h> #include <SDL3/SDL.h>
@ -14,17 +15,19 @@ namespace Hazel {
Application* Application::s_Instance = nullptr; Application* Application::s_Instance = nullptr;
Application::Application(const std::string& name, int width, int height) Application::Application(const ApplicationSpecification& specification)
: m_Specification(specification)
{ {
HZ_PROFILE_FUNCTION(); HZ_PROFILE_FUNCTION();
if (s_Instance != nullptr) if (s_Instance != nullptr)
{
HZ_CORE_ERROR("Application already exists!"); HZ_CORE_ERROR("Application already exists!");
}
s_Instance = this; s_Instance = this;
m_Window = Window::Create(WindowProps(name, width, height)); if (!m_Specification.workingDirectory.empty())
std::filesystem::current_path(m_Specification.workingDirectory);
m_Window = Window::Create(WindowProps(m_Specification.name));
m_Window->SetEventCallback(std::bind(&Application::OnEvent, this, std::placeholders::_1)); m_Window->SetEventCallback(std::bind(&Application::OnEvent, this, std::placeholders::_1));
m_Window->SetWindowResizeEventCallback(std::bind(&Application::OnWindowResize, this, std::placeholders::_1)); m_Window->SetWindowResizeEventCallback(std::bind(&Application::OnWindowResize, this, std::placeholders::_1));

View File

@ -5,15 +5,37 @@
#include "Core.h" #include "Core.h"
#include "Layer.h" #include "Layer.h"
#include "LayerStack.h" #include "LayerStack.h"
#include "Log.h"
#include "Hazel/Core/TimeStep.h" #include "Hazel/Core/TimeStep.h"
#include "Hazel/ImGui/ImGuiLayer.h" #include "Hazel/ImGui/ImGuiLayer.h"
namespace Hazel { namespace Hazel {
struct ApplicationCommandLineArgs
{
int count = 0;
char** args = nullptr;
const char* operator[](int index)
{
if (index >= count)
HZ_CORE_ERROR("args error");
return args[count];
}
};
struct ApplicationSpecification
{
std::string name = "Application";
std::string workingDirectory;
ApplicationCommandLineArgs commandLineArgs;
};
class HAZEL_API Application class HAZEL_API Application
{ {
public: public:
Application(const std::string& name = "Hazel App", int width = 1280, int height = 720); Application(const ApplicationSpecification& specification);
virtual ~Application(); virtual ~Application();
void Run(); void Run();
@ -30,7 +52,10 @@ namespace Hazel {
inline Window& GetWindow() const { return *m_Window; } inline Window& GetWindow() const { return *m_Window; }
inline static Application& Get() { return *s_Instance; } inline static Application& Get() { return *s_Instance; }
const ApplicationSpecification& GetSpecification() const { return m_Specification; }
private: private:
ApplicationSpecification m_Specification;
Scope<Window> m_Window; Scope<Window> m_Window;
ImGuiLayer* m_imguiLayer; ImGuiLayer* m_imguiLayer;
bool m_Running = true; bool m_Running = true;
@ -46,6 +71,6 @@ namespace Hazel {
}; };
// to be defined int CLIENT // to be defined int CLIENT
Application* CreateApplication(); Application* CreateApplication(ApplicationCommandLineArgs args);
} }