summary refs log tree commit diff stats
path: root/src/input_system.cpp
diff options
context:
space:
mode:
authorKelly Rauchenberger <fefferburbia@gmail.com>2021-02-21 17:56:17 -0500
committerKelly Rauchenberger <fefferburbia@gmail.com>2021-02-21 17:56:17 -0500
commit5df0d0616ee3996add0b14e0fb0becd6257d04a2 (patch)
tree19bf067462ea04abf500e0427d3daeb3a39434ee /src/input_system.cpp
parentecbe17b582803aaeaa9ccee88a3d093ff93a6cd3 (diff)
downloadtanetane-5df0d0616ee3996add0b14e0fb0becd6257d04a2.tar.gz
tanetane-5df0d0616ee3996add0b14e0fb0becd6257d04a2.tar.bz2
tanetane-5df0d0616ee3996add0b14e0fb0becd6257d04a2.zip
Added a debug console
Open it by pressing backtick, close it by hitting escape. Pressing backtick does not open it in release builds.

Current shortcomings: opening it for the first time also types a backtick for some reason, but not on subsequent times. Also, it doesn't create a coroutine, so any script function that yields is going to fail.

This also added a "is gameplay paused" flag to Game, which will be useful for adding a pause menu.
Diffstat (limited to 'src/input_system.cpp')
-rw-r--r--src/input_system.cpp44
1 files changed, 42 insertions, 2 deletions
diff --git a/src/input_system.cpp b/src/input_system.cpp index 43c59dd..1b5b56b 100644 --- a/src/input_system.cpp +++ b/src/input_system.cpp
@@ -16,12 +16,42 @@ struct Input {
16void InputSystem::tick(double dt) { 16void InputSystem::tick(double dt) {
17 SDL_Event e; 17 SDL_Event e;
18 while (SDL_PollEvent(&e)) { 18 while (SDL_PollEvent(&e)) {
19 if (e.type == SDL_QUIT || (e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_ESCAPE)) { 19 if (e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_ESCAPE) {
20 if (debugConsole_) {
21 debugConsole_ = false;
22 game_.unpauseGameplay();
23 SDL_StopTextInput();
24 debugText_.clear();
25 } else {
26 game_.quit();
27 }
28 } else if (e.type == SDL_QUIT) {
20 game_.quit(); 29 game_.quit();
21 30
22 return; 31 return;
32 } else if (e.type == SDL_TEXTINPUT) {
33 debugText_.append(e.text.text);
23 } else if (e.type == SDL_KEYDOWN) { 34 } else if (e.type == SDL_KEYDOWN) {
24 if (e.key.keysym.sym == SDLK_LSHIFT || e.key.keysym.sym == SDLK_RSHIFT) { 35 if (e.key.keysym.sym == SDLK_BACKQUOTE) {
36#ifdef TANETANE_DEBUG
37 if (!debugConsole_) {
38 debugConsole_ = true;
39 game_.pauseGameplay();
40 SDL_StartTextInput();
41 debugText_.clear();
42 }
43#endif
44 } else if (debugConsole_ && e.key.keysym.sym == SDLK_RETURN) {
45 game_.getSystem<ScriptSystem>().runDebugScript(debugText_);
46 debugText_.clear();
47 } else if (debugConsole_ && e.key.keysym.sym == SDLK_BACKSPACE) {
48 // Make sure to keep the backtick/heart.
49 if (!debugText_.empty()) {
50 debugText_.pop_back();
51 }
52 } else if (e.key.keysym.sym == SDLK_LSHIFT || e.key.keysym.sym == SDLK_RSHIFT) {
53 if (game_.isGameplayPaused()) continue;
54
25 for (int spriteId : game_.getSprites()) { 55 for (int spriteId : game_.getSprites()) {
26 Sprite& sprite = game_.getSprite(spriteId); 56 Sprite& sprite = game_.getSprite(spriteId);
27 if (sprite.controllable) { 57 if (sprite.controllable) {
@@ -29,6 +59,8 @@ void InputSystem::tick(double dt) {
29 } 59 }
30 } 60 }
31 } else if (e.key.keysym.sym == SDLK_SPACE) { 61 } else if (e.key.keysym.sym == SDLK_SPACE) {
62 if (game_.isGameplayPaused()) continue;
63
32 // If there is text on screen, try to advance it. 64 // If there is text on screen, try to advance it.
33 if (game_.getSystem<MessageSystem>().getCutsceneBarsProgress() != 0.0) { 65 if (game_.getSystem<MessageSystem>().getCutsceneBarsProgress() != 0.0) {
34 game_.getSystem<MessageSystem>().advanceText(); 66 game_.getSystem<MessageSystem>().advanceText();
@@ -75,15 +107,21 @@ void InputSystem::tick(double dt) {
75 } 107 }
76 } 108 }
77 } else if (e.key.keysym.sym == SDLK_LEFT) { 109 } else if (e.key.keysym.sym == SDLK_LEFT) {
110 if (game_.isGameplayPaused()) continue;
111
78 if (game_.getSystem<MessageSystem>().isChoiceActive()) { 112 if (game_.getSystem<MessageSystem>().isChoiceActive()) {
79 game_.getSystem<MessageSystem>().selectFirstChoice(); 113 game_.getSystem<MessageSystem>().selectFirstChoice();
80 } 114 }
81 } else if (e.key.keysym.sym == SDLK_RIGHT) { 115 } else if (e.key.keysym.sym == SDLK_RIGHT) {
116 if (game_.isGameplayPaused()) continue;
117
82 if (game_.getSystem<MessageSystem>().isChoiceActive()) { 118 if (game_.getSystem<MessageSystem>().isChoiceActive()) {
83 game_.getSystem<MessageSystem>().selectSecondChoice(); 119 game_.getSystem<MessageSystem>().selectSecondChoice();
84 } 120 }
85 } 121 }
86 } else if (e.type == SDL_KEYUP && (e.key.keysym.sym == SDLK_LSHIFT || e.key.keysym.sym == SDLK_RSHIFT)) { 122 } else if (e.type == SDL_KEYUP && (e.key.keysym.sym == SDLK_LSHIFT || e.key.keysym.sym == SDLK_RSHIFT)) {
123 if (game_.isGameplayPaused()) continue;
124
87 for (int spriteId : game_.getSprites()) { 125 for (int spriteId : game_.getSprites()) {
88 Sprite& sprite = game_.getSprite(spriteId); 126 Sprite& sprite = game_.getSprite(spriteId);
89 if (sprite.controllable) { 127 if (sprite.controllable) {
@@ -93,6 +131,8 @@ void InputSystem::tick(double dt) {
93 } 131 }
94 } 132 }
95 133
134 if (game_.isGameplayPaused()) return;
135
96 Input keystate; 136 Input keystate;
97 const Uint8* state = SDL_GetKeyboardState(NULL); 137 const Uint8* state = SDL_GetKeyboardState(NULL);
98 keystate.left = state[SDL_SCANCODE_LEFT]; 138 keystate.left = state[SDL_SCANCODE_LEFT];