PixelBullet  0.0.1
A C++ game engine
Loading...
Searching...
No Matches
application.h
1#pragma once
2
3#include "pixelbullet/core/event.h"
4
5#include "pixelbullet/window/window_events.h"
6
7#include "pixelbullet/application/specification.h"
8
9#include <memory>
10#include <type_traits>
11#include <utility>
12
13namespace pixelbullet
14{
16class Application;
17using ApplicationFactory = std::unique_ptr<Application> (*)(const ApplicationBootstrap& bootstrap);
18
20class Filesystem;
22
23class Window;
24class Graphics;
25
26class Audio;
27
28class Layer;
29class LayerStack;
30class UiFrameLayer;
31
39{
40public:
45 explicit Application(ApplicationSpecification specification, const ApplicationBootstrap& bootstrap);
46
50 virtual ~Application();
51
55 Application(const Application&) = delete;
56
61
66
71
77
82 template <typename T, typename... Args>
83 T* PushLayer(Args&&... args)
84 {
85 static_assert(std::is_base_of<Layer, T>::value, "T must be derived from Layer");
86 auto layer = std::make_unique<T>(std::forward<Args>(args)...);
87 return static_cast<T*>(PushLayerImpl(std::move(layer)));
88 }
89
94 template <typename T, typename... Args>
95 T* PushOverlay(Args&&... args)
96 {
97 static_assert(std::is_base_of<Layer, T>::value, "T must be derived from Layer");
98 auto layer = std::make_unique<T>(std::forward<Args>(args)...);
99 return static_cast<T*>(PushOverlayImpl(std::move(layer)));
100 }
101
107
112 Window& GetWindow();
113
119
124 Audio& GetAudio();
125
126 Filesystem& GetFilesystem();
127 const Filesystem& GetFilesystem() const;
128
129 GraphicsResourceCache& GetGraphicsResourceCache();
130 const GraphicsResourceCache& GetGraphicsResourceCache() const;
131
132 void Start() noexcept;
133 void Stop() noexcept;
134
135 [[nodiscard]] bool IsRunning() const noexcept;
136
137 static int Launch(const ApplicationBootstrap& bootstrap, ApplicationFactory factory);
138
139private:
140 enum class RunResult
141 {
142 Completed,
143 SmokeSucceeded,
144 SmokeTimedOut
145 };
146
150 RunResult Run();
151
157 pixelbullet::core::EventResult OnWindowClose(pixelbullet::window::WindowCloseEvent& e);
158
164 pixelbullet::core::EventResult OnWindowResize(pixelbullet::window::WindowResizeEvent& e);
165 Layer* PushLayerImpl(std::unique_ptr<Layer> layer);
166 Layer* PushOverlayImpl(std::unique_ptr<Layer> layer);
167 void RegisterUiFrameLayer(Layer* layer);
168
169 std::unique_ptr<ApplicationState> state_;
170};
171} // namespace pixelbullet
Definition application_internal.h:20
Main application class.
Definition application.h:39
Application(ApplicationSpecification specification, const ApplicationBootstrap &bootstrap)
Definition application.cc:71
T * PushLayer(Args &&... args)
Definition application.h:83
void OnEvent(pixelbullet::core::Event &e)
Definition application.cc:341
Window & GetWindow()
Definition application.cc:216
Application & operator=(const Application &)=delete
const ApplicationSpecification & GetSpecification() const
Definition application.cc:211
Application(const Application &)=delete
Audio & GetAudio()
Definition application.cc:228
T * PushOverlay(Args &&... args)
Definition application.h:95
Graphics & GetGraphics()
Definition application.cc:222
virtual ~Application()
Definition application.cc:153
Application & operator=(Application &&)=delete
Application(Application &&)=delete
Definition audio.h:25
Definition filesystem.h:19
Definition graphics_resource_cache.h:16
Host-facing graphics subsystem shell.
Definition graphics.h:21
Definition layer_stack.h:12
Definition layer.h:26
Definition layer.h:17
Definition window.h:30
Definition event.h:108
Definition window_events.h:43
Definition window_events.h:11
Definition specification.h:61
Contains configuration options for both the game and the engine.
Definition specification.h:82