|
- #include <gtest/gtest.h>
- #include <thread>
- #include <ecs.h>
- #include <ecs/core.h>
-
- #define MAKE_COMPONENT_TAG(x) \
- namespace tag \
- { \
- constexpr decltype(auto) x = ::ecs::tag::component::value<component::x>; \
- constexpr decltype(auto) warning_supressor_##x() { (void) x; } \
- }
-
- #define MAKE_SYSTEM_TAG(x) \
- namespace tag \
- { \
- constexpr decltype(auto) x = ::ecs::tag::system::value<system::x>; \
- constexpr decltype(auto) warning_supressor_##x() { (void) x; } \
- }
-
- namespace test
- {
- namespace component
- {
- struct position
- {
- double x;
- double y;
- };
-
- struct velocity
- {
- double x;
- double y;
- };
-
- struct acceleration
- {
- double x;
- double y;
- };
-
- MAKE_COMPONENT_TAG(position)
- MAKE_COMPONENT_TAG(velocity)
- MAKE_COMPONENT_TAG(acceleration)
- }
-
- namespace system
- {
- struct accelerate
- {
- int fuu { 6 };
- };
-
- struct move
- {
- int bar;
- };
-
- MAKE_SYSTEM_TAG(accelerate)
- MAKE_SYSTEM_TAG(move)
- }
- }
-
- using namespace test;
-
- namespace c = component;
- namespace ct = c::tag;
- namespace cs = ecs::signature::component;
- namespace csl = ecs::signature_list::component;
-
- namespace s = system;
- namespace st = s::tag;
- namespace ss = ecs::signature::system;
- namespace ssl = ecs::signature_list::system;
-
- constexpr decltype(auto) cs_position =
- cs::make(ct::position)
- .storage(cs::storage::contigous_buffer);
-
- constexpr decltype(auto) cs_velocity =
- cs::make(ct::velocity)
- .storage(cs::storage::contigous_buffer);
-
- constexpr decltype(auto) cs_acceleration =
- cs::make(ct::acceleration)
- .storage(cs::storage::contigous_buffer);
-
- constexpr decltype(auto) cs_list = csl::make(
- cs_position,
- cs_velocity,
- cs_acceleration);
-
- constexpr decltype(auto) ss_accelerate =
- ss::make(st::accelerate)
- .read(ct::acceleration)
- .write(ct::velocity);
-
- constexpr decltype(auto) ss_move =
- ss::make(st::move)
- .dependencies(st::accelerate)
- .read(ct::velocity)
- .write(ct::position);
-
- constexpr decltype(auto) ss_list = ssl::make(
- ss_accelerate,
- ss_move);
-
- constexpr decltype(auto) settings = ::ecs::settings::make()
- .set_component_signatures(cs_list)
- .set_system_signatures (ss_list);
-
- TEST(DummyTest, fuu)
- {
- auto context = ::ecs::context::make_uptr(settings);
- context->_storage.for_each([](auto& instance){
- std::cout << type_helper<decltype(instance.system())>::name() << std::endl;
- });
- }
|