From 683e22c419757744ce853c35d732f607ddb9af16 Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Wed, 3 Feb 2021 12:33:03 -0500 Subject: Added input system --- src/input_system.cpp | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 src/input_system.cpp (limited to 'src/input_system.cpp') diff --git a/src/input_system.cpp b/src/input_system.cpp new file mode 100644 index 0000000..54a291c --- /dev/null +++ b/src/input_system.cpp @@ -0,0 +1,89 @@ +#include "input_system.h" +#include "game.h" +#include "character_system.h" + +struct Input { + bool left = false; + bool right = false; + bool up = false; + bool down = false; +}; + +void InputSystem::tick(double dt) { + SDL_Event e; + while (SDL_PollEvent(&e)) { + if (e.type == SDL_QUIT || (e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_ESCAPE)) { + game_.quit(); + + return; + } else if (e.type == SDL_KEYDOWN && (e.key.keysym.sym == SDLK_LSHIFT || e.key.keysym.sym == SDLK_RSHIFT)) { + for (int spriteId : game_.getSprites()) { + Sprite& sprite = game_.getSprite(spriteId); + if (sprite.controllable) { + game_.getSystem().beginCrouch(spriteId); + } + } + } else if (e.type == SDL_KEYUP && (e.key.keysym.sym == SDLK_LSHIFT || e.key.keysym.sym == SDLK_RSHIFT)) { + for (int spriteId : game_.getSprites()) { + Sprite& sprite = game_.getSprite(spriteId); + if (sprite.controllable) { + game_.getSystem().endCrouch(spriteId); + } + } + } + } + + Input keystate; + const Uint8* state = SDL_GetKeyboardState(NULL); + keystate.left = state[SDL_SCANCODE_LEFT]; + keystate.right = state[SDL_SCANCODE_RIGHT]; + keystate.up = state[SDL_SCANCODE_UP]; + keystate.down = state[SDL_SCANCODE_DOWN]; + + for (int spriteId : game_.getSprites()) { + Sprite& sprite = game_.getSprite(spriteId); + + if (sprite.controllable) { + bool directed = false; + Direction dir = Direction::left; + + if (keystate.up) + { + directed = true; + dir = Direction::up; + } else if (keystate.down) + { + directed = true; + dir = Direction::down; + } + + if (keystate.left) + { + directed = true; + if (dir == Direction::up) { + dir = Direction::up_left; + } else if (dir == Direction::down) { + dir = Direction::down_left; + } else { + dir = Direction::left; + } + } else if (keystate.right) + { + directed = true; + if (dir == Direction::up) { + dir = Direction::up_right; + } else if (dir == Direction::down) { + dir = Direction::down_right; + } else { + dir = Direction::right; + } + } + + if (directed) { + game_.getSystem().moveInDirection(spriteId, dir); + } else { + game_.getSystem().stopDirecting(spriteId); + } + } + } +} -- cgit 1.4.1