blob: 8df5afb21d7dda3053e08c331ee73acc10ca5c42 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#pragma once
#include <cstdint>
#include <memory>
#include <string>
namespace Hsdbg
{
class Window;
class WindowManager;
struct ApplicationSpec
{
std::string name = "hsdbg";
uint32_t width = 1600;
uint32_t height = 900;
bool vsync = true;
};
class Application
{
public:
explicit Application(const ApplicationSpec& spec);
~Application();
Application(const Application&) = delete;
Application(Application&&) = delete;
auto operator=(const Application&) -> Application& = delete;
auto operator=(Application&&) -> Application& = delete;
static auto get() -> Application&;
auto run() -> void;
auto close() -> void;
auto window() -> Window& { return *m_window; }
auto spec() const -> const ApplicationSpec& { return m_spec; }
auto is_running() const -> bool { return m_running; }
auto delta_time() const -> float { return m_delta_time; }
auto time() const -> float { return m_time; }
auto frame_count() const -> uint64_t { return m_frame_count; }
private:
auto update() -> void;
auto render() -> void;
static Application* s_instance;
ApplicationSpec m_spec;
std::unique_ptr<WindowManager> m_window_manager;
Window* m_window = nullptr;
bool m_running = false;
float m_delta_time = 0.0f;
float m_time = 0.0f;
uint64_t m_frame_count = 0;
};
}
|