#include "input.hpp" Input::Input() { } Input::~Input() { } void Input::handleEvents() { while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_EVENT_QUIT: quitRequestedFlag = true; break; case SDL_EVENT_KEY_DOWN: if (keyStates[event.key.scancode] == false) { keyFallingEdgeStates[event.key.scancode] = true; } keyStates[event.key.scancode] = true; break; case SDL_EVENT_KEY_UP: keyStates[event.key.scancode] = false; keyFallingEdgeStates[event.key.scancode] = false; break; case SDL_EVENT_MOUSE_BUTTON_DOWN: if (mouseButtonStates[event.button.button] == false) { mouseButtonFallingEdgeStates[event.button.button] = true; } mouseButtonStates[event.button.button] = true; break; case SDL_EVENT_MOUSE_BUTTON_UP: mouseButtonStates[event.button.button] = false; mouseButtonFallingEdgeStates[event.button.button] = false; break; case SDL_EVENT_MOUSE_MOTION: mousePosition.x = static_cast(event.motion.x); mousePosition.y = static_cast(event.motion.y); break; } } } bool Input::quitRequested() const { return quitRequestedFlag; } bool Input::isKeyPressed(SDL_Scancode key) { auto it = keyStates.find(key); return it != keyStates.end() && it->second; } bool Input::isKeyPressed(std::vector keys) { for (const auto& key : keys) { if (isKeyPressed(key)) { return true; } } return false; } bool Input::isMouseButtonPressed(Uint8 button) { auto it = mouseButtonStates.find(button); return it != mouseButtonStates.end() && it->second; } bool Input::isMouseButtonPressed(std::vector buttons) { for (const auto& button : buttons) { if (isMouseButtonPressed(button)) { return true; } } return false; } Vector2 Input::getMousePosition() const { return mousePosition; } bool Input::hasKeyBeenPressed(SDL_Scancode key) { auto it = keyFallingEdgeStates.find(key); if (it != keyFallingEdgeStates.end() && it->second) { keyFallingEdgeStates[key] = false; return true; } return false; } bool Input::hasKeyBeenPressed(std::vector keys) { for (const auto& key : keys) { if (hasKeyBeenPressed(key)) { return true; } } return false; } bool Input::hasMouseButtonBeenPressed(Uint8 button) { auto it = mouseButtonFallingEdgeStates.find(button); if (it != mouseButtonFallingEdgeStates.end() && it->second) { mouseButtonFallingEdgeStates[button] = false; return true; } return false; } bool Input::hasMouseButtonBeenPressed(std::vector buttons) { for (const auto& button : buttons) { if (hasMouseButtonBeenPressed(button)) { return true; } } return false; }