|
|
@@ -0,0 +1,55 @@
|
|
|
+#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;
|
|
|
+}
|