diff options
author | Kelly Rauchenberger <fefferburbia@gmail.com> | 2021-02-21 17:56:17 -0500 |
---|---|---|
committer | Kelly Rauchenberger <fefferburbia@gmail.com> | 2021-02-21 17:56:17 -0500 |
commit | 5df0d0616ee3996add0b14e0fb0becd6257d04a2 (patch) | |
tree | 19bf067462ea04abf500e0427d3daeb3a39434ee /src/input_system.cpp | |
parent | ecbe17b582803aaeaa9ccee88a3d093ff93a6cd3 (diff) | |
download | tanetane-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.cpp | 44 |
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 { | |||
16 | void InputSystem::tick(double dt) { | 16 | void 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]; |