From a8bcacc95045102e67f2feabbdddf79535837554 Mon Sep 17 00:00:00 2001 From: jacopograndi Date: Thu, 19 Aug 2021 18:46:51 +0200 Subject: forgot to make repo until now --- commands/commands.cpp | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++ commands/commands.h | 28 ++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 commands/commands.cpp create mode 100644 commands/commands.h (limited to 'commands') diff --git a/commands/commands.cpp b/commands/commands.cpp new file mode 100644 index 0000000..df7aed5 --- /dev/null +++ b/commands/commands.cpp @@ -0,0 +1,64 @@ +#include + +#include "commands.h" + +Commands_sdl::Commands_sdl () { + for (int i=0; i<3; i++) { + mclick[i] = 0; + mheld[i] = 0; + } +} + +Commands_sdl::~Commands_sdl () { + +} + +bool Commands_sdl::check_keydown (SDL_Scancode key) { + return std::find(keysdown.begin(), keysdown.end(), key) != keysdown.end(); +} +bool Commands_sdl::check_key (SDL_Scancode key) { + return std::find(keys.begin(), keys.end(), key) != keys.end(); +} + +bool Commands_sdl::process_events () { + SDL_GetMouseState(&mx, &my); + + SDL_Event e; + while(SDL_PollEvent(&e) != 0) { + if(e.type == SDL_QUIT) { + return true; + } + if(e.type == SDL_KEYDOWN && e.key.repeat == 0) { + keys.push_back(e.key.keysym.scancode); + keysdown.push_back(e.key.keysym.scancode); + } + if(e.type == SDL_KEYUP) { + keysdown.erase(std::remove(keysdown.begin(), keysdown.end(), + e.key.keysym.scancode), keysdown.end()); + } + + if(e.type == SDL_MOUSEBUTTONDOWN) { + if (e.button.button == SDL_BUTTON_LEFT) { mclick[0] = 1; } + if (e.button.button == SDL_BUTTON_MIDDLE) { mclick[1] = 1; } + if (e.button.button == SDL_BUTTON_RIGHT) { mclick[2] = 1; } + } + if(e.type == SDL_MOUSEBUTTONUP) { + if (e.button.button == SDL_BUTTON_LEFT) { mclick[0] = 0; } + if (e.button.button == SDL_BUTTON_MIDDLE) { mclick[1] = 0; } + if (e.button.button == SDL_BUTTON_RIGHT) { mclick[2] = 0; } + } + } + return false; +} + +void Commands_sdl::process_clicks () { + for (int i=0; i<3; i++) { + if (mclick[i] > 0) { mheld[i] += 1; } + else if (mheld[i] > 0) { mheld[i] = -1; } + else { mheld[i] = 0; } + } +} + +void Commands_sdl::process_keys () { + keys.clear(); +} \ No newline at end of file diff --git a/commands/commands.h b/commands/commands.h new file mode 100644 index 0000000..665c8b6 --- /dev/null +++ b/commands/commands.h @@ -0,0 +1,28 @@ +#ifndef COMMANDS_H +#define COMMANDS_H + +#include +#include + +#define SDL_MAIN_HANDLED +#include + +class Commands_sdl { + public: + Commands_sdl (); + ~Commands_sdl (); + bool process_events (); + void process_clicks (); + void process_keys (); + bool check_keydown(SDL_Scancode key); + bool check_key(SDL_Scancode key); + int mx, my; + int mclick[3]; + int mheld[3]; + + private: + std::vector keys; + std::vector keysdown; +}; + +#endif \ No newline at end of file -- cgit v1.2.3-54-g00ecf