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 = "", |