AVALANCHE: Partially implement Help::getMe().
The drawing of the buttons are still missing.
This commit is contained in:
parent
62ad697c9a
commit
db2baa6f06
4 changed files with 76 additions and 4 deletions
|
@ -352,6 +352,25 @@ void GraphicManager::drawNormalText(const Common::String text, FontType font, by
|
||||||
drawText(_surface, text, font, fontHeight, x, y, color);
|
drawText(_surface, text, font, fontHeight, x, y, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used in Help. Draws text double the size of the normal.
|
||||||
|
*/
|
||||||
|
void GraphicManager::drawBigText(const Common::String text, FontType font, byte fontHeight, int16 x, int16 y, Color color) {
|
||||||
|
for (uint i = 0; i < text.size(); i++) {
|
||||||
|
for (int j = 0; j < fontHeight; j++) {
|
||||||
|
byte pixel = font[(byte)text[i]][j];
|
||||||
|
byte pixelBit = 0;
|
||||||
|
for (int bit = 0; bit < 16; bit++) {
|
||||||
|
if ((bit % 2) == 0)
|
||||||
|
pixelBit = (pixel >> (bit / 2)) & 1;
|
||||||
|
for (int k = 0; k < 2; k++)
|
||||||
|
if (pixelBit)
|
||||||
|
*(byte *)_surface.getBasePtr(x + i * 16 + 16 - bit, y + j * 2 + k) = color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void GraphicManager::drawScrollText(const Common::String text, FontType font, byte fontHeight, int16 x, int16 y, Color color) {
|
void GraphicManager::drawScrollText(const Common::String text, FontType font, byte fontHeight, int16 x, int16 y, Color color) {
|
||||||
drawText(_scrolls, text, font, fontHeight, x, y, color);
|
drawText(_scrolls, text, font, fontHeight, x, y, color);
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,6 +67,7 @@ public:
|
||||||
void drawFilledRectangle(Common::Rect rect, Color color);
|
void drawFilledRectangle(Common::Rect rect, Color color);
|
||||||
void drawRectangle(Common::Rect rect, Color color);
|
void drawRectangle(Common::Rect rect, Color color);
|
||||||
void drawNormalText(const Common::String text, FontType font, byte fontHeight, int16 x, int16 y, Color color);
|
void drawNormalText(const Common::String text, FontType font, byte fontHeight, int16 x, int16 y, Color color);
|
||||||
|
void drawBigText(const Common::String text, FontType font, byte fontHeight, int16 x, int16 y, Color color); // Very similar to drawText. TODO: Try to unify the two.
|
||||||
void drawScrollText(const Common::String text, FontType font, byte fontHeight, int16 x, int16 y, Color color);
|
void drawScrollText(const Common::String text, FontType font, byte fontHeight, int16 x, int16 y, Color color);
|
||||||
void drawDigit(int index, int x, int y);
|
void drawDigit(int index, int x, int y);
|
||||||
void drawDirection(int index, int x, int y);
|
void drawDirection(int index, int x, int y);
|
||||||
|
|
|
@ -43,12 +43,64 @@ void Help::plotButton(int8 y, byte which) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Help::getMe(byte which) {
|
void Help::getMe(byte which) {
|
||||||
|
|
||||||
|
_highlightWas = 177; // Forget where the highlight was.
|
||||||
|
|
||||||
|
Common::File file;
|
||||||
|
|
||||||
|
if (!file.open("help.avd"))
|
||||||
|
error("AVALANCHE: Help: File not found: help.avd");
|
||||||
|
|
||||||
|
file.seek(which * 2);
|
||||||
|
uint16 offset = file.readUint16LE();
|
||||||
|
file.seek(offset);
|
||||||
|
|
||||||
|
Common::String title = getLine(file);
|
||||||
|
|
||||||
|
_vm->_graphics->drawFilledRectangle(Common::Rect(0, 0, 640, 200), kColorBlue);
|
||||||
|
_vm->_graphics->drawFilledRectangle(Common::Rect(8, 40, 450, 200), kColorWhite);
|
||||||
|
|
||||||
|
byte index = file.readByte();
|
||||||
|
plotButton(-177, index);
|
||||||
|
|
||||||
|
// Plot the title:
|
||||||
|
_vm->_graphics->drawNormalText(title, _vm->_font, 8, 629 - 8 * title.size(), 26, kColorBlack);
|
||||||
|
_vm->_graphics->drawNormalText(title, _vm->_font, 8, 630 - 8 * title.size(), 25, kColorCyan);
|
||||||
|
|
||||||
|
_vm->_graphics->drawBigText("help!", _vm->_font, 8, 549, 1, kColorBlack);
|
||||||
|
_vm->_graphics->drawBigText("help!", _vm->_font, 8, 550, 0, kColorCyan);
|
||||||
|
|
||||||
|
byte y = 0;
|
||||||
|
do {
|
||||||
|
Common::String line = getLine(file);
|
||||||
|
if (!line.empty()) {
|
||||||
|
if (line.compareTo(Common::String('!')) == 0) // End of the help text is signalled with a '!'.
|
||||||
|
break;
|
||||||
|
if (line[0] == '\\') {
|
||||||
|
line.deleteChar(0);
|
||||||
|
_vm->_graphics->drawNormalText(line, _vm->_font, 8, 16, 41 + y * 10, kColorRed);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
_vm->_graphics->drawNormalText(line, _vm->_font, 8, 16, 41 + y * 10, kColorBlack);
|
||||||
|
}
|
||||||
|
y++;
|
||||||
|
} while (true);
|
||||||
|
|
||||||
warning("STUB: Help::getMe()");
|
warning("STUB: Help::getMe()");
|
||||||
|
|
||||||
|
_vm->_graphics->refreshScreen();
|
||||||
|
|
||||||
|
file.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
Common::String Help::getLine() {
|
Common::String Help::getLine(Common::File &file) {
|
||||||
warning("STUB: Help::getLine()");
|
Common::String line;
|
||||||
return "STUB: Help::getLine()";
|
byte length = file.readByte();
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
char c = file.readByte();
|
||||||
|
line += (c ^ 177);
|
||||||
|
}
|
||||||
|
return line;
|
||||||
}
|
}
|
||||||
|
|
||||||
byte Help::checkMouse() {
|
byte Help::checkMouse() {
|
||||||
|
|
|
@ -51,7 +51,7 @@ private:
|
||||||
|
|
||||||
void plotButton(int8 y, byte which);
|
void plotButton(int8 y, byte which);
|
||||||
void getMe(byte which);
|
void getMe(byte which);
|
||||||
Common::String getLine(); // It was a nested function in getMe().
|
Common::String getLine(Common::File &file); // It was a nested function in getMe().
|
||||||
byte checkMouse(); // Returns clicked-on button, or 0 if none.
|
byte checkMouse(); // Returns clicked-on button, or 0 if none.
|
||||||
void continueHelp();
|
void continueHelp();
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue