diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/message_system.cpp | 31 | ||||
| -rw-r--r-- | src/message_system.h | 3 |
2 files changed, 26 insertions, 8 deletions
| diff --git a/src/message_system.cpp b/src/message_system.cpp index f9803ed..15d9847 100644 --- a/src/message_system.cpp +++ b/src/message_system.cpp | |||
| @@ -52,7 +52,7 @@ void MessageSystem::tick(double dt) { | |||
| 52 | // If both lines are totally revealed, see if we can scroll up a line. | 52 | // If both lines are totally revealed, see if we can scroll up a line. |
| 53 | // This is doable as long as the next line isn't the sentinel value that | 53 | // This is doable as long as the next line isn't the sentinel value that |
| 54 | // means an A press is required. | 54 | // means an A press is required. |
| 55 | if (!lines_.empty() && lines_.front() != "\n") { | 55 | if (!lines_.empty() && lines_.front() != "\f") { |
| 56 | if (linesToShow_.size() == 2) { | 56 | if (linesToShow_.size() == 2) { |
| 57 | linesToShow_.pop_front(); | 57 | linesToShow_.pop_front(); |
| 58 | } | 58 | } |
| @@ -105,15 +105,24 @@ void MessageSystem::displayMessage(std::string_view msg, std::string speakerName | |||
| 105 | speaker_ = speakerType; | 105 | speaker_ = speakerType; |
| 106 | speakerName_ = speakerName; | 106 | speakerName_ = speakerName; |
| 107 | 107 | ||
| 108 | bool shouldAddBlank = false; | ||
| 109 | |||
| 108 | auto lineChunks = splitStr<std::list<std::string>>(std::string(msg), "\n"); | 110 | auto lineChunks = splitStr<std::list<std::string>>(std::string(msg), "\n"); |
| 109 | for (const std::string& text : lineChunks) { | 111 | for (std::string text : lineChunks) { |
| 112 | if (text.substr(0, 1) == "\f") { | ||
| 113 | text.erase(0, 1); | ||
| 114 | shouldAddBlank = false; | ||
| 115 | |||
| 116 | if (lines_.empty() || lines_.back() != "\f") { | ||
| 117 | lines_.push_back("\f"); | ||
| 118 | } | ||
| 119 | } | ||
| 120 | |||
| 110 | auto words = splitStr<std::list<std::string>>(text, " "); | 121 | auto words = splitStr<std::list<std::string>>(text, " "); |
| 111 | 122 | ||
| 112 | std::string curLine; | 123 | std::string curLine; |
| 113 | int curWidth = 0; | 124 | int curWidth = 0; |
| 114 | bool firstWord = true; | 125 | bool firstWord = true; |
| 115 | bool shouldAddBlank = false; | ||
| 116 | |||
| 117 | // I'm gonna be frank and admit it: I'm not gonna take hyphenation into | 126 | // I'm gonna be frank and admit it: I'm not gonna take hyphenation into |
| 118 | // consideration. Please don't write any words that are wider than the | 127 | // consideration. Please don't write any words that are wider than the |
| 119 | // textbox. | 128 | // textbox. |
| @@ -136,7 +145,7 @@ void MessageSystem::displayMessage(std::string_view msg, std::string speakerName | |||
| 136 | 145 | ||
| 137 | if (shouldAddBlank) { | 146 | if (shouldAddBlank) { |
| 138 | shouldAddBlank = false; | 147 | shouldAddBlank = false; |
| 139 | lines_.push_back("\n"); | 148 | lines_.push_back("\f"); |
| 140 | } else { | 149 | } else { |
| 141 | shouldAddBlank = true; | 150 | shouldAddBlank = true; |
| 142 | } | 151 | } |
| @@ -152,14 +161,20 @@ void MessageSystem::displayMessage(std::string_view msg, std::string speakerName | |||
| 152 | } | 161 | } |
| 153 | 162 | ||
| 154 | lines_.push_back(curLine); | 163 | lines_.push_back(curLine); |
| 155 | lines_.push_back("\n"); | 164 | |
| 165 | if (shouldAddBlank) { | ||
| 166 | shouldAddBlank = false; | ||
| 167 | lines_.push_back("\f"); | ||
| 168 | } else { | ||
| 169 | shouldAddBlank = true; | ||
| 170 | } | ||
| 156 | } | 171 | } |
| 157 | 172 | ||
| 158 | if (linesToShow_.empty()) { | 173 | if (linesToShow_.empty()) { |
| 159 | linesToShow_.push_back(MessageLine { .text = lines_.front() }); | 174 | linesToShow_.push_back(MessageLine { .text = lines_.front() }); |
| 160 | lines_.pop_front(); | 175 | lines_.pop_front(); |
| 161 | 176 | ||
| 162 | if (lines_.front() != "\n") { | 177 | if (lines_.front() != "\f") { |
| 163 | linesToShow_.push_back(MessageLine { .text = lines_.front() }); | 178 | linesToShow_.push_back(MessageLine { .text = lines_.front() }); |
| 164 | lines_.pop_front(); | 179 | lines_.pop_front(); |
| 165 | } | 180 | } |
| @@ -182,7 +197,7 @@ void MessageSystem::advanceText() { | |||
| 182 | return; | 197 | return; |
| 183 | } | 198 | } |
| 184 | 199 | ||
| 185 | if (lines_.front() != "\n") { | 200 | if (lines_.front() != "\f") { |
| 186 | return; | 201 | return; |
| 187 | } | 202 | } |
| 188 | 203 | ||
| diff --git a/src/message_system.h b/src/message_system.h index 85ecd65..155f9c6 100644 --- a/src/message_system.h +++ b/src/message_system.h | |||
| @@ -33,6 +33,9 @@ public: | |||
| 33 | 33 | ||
| 34 | void hideCutsceneBars(); | 34 | void hideCutsceneBars(); |
| 35 | 35 | ||
| 36 | // Adds text to the message queue. Separate lines with \n. | ||
| 37 | // \f is a special character -- put it after a \n to indicate that a button | ||
| 38 | // press is required to advance text. | ||
| 36 | void displayMessage( | 39 | void displayMessage( |
| 37 | std::string_view msg, | 40 | std::string_view msg, |
| 38 | std::string speakerName = "", | 41 | std::string speakerName = "", |
