From 4a03d938451763dfb95b534f9002865e72ea7ec5 Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Sat, 16 Mar 2019 17:45:16 -0400 Subject: Can click to place tiles in editor now --- src/input.h | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) (limited to 'src/input.h') diff --git a/src/input.h b/src/input.h index ad8b761..9f6ff47 100644 --- a/src/input.h +++ b/src/input.h @@ -5,7 +5,7 @@ #include /** - * Helper class that detects when a key is newly pressed. + * Helper class that detects when a key or mouse button is newly pressed. */ class Input { public: @@ -16,12 +16,22 @@ public: curstate_.assign(s, s + length_); prevstate_ = curstate_; + + prevmouse_ = SDL_GetMouseState(&mousePos_.x(), &mousePos_.y()); + prevMousePos_ = mousePos_; + curmouse_ = prevmouse_; } - void tick(const Uint8* keystate) + 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 @@ -29,11 +39,42 @@ public: 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 */ -- cgit 1.4.1