You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 regels
3.1 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 decltype(auto) cs_position =
  64. cs::make(ct::position)
  65. .storage(cs::storage::contigous_buffer);
  66. constexpr decltype(auto) cs_velocity =
  67. cs::make(ct::velocity)
  68. .storage(cs::storage::contigous_buffer);
  69. constexpr decltype(auto) cs_acceleration =
  70. cs::make(ct::acceleration)
  71. .storage(cs::storage::contigous_buffer);
  72. constexpr decltype(auto) cs_list = csl::make(
  73. cs_position,
  74. cs_velocity,
  75. cs_acceleration);
  76. constexpr decltype(auto) ss_accelerate =
  77. ss::make(st::accelerate)
  78. .read(ct::acceleration)
  79. .write(ct::velocity);
  80. constexpr decltype(auto) ss_move =
  81. ss::make(st::move)
  82. .dependencies(st::accelerate)
  83. .read(ct::velocity)
  84. .write(ct::position);
  85. constexpr decltype(auto) ss_list = ssl::make(
  86. ss_accelerate,
  87. ss_move);
  88. constexpr decltype(auto) settings = ::ecs::settings::make()
  89. .set_component_signatures(cs_list)
  90. .set_system_signatures (ss_list);
  91. TEST(DummyTest, fuu)
  92. {
  93. auto context = ::ecs::context::make_uptr(settings);
  94. context->_storage.for_each([](auto& instance){
  95. std::cout << type_helper<decltype(instance.system())>::name() << std::endl;
  96. });
  97. }