From 871943d6a90bdb92b3cc495d4d927199611f8c6b Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Thu, 4 Feb 2021 20:45:18 -0500 Subject: Added text boxes Text now reveals itself and scrolls! Yay! It even plays speaker beeps. TODO: the arror indicating an A press is needed. Bullets on lines that need bullets. The header that says who the speaker is, if relevant. --- src/renderer.cpp | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) (limited to 'src/renderer.cpp') diff --git a/src/renderer.cpp b/src/renderer.cpp index 2c6cf5c..b22c316 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -1,4 +1,5 @@ #include "renderer.h" +#include #include "consts.h" #include "game.h" #include "map.h" @@ -153,6 +154,33 @@ void Renderer::render(Game& game) { int bottomBarHeight = 36.0 * game.getSystem().getCutsceneBarsProgress(); SDL_Rect bottomBar { 0, CANVAS_HEIGHT - bottomBarHeight, CANVAS_WIDTH, bottomBarHeight }; SDL_RenderFillRect(ren_.get(), &bottomBar); + + if (game.getSystem().getCutsceneBarsProgress() == 1.0 && + !game.getSystem().getLines().empty()) { + int lineIndex = 0; + for (const MessageSystem::MessageLine& line : game.getSystem().getLines()) { + if (messageLines_[lineIndex].line != line.text) { + renderMessageLine(lineIndex, line.text, game); + } + + // 18x, 127y1, 143y2 + if (line.charsRevealed > 0) { + SDL_Rect srcRect { + 0, 0, messageLines_[lineIndex].charIndexToWidth[line.charsRevealed], + game.getFont().getCharacterHeight() + }; + SDL_Rect destRect { + 18, + 127 + 16 * lineIndex, + srcRect.w, + srcRect.h }; + + SDL_RenderCopy(ren_.get(), messageLines_[lineIndex].renderedTex.get(), &srcRect, &destRect); + } + + lineIndex++; + } + } } SDL_SetRenderTarget(ren_.get(), nullptr); @@ -175,3 +203,46 @@ int Renderer::loadImageFromFile(std::string_view filename) { return texId; } + +void Renderer::renderMessageLine(int lineIndex, const std::string& text, Game& game) { + MessageCache& line = messageLines_[lineIndex]; + line.line = text; + + line.renderedTex.reset( + SDL_CreateTexture( + ren_.get(), + SDL_PIXELFORMAT_RGBA8888, + SDL_TEXTUREACCESS_TARGET, + MESSAGE_TEXT_WIDTH, + game.getFont().getCharacterHeight())); + + SDL_SetTextureBlendMode(line.renderedTex.get(), SDL_BLENDMODE_BLEND); + + SDL_SetRenderTarget(ren_.get(), line.renderedTex.get()); + SDL_SetRenderDrawBlendMode(ren_.get(), SDL_BLENDMODE_BLEND); + SDL_SetRenderDrawColor(ren_.get(), 0, 0, 0, 0); + SDL_RenderClear(ren_.get()); + + line.charIndexToWidth.clear(); + line.charIndexToWidth.push_back(0); + + int length = 0; + + for (int i=0; i