aboutsummaryrefslogtreecommitdiffstats
path: root/tests/entitiesBenchmark.h
diff options
context:
space:
mode:
Diffstat (limited to 'tests/entitiesBenchmark.h')
-rw-r--r--tests/entitiesBenchmark.h140
1 files changed, 140 insertions, 0 deletions
diff --git a/tests/entitiesBenchmark.h b/tests/entitiesBenchmark.h
new file mode 100644
index 0000000..e046fe3
--- /dev/null
+++ b/tests/entitiesBenchmark.h
@@ -0,0 +1,140 @@
+#ifndef ENTITIESBENCHMARK_H_
+#define ENTITIESBENCHMARK_H_
+
+#include <string>
+#include <vector>
+#include <memory>
+#include <random>
+#include <numeric>
+#include <functional>
+
+#include "../entities.hpp"
+
+class EntitiesBenchmark {
+ public:
+
+ struct PositionComponent : public Component {
+ float x = 0.0f;
+ float y = 0.0f;
+ };
+
+ struct VelocityComponent : public Component {
+ float x = 0.0f;
+ float y = 0.0f;
+ };
+
+ struct ComflabulationComponent : public Component {
+ float thingy = 0.0;
+ int dingy = 0;
+ bool mingy = false;
+ std::string stringy;
+ };
+
+ class MovementSystem : public System {
+ public:
+ MovementSystem() = default;
+
+ void update(EntityManager &es, DeltaTime dt) {
+ es.each<PositionComponent, VelocityComponent>(
+ [dt](Entity e) {
+ auto& pos = *e.component<PositionComponent>();
+ auto& vel = *e.component<VelocityComponent>();
+ pos.x = vel.x * dt;
+ pos.y = vel.y * dt;
+ }
+ );
+ }
+ };
+
+ class ComflabSystem : public System {
+ public:
+ ComflabSystem() = default;
+
+ void update(EntityManager &es, DeltaTime dt) {
+ es.each<ComflabulationComponent>(
+ [dt](Entity e) {
+ auto comflab = e.component<ComflabulationComponent>();
+ comflab->thingy *= 1.000001f;
+ comflab->mingy = !comflab->mingy;
+ comflab->dingy++;
+ //comflab.stringy = std::to_string(comflab.dingy);
+ }
+ );
+ }
+ };
+
+ #ifdef USE_MORECOMPLEX_SYSTEM
+ class MoreComplexSystem : public System {
+ private:
+ int random(int min, int max){
+ // Seed with a real random value, if available
+ static std::random_device r;
+
+ // Choose a random mean between min and max
+ static std::default_random_engine e1(r());
+
+ std::uniform_int_distribution<int> uniform_dist(min, max);
+
+ return uniform_dist(e1);
+ }
+
+ public:
+ MoreComplexSystem() = default;
+
+ void update(EntityManager &es, DeltaTime dt) {
+ es.each<PositionComponent, DirectionComponent, ComflabulationComponent>(
+ [dt](Entity e) {
+ auto comflab = e.component<ComflabulationComponent>();
+ if(comflab) {
+ std::vector<double> vec;
+ for(size_t i = 0; i < comflab->dingy && i < 100; i++)
+ vec.push_back(i * comflab0>thingy);
+ int sum = std::accumulate(vec.begin(), vec.end(), 0);
+ int product = std::accumulate(vec.begin(), vec.end(),
+ 1, std::multiplies<double>());
+ comflab->stringy = std::to_string(comflab->dingy);
+
+ auto pos = e.component<PositionComponent>();
+ auto vel = e.component<VelocityComponent>();
+ if (pos && vel && comflab->dingy % 10000 == 0) {
+ if (pos->x > pos->y) {
+ vel->x = random(0, 5);
+ vel->y = random(0, 10);
+ } else {
+ vel->x = random(0, 10);
+ vel->y = random(0, 5);
+ }
+ }
+ }
+ }
+ );
+ }
+ };
+ #endif
+
+ class Application {
+ public:
+ EntityManager em;
+ SystemManager sm;
+
+ Application() : sm(em) {
+ sm.add<MovementSystem>();
+ sm.add<ComflabSystem>();
+ #ifdef USE_MORECOMPLEX_SYSTEM
+ sm.add<MoreComplexSystem>();
+ #endif
+ }
+
+ void update(DeltaTime dt) {
+ sm.update<MovementSystem>(dt);
+ sm.update<ComflabSystem>(dt);
+ #ifdef USE_MORECOMPLEX_SYSTEM
+ sm.update<MoreComplexSystem>(dt);
+ #endif
+ }
+ };
+
+ static constexpr double fakeDeltaTime = 1.0 / 60;
+};
+
+#endif // ENTITIESBENCHMARK_H_