Skip to content
Flecs v4.1
builder.hpp
Go to the documentation of this file.
1/**
2 * @file addons/cpp/mixins/app/builder.hpp
3 * @brief App builder.
4 */
5
6#pragma once
7
8namespace flecs {
9
10/**
11 * @defgroup cpp_addons_app App
12 * @ingroup cpp_addons
13 * Optional addon for running the main application loop.
14 *
15 * @{
16 */
17
18/** App builder interface. */
19struct app_builder {
20 app_builder(flecs::world_t *world)
21 : world_(world)
22 , desc_{}
23 {
25 desc_.target_fps = stats->target_fps;
26 ecs_ftime_t t_zero = 0.0;
27 if (ECS_EQ(desc_.target_fps, t_zero)) {
28 desc_.target_fps = 60;
29 }
30 }
31
32 /** Set the target frames per second. */
33 app_builder& target_fps(ecs_ftime_t value) {
34 desc_.target_fps = value;
35 return *this;
36 }
37
38 /** Set the fixed delta time for each frame. */
39 app_builder& delta_time(ecs_ftime_t value) {
40 desc_.delta_time = value;
41 return *this;
42 }
43
44 /** Set the number of threads. */
45 app_builder& threads(int32_t value) {
46 desc_.threads = value;
47 return *this;
48 }
49
50 /** Set the number of frames to run. */
51 app_builder& frames(int32_t value) {
52 desc_.frames = value;
53 return *this;
54 }
55
56 /** Enable the REST API. */
57 app_builder& enable_rest(uint16_t port = 0) {
58 desc_.enable_rest = true;
59 desc_.port = port;
60 return *this;
61 }
62
63 /** Enable statistics collection. */
64 app_builder& enable_stats(bool value = true) {
65 desc_.enable_stats = value;
66 return *this;
67 }
68
69 /** Set the init callback. */
70 app_builder& init(ecs_app_init_action_t value) {
71 desc_.init = value;
72 return *this;
73 }
74
75 /** Set the application context. */
76 app_builder& ctx(void *value) {
77 desc_.ctx = value;
78 return *this;
79 }
80
81 /** Run the application. */
82 int run() {
83 int result = ecs_app_run(world_, &desc_);
84 if (ecs_should_quit(world_)) {
85 // Only free world if quit flag is set. This ensures that we won't
86 // try to clean up the world if the app is used in an environment
87 // that takes over the main loop, like with emscripten.
88 if (!flecs_poly_release(world_)) {
89 ecs_fini(world_);
90 }
91 }
92 return result;
93 }
94
95private:
96 flecs::world_t *world_;
97 ecs_app_desc_t desc_;
98};
99
100/** @} */
101
102}
int(*) ecs_app_init_action_t(ecs_world_t *world)
Callback type for init action.
Definition app.h:33
FLECS_API int ecs_app_run(ecs_world_t *world, ecs_app_desc_t *desc)
Run application.
FLECS_API bool ecs_should_quit(const ecs_world_t *world)
Return whether a quit has been requested.
ecs_world_t world_t
World type.
Definition c_types.hpp:18
#define ecs_ftime_t
Customizable precision for scalar time values.
Definition flecs.h:59
int ecs_fini(ecs_world_t *world)
Delete a world.
const ecs_world_info_t * ecs_get_world_info(const ecs_world_t *world)
Get the world info.
Used with ecs_app_run().
Definition app.h:37
Type that contains information about the world.
Definition flecs.h:1533
app_builder & frames(int32_t value)
Set the number of frames to run.
Definition builder.hpp:51
app_builder & init(ecs_app_init_action_t value)
Set the init callback.
Definition builder.hpp:70
int run()
Run the application.
Definition builder.hpp:82
app_builder & enable_stats(bool value=true)
Enable statistics collection.
Definition builder.hpp:64
app_builder & threads(int32_t value)
Set the number of threads.
Definition builder.hpp:45
app_builder & enable_rest(uint16_t port=0)
Enable the REST API.
Definition builder.hpp:57
app_builder & delta_time(ecs_ftime_t value)
Set the fixed delta time for each frame.
Definition builder.hpp:39
app_builder & target_fps(ecs_ftime_t value)
Set the target frames per second.
Definition builder.hpp:33
app_builder & ctx(void *value)
Set the application context.
Definition builder.hpp:76
Stats module.
Definition decl.hpp:28
The world.
Definition world.hpp:129