-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathInputHandlerSystem.cpp
68 lines (62 loc) · 2.22 KB
/
InputHandlerSystem.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include "InputHandlerSystem.h"
#include <Components/MovableComponent.h>
#include <Components/SpeedComponent.h>
#include <SFML/Window.hpp>
#include <Events/Input.h>
#include <set>
#include <memory>
using Events = std::set<sf::Keyboard::Key>;
InputHandlerSystem::InputHandlerSystem(ecs::Manager& aManager, Event::EventManager& anEventManager)
: ecs::ISystem_<InputHandlerSystem>(aManager){
if (ids.empty())
{
ids.insert(SpeedComponent::sGetID());
ids.insert(MovableComponent::sGetID());
}
anEventManager.attach<Event::Input>(std::bind(&InputHandlerSystem::processEvent, this, std::placeholders::_1));
}
void InputHandlerSystem::processEvent(const Event::IEvent& anEvent)
{
const Event::Input& inpEvent = static_cast<const Event::Input&>(anEvent);
eventMap[inpEvent.key] = inpEvent.pressed;
}
void InputHandlerSystem::Execute(float time_step)
{
for (auto& entity : manager.getEntities(this->getComponentIDs()))
{
SpeedComponent& speed = manager.getComponent<SpeedComponent>(entity);
MovableComponent& move = manager.getComponent<MovableComponent>(entity);
if (eventMap.find(move.up) != eventMap.end()){
if (eventMap.at(move.up) && speed.y > -575){
speed.y -= 25;
}
else if (eventMap.at(move.up) == false && speed.y < 0){
speed.y += 25;
}
}
if (eventMap.find(move.down) != eventMap.end()){
if (eventMap.at(move.down) && speed.y < 575){
speed.y += 25;
}
else if (eventMap.at(move.down) == false && speed.y > 0){
speed.y -= 25;
}
}
if (eventMap.find(move.left) != eventMap.end()){
if (eventMap.at(move.left) && speed.x > -575){
speed.x -= 25;
}
else if (eventMap.at(move.left) == false && speed.x < 0){
speed.x += 25;
}
}
if (eventMap.find(move.right) != eventMap.end()){
if (eventMap.at(move.right) && speed.x < 575){
speed.x += 25;
}
else if (eventMap.at(move.right) == false && speed.x > 0){
speed.x -= 25;
}
}
}
}