diff --git "a/\320\237\320\24013/Keyboard.cpp" "b/\320\237\320\24013/Keyboard.cpp" new file mode 100644 index 0000000..816e47d --- /dev/null +++ "b/\320\237\320\24013/Keyboard.cpp" @@ -0,0 +1,45 @@ +#include "Keyboard.h" + +void Keyboard::init() +{ } + +void Keyboard::update() +{ + keyListen(); +} + +Keyboard::Keyboard() +{ + filter = {}; +} + +Keyboard::Keyboard(std::set Filter) +{ + filter = Filter; +} + +void Keyboard::keyListen() +{ + if (Game::event.type == SDL_KEYDOWN) { + keys.insert(Game::event.key.keysym.sym); + } + + if (Game::event.type == SDL_KEYUP) { + keys.erase(Game::event.key.keysym.sym); + } + if (filter.size()) { + std::set temp; + std::set_intersection(keys.begin(), keys.end(), filter.begin(), filter.end(), std::inserter(temp, temp.begin())); + keys = temp; + } +} + +std::set Keyboard::getKeys() +{ + return keys; +} + +bool Keyboard::key(SDL_Keycode k) +{ + return keys.find(k) != keys.end(); +} \ No newline at end of file diff --git "a/\320\237\320\24013/Keyboard.h" "b/\320\237\320\24013/Keyboard.h" new file mode 100644 index 0000000..8f68e87 --- /dev/null +++ "b/\320\237\320\24013/Keyboard.h" @@ -0,0 +1,29 @@ +#pragma once + +#include "Game.h" +#include "ECS.h" +#include "Components.h" +#include +#include + +class Keyboard : public Component +{ +private: + std::set keys; + std::set filter; +public: + + Keyboard(); + + Keyboard(std::set Filter); + + void init() override; + + void update() override; + + void keyListen(); + + std::set getKeys(); + + bool key(SDL_Keycode); +}; \ No newline at end of file