Skip to content

Commit 2ab8f95

Browse files
authored
ecs: added ecs standard library; reworked and modernized all examples (#58)
closes #53
2 parents a51e013 + 251d5cc commit 2ab8f95

File tree

102 files changed

+1601
-1229
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

102 files changed

+1601
-1229
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,7 @@ if (BRENTA_BUILD_EXAMPLES)
281281
add_example(hot_reloading)
282282
add_example(scripting)
283283
add_example(app)
284+
add_example(ecs_demo)
284285

285286
# Demo
286287
file(GLOB_RECURSE DEMO_SOURCES

TODO

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
- standard ECS library
2+
- particle emitter component (both for ECS and Nodegraph)
23
- implement signals for node scripts

examples/aircraft.cpp

Lines changed: 46 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -50,78 +50,81 @@ int main()
5050
.height(screen_height))
5151
.with(Gl::Builder()
5252
.blending()
53-
.cull_face()
53+
.backface_culling()
5454
.multisample()
5555
.depth_test())
5656
.with(Input::Builder())
5757
.build();
5858
auto engine = Engine::managed();
5959

60-
auto camera =
61-
tenno::make_shared<Camera>(Camera::Builder()
62-
.projection_type(Camera::ProjectionType::Perspective)
63-
.position(Camera::Aircraft::Builder()
64-
.pos({0.0f, 0.0f, 0.0f})
65-
.build())
66-
.fov(30.0f)
67-
.build());
68-
69-
auto shader = Shader::create({
60+
auto maybe_shader = Shader::create({
7061
{ Shader::Type::Vertex, phong_vs },
7162
{ Shader::Type::Fragment, phong_fs } });
72-
if (!shader)
63+
if (!maybe_shader)
7364
{
7465
ERROR("Error creating shader");
7566
return 1;
7667
}
77-
auto shader_ptr = tenno::make_shared<Shader>(tenno::move(shader.value()));
78-
79-
auto material = tenno::make_shared<Material>(shader_ptr);
80-
material->set_float("material.shininess", 32.0f);
81-
82-
auto model =
83-
tenno::make_shared<Model>(Model::Builder()
84-
.path("examples/assets/models/backpack/backpack.obj")
85-
.transform(Transform()
86-
.translate(glm::vec3(25.0f, 0.0f, 0.0f))
87-
.rotate_y(-90.0f)
88-
.scale(glm::vec3(1.0)))
89-
.texture_props(Texture::Properties()
90-
.flipped(true))
91-
.material(material)
92-
.build());
93-
68+
auto shader = tenno::move(maybe_shader.value());
69+
auto material = Material(tenno::move(shader));
70+
material.set_float("material.shininess", 32.0f);
71+
9472
auto phong_dir =
95-
tenno::make_shared<PhongDirLight>(PhongDirLight()
96-
.set_strength(0.5f));
73+
PhongDirLight()
74+
.set_strength(0.5f);
75+
auto phong_dir_ptr =
76+
tenno::make_shared<PhongDirLight>(tenno::move(phong_dir));
9777
auto phong_point =
98-
tenno::make_shared<PhongPointLight>(PhongPointLight()
99-
.set_strength(1.8f));
78+
PhongPointLight()
79+
.set_strength(1.8f);
80+
auto phong_point_ptr =
81+
tenno::make_shared<PhongPointLight>(tenno::move(phong_point));
10082

83+
// Setup scene
84+
85+
auto camera_builder =
86+
Camera::Builder()
87+
.projection_type(Camera::ProjectionType::Perspective)
88+
.position(Camera::Aircraft::Builder()
89+
.pos({0.0f, 0.0f, 0.0f})
90+
.build())
91+
.fov(30.0f);
92+
auto scene = Scene(camera_builder);
93+
auto root_node = scene.get_root();
94+
95+
auto model_builder =
96+
Model::Builder()
97+
.path("examples/assets/models/backpack/backpack.obj")
98+
.transform(Transform()
99+
.translate(glm::vec3(25.0f, 0.0f, 0.0f))
100+
.rotate_y(-90.0f)
101+
.scale(glm::vec3(1.0)))
102+
.texture_props(Texture::Properties()
103+
.flipped(true))
104+
.material(tenno::move(material));
101105
auto model_component =
102-
tenno::make_shared<ModelNodeComponent>(model);
106+
tenno::make_shared<ModelNodeComponent>(model_builder);
103107
auto dir_light_component =
104-
tenno::make_shared<DirLightNodeComponent>(phong_dir);
108+
tenno::make_shared<DirLightNodeComponent>(phong_dir_ptr);
105109
auto point_light_component =
106-
tenno::make_shared<PointLightNodeComponent>(phong_point);
110+
tenno::make_shared<PointLightNodeComponent>(phong_point_ptr);
107111

108-
auto scene = Scene(camera);
109-
auto root_node = scene.get_root();
110-
111112
Scene::add_component(root_node, model_component);
112113
Scene::add_component(root_node, dir_light_component);
113114
Scene::add_component(root_node, point_light_component);
114115

115116
// Camera movement
117+
118+
auto camera = scene.get_camera();
116119
glm::vec3 acceleration = glm::vec3(0.0);
117120
glm::vec3 speed = glm::vec3(0.0);
118121

119122
Mouse mouse = {};
120123
mouse.set_sensitivity(0.05f);
121124
bool capture_mouse = true;
122-
125+
123126
Input::add_mouse_callback("rotate_camera",
124-
[camera, &mouse, &capture_mouse](double x, double y)
127+
[&camera, &mouse, &capture_mouse](double x, double y)
125128
{
126129
if (!capture_mouse) return;
127130

@@ -213,10 +216,10 @@ void update_camera(tenno::shared_ptr<Camera> camera,
213216
if (acceleration.z < -MAX_ACCELERATION)
214217
acceleration.z = -MAX_ACCELERATION;
215218

216-
speed += (acceleration - FRICTION * speed) * delta_time;
219+
speed += (acceleration - FRICTION * speed) * delta_time;
217220
acceleration += -acceleration * FRICTION * delta_time;
218221

219-
auto pos = camera->get_pos();
222+
auto pos = camera->get_pos();
220223
auto apos = std::get<Camera::Aircraft>(pos);
221224

222225
apos.pos += camera->get_front() * speed.x;

examples/app.cpp

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -39,22 +39,13 @@ bool App::setup()
3939
.height(screen_height))
4040
.with(Gl::Builder()
4141
.blending()
42-
.cull_face()
42+
.backface_culling()
4343
.multisample()
4444
.depth_test())
4545
.build();
4646
auto engine = Engine::instance();
4747
engine.initialize();
4848

49-
auto camera =
50-
tenno::make_shared<Camera>(Camera::Builder()
51-
.projection_type(Camera::ProjectionType::Perspective)
52-
.position(Camera::Aircraft::Builder()
53-
.pos({0.0f, 0.0f, 0.0f})
54-
.build())
55-
.fov(45.0f)
56-
.build());
57-
5849
auto shader =
5950
AssetManager::new_asset<Shader>("default_shader",
6051
Shader::Builder()
@@ -67,30 +58,45 @@ bool App::setup()
6758
return false;
6859
}
6960

61+
auto material_builder =
62+
Material::Builder()
63+
.shader(shader);
7064
auto material =
7165
AssetManager::new_asset<Material>("backpack_material",
72-
Material::Builder()
73-
.shader(shader));
74-
66+
material_builder);
67+
68+
auto model_builder =
69+
Model::Builder()
70+
.path("examples/assets/models/backpack/backpack.obj")
71+
.transform(Transform()
72+
.translate(glm::vec3(5.0f, 0.0f, 0.0f))
73+
.rotate(glm::angleAxis(glm::radians(-90.0f),
74+
glm::vec3(0.0f, 1.0f, 0.0f)))
75+
.scale(glm::vec3(1.0)))
76+
.texture_props(Texture::Properties()
77+
.flipped(true))
78+
.material(material);
7579
auto model =
7680
AssetManager::new_asset<Model>("backpack",
77-
Model::Builder()
78-
.path("examples/assets/models/backpack/backpack.obj")
79-
.transform(Transform()
80-
.translate(glm::vec3(5.0f, 0.0f, 0.0f))
81-
.rotate(glm::angleAxis(glm::radians(-90.0f),
82-
glm::vec3(0.0f, 1.0f, 0.0f)))
83-
.scale(glm::vec3(1.0)))
84-
.texture_props(Texture::Properties()
85-
.flipped(true))
86-
.material(material));
81+
model_builder);
8782

8883
auto model_component =
8984
tenno::make_shared<ModelNodeComponent>(model);
85+
9086

91-
auto scene = AssetManager::new_asset<Scene>("main_scene",
92-
Scene::Builder()
93-
.camera(camera));
87+
auto camera_builder =
88+
Camera::Builder()
89+
.projection_type(Camera::ProjectionType::Perspective)
90+
.position(Camera::Aircraft::Builder()
91+
.pos({0.0f, 0.0f, 0.0f})
92+
.build())
93+
.fov(45.0f);
94+
auto scene_builder =
95+
Scene::Builder()
96+
.camera(camera_builder);
97+
auto scene =
98+
AssetManager::new_asset<Scene>("main_scene",
99+
scene_builder);
94100
auto root_node = scene->get_root();
95101
auto model_node = Scene::create_child(root_node);
96102
model_node->set_local(glm::vec3(10.0f, 0.0f, 0.0f));

examples/asset_manager.cpp

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -29,61 +29,67 @@ int main()
2929

3030
Engine::Builder()
3131
.with(Logger::Builder()
32+
.event(Logger::Event::Lifetime)
3233
.level(Logger::Level::Debug))
3334
.with(Window::Builder()
3435
.title("load model test")
3536
.width(screen_width)
3637
.height(screen_height))
3738
.with(Gl::Builder()
3839
.blending()
39-
.cull_face()
40+
.backface_culling()
4041
.multisample()
4142
.depth_test())
4243
.build();
4344
auto engine = Engine::managed();
4445

45-
auto camera =
46-
tenno::make_shared<Camera>(Camera::Builder()
47-
.projection_type(Camera::ProjectionType::Perspective)
48-
.position(Camera::Aircraft::Builder()
49-
.pos({0.0f, 0.0f, 0.0f})
50-
.build())
51-
.fov(45.0f)
52-
.build());
53-
46+
auto shader_builder =
47+
Shader::Builder()
48+
.objects({
49+
{ Shader::Type::Vertex, phong_vs },
50+
{ Shader::Type::Fragment, phong_fs } });
5451
auto shader =
5552
AssetManager::new_asset<Shader>("default_shader",
56-
Shader::Builder()
57-
.objects({
58-
{ Shader::Type::Vertex, phong_vs },
59-
{ Shader::Type::Fragment, phong_fs } }));
53+
shader_builder);
6054
if (!shader)
6155
{
6256
ERROR("Error creating shader");
6357
return 1;
6458
}
65-
59+
60+
auto material_builder =
61+
Material::Builder()
62+
.shader(shader);
6663
auto material =
6764
AssetManager::new_asset<Material>("backpack_material",
68-
Material::Builder()
69-
.shader(shader));
70-
65+
material_builder);
66+
auto model_builder =
67+
Model::Builder()
68+
.path("examples/assets/models/backpack/backpack.obj")
69+
.transform(Transform()
70+
.translate(glm::vec3(5.0f, 0.0f, 0.0f))
71+
.rotate(glm::angleAxis(glm::radians(-90.0f),
72+
glm::vec3(0.0f, 1.0f, 0.0f)))
73+
.scale(glm::vec3(1.0)))
74+
.texture_props(Texture::Properties()
75+
.flipped(true))
76+
.material(material);
7177
auto model =
7278
AssetManager::new_asset<Model>("backpack",
73-
Model::Builder()
74-
.path("examples/assets/models/backpack/backpack.obj")
75-
.transform(Transform()
76-
.translate(glm::vec3(5.0f, 0.0f, 0.0f))
77-
.rotate(glm::angleAxis(glm::radians(-90.0f),
78-
glm::vec3(0.0f, 1.0f, 0.0f)))
79-
.scale(glm::vec3(1.0)))
80-
.texture_props(Texture::Properties()
81-
.flipped(true))
82-
.material(material));
79+
model_builder);
8380

81+
auto camera_builder =
82+
Camera::Builder()
83+
.projection_type(Camera::ProjectionType::Perspective)
84+
.position(Camera::Aircraft::Builder()
85+
.pos({0.0f, 0.0f, 0.0f})
86+
.build())
87+
.fov(45.0f);
88+
auto scene_builder =
89+
Scene::Builder()
90+
.camera(camera_builder);
8491
auto scene = AssetManager::new_asset<Scene>("main_scene",
85-
Scene::Builder()
86-
.camera(camera));
92+
scene_builder);
8793

8894
auto model_component =
8995
tenno::make_shared<ModelNodeComponent>(model);

examples/audio.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ using namespace brenta;
2121

2222
int main()
2323
{
24-
const int screen_width = 800;
24+
const int screen_width = 800;
2525
const int screen_height = 600;
2626

2727
// Required: id and path of an audio. The id will be used by the
@@ -32,7 +32,7 @@ int main()
3232
// You can specify additional optional settings like stream and
3333
// volume
3434
const auto stream_guitar_id = "guitar_stream";
35-
const auto guitar_volume = 0.8f;
35+
const auto guitar_volume = 0.8f;
3636

3737
//
3838
// Setup

0 commit comments

Comments
 (0)