aboutsummaryrefslogtreecommitdiff
path: root/src/core/application.h
blob: 1e4a08d13c160d6523fd3bd9a6526eed192651a5 (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
#pragma once

#include <cstdint>
#include <string>

namespace Hsdbg
{
    struct ApplicationSpec
    {
        std::string name = "hsdbg";
        uint32_t width = 1600;
        uint32_t height = 900;
    };

    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 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;

        static Application* s_instance;

        ApplicationSpec m_spec;
        bool m_running = false;
        float m_delta_time = 0.0f;
        float m_time = 0.0f;
        uint64_t m_frame_count = 0;
    };
}