| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #include <entt/entt.hpp>
- #include <cstdint>
- #include <cstdlib>
- 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](const auto, 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;
- }
|