Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdbool.h>
- #include <SDL2/SDL.h>
- #include "event_handler.h"
- int mouse_x;
- int mouse_y;
- bool keyState[MAX_KEYS];
- unsigned int keyTimeStamp[MAX_KEYS];
- SDL_Thread *eventHandlerThread = NULL;
- int getMouseX()
- {
- return mouse_x;
- }
- int getMouseY()
- {
- return mouse_y;
- }
- bool isAnyKeyBeingPressed()
- {
- return keyState[W] || keyState[A] || keyState[S] || keyState[D] || keyState[UP] || keyState[LEFT] || keyState[RIGHT] || keyState[DOWN] || keyState[ESC] || keyState[RETURN1] || keyState[RETURN2];
- }
- void eventHandler()
- {
- const Uint8 *keys = SDL_GetKeyboardState(NULL);
- unsigned int timeStamp;
- for (int i = 0; i < MAX_KEYS; i++)
- {
- keyState[i] = RELEASED;
- keyTimeStamp[i] = 0;
- }
- while (true)
- {
- timeStamp = SDL_GetTicks();
- SDL_PumpEvents();
- SDL_Event event;
- while(SDL_PollEvent(&event))
- {
- if (event.type == SDL_QUIT)
- {
- SDL_Quit();
- return;
- }
- if (event.type == SDL_MOUSEBUTTONDOWN)
- {
- if (event.button.button = SDL_BUTTON_LEFT)
- {
- printf("Left Mouse Pressed\n");
- }
- }
- if (event.type == SDL_MOUSEBUTTONUP)
- {
- if (event.button.button = SDL_BUTTON_LEFT)
- {
- printf("Left Mouse Released\n");
- }
- }
- }
- // Get current mouse position
- SDL_GetMouseState(&mouse_x, &mouse_y);
- if (keys[W] == PRESSED) {
- keyTimeStamp[W] = timeStamp;
- if (keyState[W] == RELEASED) {
- keyState[W] = PRESSED;
- printf("W was pressed\n");
- }
- }
- if (keys[A] == PRESSED) {
- keyTimeStamp[A] = timeStamp;
- if (keyState[A] == RELEASED) {
- keyState[A] = PRESSED;
- printf("A was pressed\n");
- }
- }
- if (keys[S] == PRESSED) {
- keyTimeStamp[S] = timeStamp;
- if (keyState[S] == RELEASED) {
- keyState[S] = PRESSED;
- printf("S was pressed\n");
- }
- }
- if (keys[D] == PRESSED) {
- keyTimeStamp[D] = timeStamp;
- if (keyState[D] == RELEASED) {
- keyState[D] = PRESSED;
- printf("D was pressed\n");
- }
- }
- if (keys[UP] == PRESSED)
- {
- keyTimeStamp[UP] = timeStamp;
- if (keyState[UP] == RELEASED) {
- keyState[UP] = PRESSED;
- printf("UP was pressed\n");
- }
- }
- if (keys[LEFT] == PRESSED)
- {
- keyTimeStamp[LEFT] = timeStamp;
- if (keyState[LEFT] == RELEASED) {
- keyState[LEFT] = PRESSED;
- printf("LEFT was pressed\n");
- }
- }
- if (keys[DOWN] == PRESSED)
- {
- keyTimeStamp[DOWN] = timeStamp;
- if (keyState[DOWN] == RELEASED) {
- keyState[DOWN] = PRESSED;
- printf("DOWN was pressed\n");
- }
- }
- if (keys[RIGHT] == PRESSED)
- {
- keyTimeStamp[RIGHT] = timeStamp;
- if (keyState[RIGHT] == RELEASED) {
- keyState[RIGHT] = PRESSED;
- printf("RIGHT was pressed\n");
- }
- }
- if (keys[ESC] == PRESSED)
- {
- keyTimeStamp[ESC] = timeStamp;
- if (keyState[ESC] == RELEASED) {
- keyState[ESC] = PRESSED;
- printf("ESC was pressed\n");
- }
- }
- if (keys[RETURN1] == PRESSED)
- {
- keyTimeStamp[RETURN1] = timeStamp;
- if (keyState[RETURN1] == RELEASED) {
- keyState[RETURN1] = PRESSED;
- printf("RETURN1 was pressed\n");
- }
- }
- if (keys[RETURN2] == PRESSED)
- {
- keyTimeStamp[RETURN2] = timeStamp;
- if (keyState[RETURN2] == RELEASED) {
- keyState[RETURN2] = PRESSED;
- printf("RETURN2 was pressed\n");
- }
- }
- if (eventHandlerThread == NULL && isAnyKeyBeingPressed()) {
- eventHandlerThread = SDL_CreateThread(checkForRelease, "checkForRelease", (void *)NULL);
- }
- SDL_Delay(10);
- }
- }
- void checkForRelease()
- {
- unsigned int timeStamp;
- // Continues to run until all relevant keys have been released.
- while (isAnyKeyBeingPressed())
- {
- timeStamp = SDL_GetTicks() - 100;
- if (timeStamp > keyTimeStamp[W] && keyState[W])
- {
- printf("W was released\n");
- keyState[W] = RELEASED;
- }
- if (timeStamp > keyTimeStamp[A] && keyState[A])
- {
- printf("A was released\n");
- keyState[A] = RELEASED;
- }
- if (timeStamp > keyTimeStamp[S] && keyState[S])
- {
- printf("S was released\n");
- keyState[S] = RELEASED;
- }
- if (timeStamp > keyTimeStamp[D] && keyState[D])
- {
- printf("D was released\n");
- keyState[D] = RELEASED;
- }
- if (timeStamp > keyTimeStamp[ESC] && keyState[ESC])
- {
- printf("ESC was released\n");
- keyState[ESC] = RELEASED;
- }
- if (timeStamp > keyTimeStamp[UP] && keyState[UP])
- {
- printf("UP was released\n");
- keyState[UP] = RELEASED;
- }
- if (timeStamp > keyTimeStamp[LEFT] && keyState[LEFT])
- {
- printf("LEFT was released\n");
- keyState[LEFT] = RELEASED;
- }
- if (timeStamp > keyTimeStamp[DOWN] && keyState[DOWN])
- {
- printf("DOWN was released\n");
- keyState[DOWN] = RELEASED;
- }
- if (timeStamp > keyTimeStamp[RIGHT] && keyState[RIGHT])
- {
- printf("RIGHT was released\n");
- keyState[RIGHT] = RELEASED;
- }
- if (timeStamp > keyTimeStamp[RETURN1] && keyState[RETURN1])
- {
- printf("RETURN1 was released\n");
- keyState[RETURN1] = RELEASED;
- }
- if (timeStamp > keyTimeStamp[RETURN2] && keyState[RETURN2])
- {
- printf("RETURN2 was released\n");
- keyState[RETURN2] = RELEASED;
- }
- SDL_Delay(5);
- }
- eventHandlerThread = NULL;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement