R-Type 0.1
Loading...
Searching...
No Matches
MovementSystem.hpp
1#pragma once
2
3#include "Logger/Logger.hpp"
4#include "components/Transform.hpp"
5#include "components/Velocity.hpp"
6#include <ISystem.hpp>
7
8namespace rtk::systems {
17class MovementSystem final : public rtk::ecs::ISystem {
18public:
19 MovementSystem() = default;
20 ~MovementSystem() override = default;
21
25 void onStart(rtk::ecs::Registry &) override {
26 LOG_INFO("Load Movement System");
27 }
28
34 void update(rtk::ecs::Registry &reg, float dt) override {
35 auto view = reg.view<component::Transform, component::Velocity>();
36
37 auto &transforms = reg.get_components<component::Transform>();
38 auto &velocities = reg.get_components<component::Velocity>();
39
40 for (auto entity : view) {
41 auto *transform = transforms.get(entity);
42 auto *velocity = velocities.get(entity);
43
44 if (!transform || !velocity) {
45 continue;
46 }
47
48 transform->position.x += velocity->x * dt;
49 transform->position.y += velocity->y * dt;
50 }
51 }
52
56 void onStop(rtk::ecs::Registry &) override {}
57};
58
60} // namespace rtk::systems
Moves entities according to their Velocity.
Definition MovementSystem.hpp:17
void onStart(rtk::ecs::Registry &) override
Logs that the system is loaded.
Definition MovementSystem.hpp:25
void update(rtk::ecs::Registry &reg, float dt) override
Adds velocity times elapsed time to every position.
Definition MovementSystem.hpp:34
void onStop(rtk::ecs::Registry &) override
Does nothing.
Definition MovementSystem.hpp:56
Position, rotation and scale of an entity in world space.
Definition Transform.hpp:22
utils::vec2 position
Top left corner, in pixels.
Definition Transform.hpp:24
Linear speed of an entity.
Definition Velocity.hpp:17
float x
Horizontal component.
Definition vec2.hpp:13