#ifndef INPUT_H_0FB34C42 #define INPUT_H_0FB34C42 #include #include /** * Helper class that detects when a key or mouse button is newly pressed. */ class Input { public: Input() { const Uint8* s = SDL_GetKeyboardState(&length_); curstate_.assign(s, s + length_); prevstate_ = curstate_; prevmouse_ = SDL_GetMouseState(&mousePos_.x(), &mousePos_.y()); prevMousePos_ = mousePos_; curmouse_ = prevmouse_; } void tick() { const Uint8* keystate = SDL_GetKeyboardState(nullptr); prevstate_ = std::move(curstate_); curstate_.assign(keystate, keystate + length_); prevmouse_ = curmouse_; prevMousePos_ = mousePos_; curmouse_ = SDL_GetMouseState(&mousePos_.x(), &mousePos_.y()); } bool wasPressed(int scancode) const { return curstate_.at(scancode) && !prevstate_.at(scancode); } bool wasClicked(Uint32 mask) const { return (curmouse_ & SDL_BUTTON(mask)) && !(prevmouse_ & SDL_BUTTON(mask)); } bool wasReleased(Uint32 mask) const { return !(curmouse_ & SDL_BUTTON(mask)) && (prevmouse_ & SDL_BUTTON(mask)); } bool isClicked(Uint32 mask) const { return curmouse_ & SDL_BUTTON(mask); } const vec2i& getMousePos() const { return mousePos_; } bool hasMouseMoved() const { return mousePos_ != prevMousePos_; } private: int length_; std::vector curstate_; std::vector prevstate_; Uint32 curmouse_; Uint32 prevmouse_; vec2i mousePos_; vec2i prevMousePos_; }; #endif /* end of include guard: INPUT_H_0FB34C42 */