|
|
- #include <entt/entt.hpp>
- #include <cstdint>
-
- struct position {
- float x;
- float y;
- };
-
- struct velocity {
- float dx;
- float dy;
- };
-
- void update(entt::registry ®istry) {
- auto view = registry.view<position, velocity>();
-
- for(auto entity: view) {
- // gets only the components that are going to be used ...
-
- auto &vel = view.get<velocity>(entity);
-
- vel.dx = 0.;
- vel.dy = 0.;
-
- // ...
- }
- }
-
- void update(std::uint64_t dt, entt::registry ®istry) {
- registry.view<position, velocity>().each([dt](auto &pos, auto &vel) {
- // gets all the components of the view at once ...
-
- pos.x += vel.dx * dt;
- pos.y += vel.dy * dt;
-
- // ...
- });
- }
-
- int main() {
- entt::registry registry;
- std::uint64_t dt = 16;
-
- for(auto i = 0; i < 10; ++i) {
- auto entity = registry.create();
- registry.assign<position>(entity, i * 1.f, i * 1.f);
- if(i % 2 == 0) { registry.assign<velocity>(entity, i * .1f, i * .1f); }
- }
-
- update(dt, registry);
- update(registry);
-
- // ...
-
- return EXIT_SUCCESS;
- }
|