Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

131 lignes
3.4 KiB

  1. #include <gtest/gtest.h>
  2. #include <thread>
  3. #include <ecs.h>
  4. #include <ecs/core.h>
  5. #define MAKE_COMPONENT_TAG(x) \
  6. namespace tag \
  7. { \
  8. constexpr decltype(auto) x = ::ecs::tag::component::value<component::x>; \
  9. constexpr decltype(auto) warning_supressor_##x() { (void) x; } \
  10. }
  11. #define MAKE_SYSTEM_TAG(x) \
  12. namespace tag \
  13. { \
  14. constexpr decltype(auto) x = ::ecs::tag::system::value<system::x>; \
  15. constexpr decltype(auto) warning_supressor_##x() { (void) x; } \
  16. }
  17. namespace test
  18. {
  19. namespace component
  20. {
  21. struct position
  22. {
  23. double x;
  24. double y;
  25. };
  26. struct velocity
  27. {
  28. double x;
  29. double y;
  30. };
  31. struct acceleration
  32. {
  33. double x;
  34. double y;
  35. };
  36. MAKE_COMPONENT_TAG(position)
  37. MAKE_COMPONENT_TAG(velocity)
  38. MAKE_COMPONENT_TAG(acceleration)
  39. }
  40. namespace system
  41. {
  42. struct accelerate
  43. {
  44. int fuu { 6 };
  45. };
  46. struct move
  47. {
  48. int bar;
  49. };
  50. MAKE_SYSTEM_TAG(accelerate)
  51. MAKE_SYSTEM_TAG(move)
  52. }
  53. }
  54. using namespace test;
  55. namespace c = component;
  56. namespace ct = c::tag;
  57. namespace cs = ecs::signature::component;
  58. namespace csl = ecs::signature_list::component;
  59. namespace s = system;
  60. namespace st = s::tag;
  61. namespace ss = ecs::signature::system;
  62. namespace ssl = ecs::signature_list::system;
  63. constexpr size_t storage_size = 1024;
  64. constexpr decltype(auto) cs_position =
  65. cs::make(ct::position)
  66. .storage(cs::storage::dynamic<storage_size>);
  67. constexpr decltype(auto) cs_velocity =
  68. cs::make(ct::velocity)
  69. .storage(cs::storage::dynamic<storage_size>);
  70. constexpr decltype(auto) cs_acceleration =
  71. cs::make(ct::acceleration)
  72. .storage(cs::storage::dynamic<storage_size>);
  73. constexpr decltype(auto) cs_list = csl::make(
  74. cs_position,
  75. cs_velocity,
  76. cs_acceleration);
  77. constexpr decltype(auto) ss_accelerate =
  78. ss::make(st::accelerate)
  79. .read(ct::acceleration)
  80. .write(ct::velocity);
  81. constexpr decltype(auto) ss_move =
  82. ss::make(st::move)
  83. .dependencies(st::accelerate)
  84. .read(ct::velocity)
  85. .write(ct::position);
  86. constexpr decltype(auto) ss_list = ssl::make(
  87. ss_accelerate,
  88. ss_move);
  89. constexpr decltype(auto) settings = ::ecs::settings::make()
  90. .component_signatures(cs_list)
  91. .system_signatures (ss_list);
  92. namespace sea = ::ecs::system_execution_adapter;
  93. TEST(DummyTest, fuu)
  94. {
  95. auto context = ::ecs::context::make(settings);
  96. context.step([](auto& step_proxy){
  97. step_proxy.execute_systems()(
  98. sea::tags(st::accelerate)
  99. .for_subtasks([](auto& s, auto& data){
  100. std::cout << "accelerate" << std::endl;
  101. }),
  102. sea::tags(st::move)
  103. .for_subtasks([](auto& s, auto& data){
  104. std::cout << "move" << std::endl;
  105. })
  106. );
  107. });
  108. }