#include "input_system.h" #include "game.h" #include "character_system.h" #include "message_system.h" #include "script_system.h" #include "transform_system.h" #include "animation_system.h" #include "menu_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) { game_.quit(); return; } else if (e.type == SDL_TEXTINPUT) { debugText_.append(e.text.text); } else if (e.type == SDL_KEYDOWN) { if (e.key.keysym.sym == SDLK_ESCAPE) { if (debugConsole_) { debugConsole_ = false; game_.unpauseGameplay(); SDL_StopTextInput(); debugText_.clear(); } else { if (game_.getSystem().isMenuOpen()) { game_.getSystem().closePauseMenu(); } else if (!game_.isGameplayPaused()) { game_.getSystem().openPauseMenu(); } } } else if (e.key.keysym.sym == SDLK_BACKQUOTE) { #ifdef TANETANE_DEBUG if (!debugConsole_ && !game_.isGameplayPaused()) { debugConsole_ = true; game_.pauseGameplay(); SDL_StartTextInput(); debugText_.clear(); } #endif } else if (debugConsole_ && e.key.keysym.sym == SDLK_RETURN) { game_.getSystem().runDebugScript(debugText_); debugText_.clear(); } else if (debugConsole_ && e.key.keysym.sym == SDLK_BACKSPACE) { // Make sure to keep the backtick/heart. if (!debugText_.empty()) { debugText_.pop_back(); } } else if (debugConsole_ && e.key.keysym.sym == SDLK_v && SDL_GetModState() & (KMOD_CTRL | KMOD_GUI)) { // CTRL-V or CMD-V bc I have a Mac thanks char* clipboardText = SDL_GetClipboardText(); debugText_.append(clipboardText); SDL_free(clipboardText); } else if (!debugConsole_ && e.key.keysym.sym == SDLK_m) { if (game_.getMixer().isMusicMuted()) { game_.getMixer().unmuteMusic(); } else { game_.getMixer().muteMusic(); } } else if (e.key.keysym.sym == SDLK_LSHIFT || e.key.keysym.sym == SDLK_RSHIFT) { if (game_.isGameplayPaused()) continue; for (int spriteId : game_.getSprites()) { Sprite& sprite = game_.getSprite(spriteId); if (sprite.controllable) { game_.getSystem().beginCrouch(spriteId); } } } else if (e.key.keysym.sym == SDLK_SPACE) { if (game_.getSystem().isMenuOpen()) { game_.getSystem().activateOption(); } if (game_.isGameplayPaused()) continue; // If there is text on screen, try to advance it. if (game_.getSystem().getCutsceneBarsProgress() != 0.0) { game_.getSystem().advanceText(); } else { // Otherwise, check if there is a sprite in front of the player. bool inFrontOfSomething = false; bool activated = false; for (int spriteId : game_.getSprites()) { Sprite& sprite = game_.getSprite(spriteId); if (sprite.controllable) { // Interacting with objects always uses Lucas's movement speed. vec2i checkLoc = sprite.loc + (unitVecInDirection(sprite.dir) * LUCAS_MOVEMENT_SPEED); CollisionResult collision = game_.getSystem().checkCollision(spriteId, sprite.loc, checkLoc, sprite.dir); if (collision.blocked) { inFrontOfSomething = true; } // If there is a sprite to be interacted with, rotate that sprite so it is facing the player. // Then, run its interaction script if present. for (int colliderSpriteId : collision.colliders) { game_.getSystem().setSpriteDirection(colliderSpriteId, oppositeDirection(sprite.dir)); Sprite& collider = game_.getSprite(colliderSpriteId); if (!collider.interactionScript.empty()) { game_.getSystem().runScript(game_.getMap().getName(), collider.interactionScript);
name: "Rainbow Orange"
panel_display_name: "Rainbow"
panels {
  name: "THEME"
  path: "Panels/Smiley Rooms/orange2"
  clue: "theme"
  answer: "fish"
  symbols: QUESTION
  display_name: "THEME (Orange)"
}