Brenta Engine 1.1
Loading...
Searching...
No Matches
engine.cpp
1#include "engine.hpp"
2#include "oak/oak.hpp"
3
4#ifdef USE_ECS
5#include "viotecs/viotecs.hpp"
6#endif
7
8using namespace brenta;
9
10#ifdef USE_ECS
11using namespace viotecs;
12#endif
13
14engine::engine(bool uses_screen, bool uses_audio, bool uses_input,
15 bool uses_logger, bool uses_text, int screen_width,
16 int screen_height, bool screen_is_mouse_captured,
17 bool screen_msaa, bool screen_vsync, const char *screen_title,
18 oak::level log_level, std::string log_file,
19 std::string text_font, int text_size, bool gl_blending,
20 bool gl_cull_face, bool gl_multisample, bool gl_depth_test)
21{
22 this->uses_screen = uses_screen;
23 this->uses_audio = uses_audio;
24 this->uses_input = uses_input;
25 this->uses_logger = uses_logger;
26 uses_text = uses_text;
27 this->screen_width = screen_width;
28 this->screen_height = screen_height;
29 this->screen_is_mouse_captured = screen_is_mouse_captured;
30 this->screen_msaa = screen_msaa;
31 this->screen_vsync = screen_vsync;
32 this->screen_title = screen_title;
33 this->log_level = log_level;
34 this->log_file = log_file;
35 this->text_font = text_font;
36 this->text_size = text_size;
37 this->gl_blending = gl_blending;
38 this->gl_cull_face = gl_cull_face;
39 this->gl_multisample = gl_multisample;
40 this->gl_depth_test = gl_depth_test;
41
42 if (uses_logger)
43 {
44 oak::init_writer();
45 oak::set_level(log_level);
46 if (log_file != "")
47 {
48 auto file = oak::set_file(log_file);
49 if (!file.has_value())
50 {
51 ERROR("Failed to open log file: {}", log_file);
52 }
53 INFO("Set log file: {}", log_file);
54 }
55 }
56
57 if (uses_screen)
58 {
59 screen::init(screen_width, screen_height, screen_is_mouse_captured,
60 screen_title, screen_msaa, screen_vsync);
61 gl::load_opengl(gl_blending, gl_cull_face, gl_multisample,
62 gl_depth_test);
63 }
64
65 if (uses_audio)
66 {
68 }
69
70 if (uses_input)
71 {
73 }
74
75 if (uses_text)
76 {
77 text::init();
78 text::load(text_font, text_size);
79 }
80#ifdef USE_ECS
81 world::init();
82#endif
83#ifdef USE_IMGUI
84 gui::init();
85#endif
86}
87
88engine::~engine()
89{
90#ifdef USE_IMGUI
92#endif
93#ifdef USE_ECS
94 world::destroy();
95#endif
96
97 if (this->uses_audio)
98 {
100 }
101
102 if (this->uses_screen)
103 {
105 }
106
107 if (this->uses_logger)
108 {
109 oak::stop_writer();
110 }
111}
112
113engine::builder &engine::builder::use_screen(bool uses_screen)
114{
115 this->uses_screen = uses_screen;
116 return *this;
117}
118
119engine::builder &engine::builder::use_audio(bool uses_audio)
120{
121 this->uses_audio = uses_audio;
122 return *this;
123}
124
125engine::builder &engine::builder::use_input(bool uses_input)
126{
127 this->uses_input = uses_input;
128 return *this;
129}
130
131engine::builder &engine::builder::use_logger(bool uses_logger)
132{
133 this->uses_logger = uses_logger;
134 return *this;
135}
136
137engine::builder &engine::builder::use_text(bool uses_text)
138{
139 this->uses_text = uses_text;
140 return *this;
141}
142
143engine::builder &engine::builder::set_screen_width(int screen_width)
144{
145 this->screen_width = screen_width;
146 return *this;
147}
148
149engine::builder &engine::builder::set_screen_height(int screen_height)
150{
151 this->screen_height = screen_height;
152 return *this;
153}
154
156engine::builder::set_screen_is_mouse_captured(bool screen_is_mouse_captured)
157{
158 this->screen_is_mouse_captured = screen_is_mouse_captured;
159 return *this;
160}
161
162engine::builder &engine::builder::set_screen_title(const char *screen_title)
163{
164 this->screen_title = screen_title;
165 return *this;
166}
167
168engine::builder &engine::builder::set_screen_msaa(bool screen_msaa)
169{
170 this->screen_msaa = screen_msaa;
171 return *this;
172}
173
174engine::builder &engine::builder::set_screen_vsync(bool screen_vsync)
175{
176 this->screen_vsync = screen_vsync;
177 return *this;
178}
179
180engine::builder &engine::builder::set_log_level(oak::level log_level)
181{
182 this->log_level = log_level;
183 return *this;
184}
185
186engine::builder &engine::builder::set_log_file(std::string log_file)
187{
188 this->log_file = log_file;
189 return *this;
190}
191
192engine::builder &engine::builder::set_text_font(std::string text_font)
193{
194 this->text_font = text_font;
195 return *this;
196}
197
198engine::builder &engine::builder::set_text_size(int text_size)
199{
200 this->text_size = text_size;
201 return *this;
202}
203
204engine::builder &engine::builder::set_gl_blending(bool gl_blending)
205{
206 this->gl_blending = gl_blending;
207 return *this;
208}
209
210engine::builder &engine::builder::set_gl_cull_face(bool gl_cull_face)
211{
212 this->gl_cull_face = gl_cull_face;
213 return *this;
214}
215
216engine::builder &engine::builder::set_gl_multisample(bool gl_multisample)
217{
218 this->gl_multisample = gl_multisample;
219 return *this;
220}
221
222engine::builder &engine::builder::set_gl_depth_test(bool gl_depth_test)
223{
224 this->gl_depth_test = gl_depth_test;
225 return *this;
226}
227
228engine engine::builder::build()
229{
230 return engine(uses_screen, uses_audio, uses_input, uses_logger, uses_text,
231 screen_width, screen_height, screen_is_mouse_captured,
232 screen_msaa, screen_vsync, screen_title, log_level, log_file,
233 text_font, text_size, gl_blending, gl_cull_face,
234 gl_multisample, gl_depth_test);
235}
static void destroy()
Destroy the audio system.
static void init()
Initialize the audio system.
Engine builder.
Definition engine.hpp:103
Engine setup.
Definition engine.hpp:61
static void load_opengl(bool gl_blending=true, bool gl_cull_face=true, bool gl_multisample=true, bool gl_depth_test=true)
Load OpenGL.
Definition gl_helper.cpp:37
static void destroy()
Delete the gui.
Definition gui.cpp:54
static void init()
Initialize the gui.
Definition gui.cpp:38
static void init()
Initialize the input system.
static void terminate()
Terminate the window.
Definition screen.cpp:146
static void init(int SCR_WIDTH, int SCR_HEIGHT, bool is_mouse_captured=false, const char *title="OpenGL", bool msaa=false, bool vsync=false)
Initialize the window.
Definition screen.cpp:42
static void init()
Initialize the text subsystem.
Definition text.cpp:41
static void load(std::string font_name, unsigned int font_size)
Load a font.
Definition text.cpp:49