diff --git a/modules/input/private/system.cpp b/modules/input/private/system.cpp index ca6ae37..01eec12 100644 --- a/modules/input/private/system.cpp +++ b/modules/input/private/system.cpp @@ -16,15 +16,16 @@ System::System(Ref registry): m_registry(std::move(registry)) auto System::tick() -> bool { - m_registry->view().each([&](const entt::entity, - surface::SurfaceComponent &surface) { + for (auto &[entity, surface] : m_registry->view()) + { for (const auto &event : surface.peek_events()) { handle_event(event); } - }); + } - m_registry->view().each([&](const entt::entity, InputComponent &input) { + for (auto &[entity, input] : m_registry->view()) + { // TODO(Light): instead of iterating over all actions each frame, // make a list of "dirty" actions to reset // and a surface_input->input_action mapping to get to action through input @@ -48,7 +49,7 @@ auto System::tick() -> bool action.state = InputAction::State::inactive; } } - }); + } return false; } diff --git a/modules/input/private/system.test.cpp b/modules/input/private/system.test.cpp index 4f148e8..e16bff1 100644 --- a/modules/input/private/system.test.cpp +++ b/modules/input/private/system.test.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include // NOLINTBEGIN @@ -27,16 +28,19 @@ public: auto add_input_component() -> ecs::Entity { - auto entity = m_registry->create_entity(""); - entity.add_component(); + auto entity = m_registry->create_entity(); + m_registry->add(entity, {}); return entity; } auto add_surface_component() -> ecs::Entity { - auto entity = m_registry->create_entity(""); - entity.add_component(surface::SurfaceComponent::CreateInfo {}); + auto entity = m_registry->create_entity(); + m_registry->add( + entity, + surface::SurfaceComponent::CreateInfo {} + ); return entity; } @@ -66,53 +70,58 @@ Suite raii = [] { Suite system_events = [] { Case { "on_register won't throw" } = [] { auto fixture = Fixture {}; - auto system = System { fixture.registry() }; + auto registry = fixture.registry(); + auto system = System { registry }; system.on_register(); - expect_eq(fixture.registry()->view().size(), 0); + expect_eq(registry->view().get_size(), 0); }; Case { "on_unregister won't throw" } = [] { auto fixture = Fixture {}; - auto system = System { fixture.registry() }; + auto registry = fixture.registry(); + auto system = System { registry }; system.on_register(); system.on_unregister(); - expect_eq(fixture.registry()->view().size(), 0); + expect_eq(registry->view().get_size(), 0); }; }; Suite registry_events = [] { Case { "on_construct" } = [] { auto fixture = Fixture {}; - auto system = System { fixture.registry() }; + auto registry = fixture.registry(); + auto system = System { registry }; const auto &entity = fixture.add_input_component(); - expect_eq(fixture.registry()->view().size(), 1); + expect_eq(registry->view().get_size(), 1); }; Case { "on_destrroy" } = [] { auto fixture = Fixture {}; - auto system = create_scope(fixture.registry()); + auto registry = fixture.registry(); + auto system = create_scope(registry); auto entity_a = fixture.add_input_component(); auto entity_b = fixture.add_input_component(); - expect_eq(fixture.registry()->view().size(), 2); + expect_eq(registry->view().get_size(), 2); - entity_a.remove_component(); - expect_eq(fixture.registry()->view().size(), 1); + registry->remove(entity_a); + expect_eq(registry->view().get_size(), 1); system.reset(); - expect_eq(fixture.registry()->view().size(), 1); + expect_eq(registry->view().get_size(), 1); - entity_b.remove_component(); - expect_eq(fixture.registry()->view().size(), 0); + registry->remove(entity_b); + expect_eq(registry->view().get_size(), 0); }; }; Suite tick = [] { Case { "Empty tick won't throw" } = [] { auto fixture = Fixture {}; + auto registry = fixture.registry(); auto system = System { fixture.registry() }; expect_false(system.tick()); @@ -120,10 +129,14 @@ Suite tick = [] { Case { "Tick triggers input action" } = [] { auto fixture = Fixture {}; + auto registry = fixture.registry(); auto system = System { fixture.registry() }; - auto &surface = fixture.add_surface_component().get_component(); - auto &input = fixture.add_input_component().get_component(); + auto surface_entity = fixture.add_surface_component(); + auto &surface = registry->get(surface_entity); + + auto input_entity = fixture.add_input_component(); + auto &input = registry->get(input_entity); auto action_key = input.add_action( { @@ -155,10 +168,15 @@ Suite tick = [] { Case { "Tick triggers" } = [] { auto fixture = Fixture {}; + auto registry = fixture.registry(); auto system = System { fixture.registry() }; - auto &surface = fixture.add_surface_component().get_component(); - auto &input = fixture.add_input_component().get_component(); + auto surface_entity = fixture.add_surface_component(); + auto &surface = registry->get(surface_entity); + + auto input_entity = fixture.add_input_component(); + auto &input = registry->get(input_entity); + auto action_key = input.add_action( { diff --git a/modules/input/public/system.hpp b/modules/input/public/system.hpp index fa5e5ed..554a4ec 100644 --- a/modules/input/public/system.hpp +++ b/modules/input/public/system.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include +#include #include #include #include