diff options
author | Paul Gilbert | 2014-02-22 08:39:44 -0500 |
---|---|---|
committer | Paul Gilbert | 2014-02-22 08:39:44 -0500 |
commit | 54c4515232ec26397903373ed46e9492223ce2f2 (patch) | |
tree | 1dc0425af979ac0923864f26b2da96053a979bf3 /engines/mads/nebular | |
parent | 9f1416c6a358eb1dc860ff1176ae89721d82fc50 (diff) | |
download | scummvm-rg350-54c4515232ec26397903373ed46e9492223ce2f2.tar.gz scummvm-rg350-54c4515232ec26397903373ed46e9492223ce2f2.tar.bz2 scummvm-rg350-54c4515232ec26397903373ed46e9492223ce2f2.zip |
MADS: Beginnings of dialog class hierarchy
Diffstat (limited to 'engines/mads/nebular')
-rw-r--r-- | engines/mads/nebular/dialogs_nebular.cpp | 129 | ||||
-rw-r--r-- | engines/mads/nebular/dialogs_nebular.h | 71 |
2 files changed, 2 insertions, 198 deletions
diff --git a/engines/mads/nebular/dialogs_nebular.cpp b/engines/mads/nebular/dialogs_nebular.cpp index 85b06ce592..76b6162d14 100644 --- a/engines/mads/nebular/dialogs_nebular.cpp +++ b/engines/mads/nebular/dialogs_nebular.cpp @@ -31,133 +31,6 @@ namespace MADS { namespace Nebular { -TextDialog::TextDialog(MADSEngine *vm, const Common::String &fontName, - const Common::Point &pos, int maxChars) { - _vm = vm; - _fontName = fontName; - _position = pos; - - _vm->_font->setFont(FONT_INTERFACE); - _vm->_font->setColors(TEXTDIALOG_FONT, TEXTDIALOG_FONT, TEXTDIALOG_FONT, TEXTDIALOG_FONT); - - _innerWidth = (_vm->_font->maxWidth() + 1) * maxChars; - _width = _innerWidth + 10; - _lineSize = maxChars * 2; - _lineWidth = 0; - _currentX = 0; - _numLines = 0; - Common::fill(&_lineXp[0], &_lineXp[TEXT_DIALOG_MAX_LINES], 0); - - Common::copy(&_vm->_palette->_mainPalette[TEXTDIALOG_F8 * 3], - &_vm->_palette->_mainPalette[TEXTDIALOG_F8 * 3 + 8 * 3], - &_savedPalette[0]); - Palette::setGradient(_vm->_palette->_mainPalette, TEXTDIALOG_F8, 2, 0x24, 0x20); - Palette::setGradient(_vm->_palette->_mainPalette, TEXTDIALOG_FA, 2, 0x27, 0x1C); - Palette::setGradient(_vm->_palette->_mainPalette, TEXTDIALOG_FC, 2, 0x24, 0x20); - Palette::setGradient(_vm->_palette->_mainPalette, TEXTDIALOG_FE, 1, 0x37, 0x37); - - _vm->_palette->setPalette(_vm->_palette->_mainPalette + (TEXTDIALOG_F8 * 3), - TEXTDIALOG_F8, 8); -} - -TextDialog::~TextDialog() { -} - -void TextDialog::addLine(const Common::String &line, bool underline) { - if (_lineWidth > 0 || _currentX > 0) - incNumLines(); - - int stringWidth = _vm->_font->getWidth(line); - if (stringWidth >= _innerWidth || (int)line.size() >= _lineSize) { - wordWrap(line); - } else { - _lineXp[_numLines] = (_innerWidth / 2) - (stringWidth / 2); - _lines[_numLines] = line; - - if (underline) - underlineLine(); - } - - incNumLines(); -} - -void TextDialog::underlineLine() { - _lineXp[_numLines] |= 0x80; -} - -void TextDialog::incNumLines() { - _lineWidth = 0; - _currentX = 0; - if (++_numLines == TEXT_DIALOG_MAX_LINES) - error("Exceeded text dialog line max"); -} - -void TextDialog::wordWrap(const Common::String &line) { - Common::String tempLine; - - if (!line.empty()) { - const char *srcP = line.c_str(); - - do { - tempLine = ""; - bool endWord = false; - bool newLine = false; - bool continueFlag = true; - - do { - if (!*srcP) { - continueFlag = false; - } else { - tempLine += *srcP; - - if (*srcP == 10) { - continueFlag = false; - newLine = true; - ++srcP; - tempLine.deleteLastChar(); - } else if (*srcP == ' ') { - ++srcP; - endWord = true; - } else if (!endWord) { - ++srcP; - } else { - tempLine.deleteLastChar(); - continueFlag = false; - } - } - } while (continueFlag); - - if (tempLine.hasSuffix(" ")) - tempLine.deleteLastChar(); - - Common::String tempLine2; - if (_currentX > 0) - tempLine2 += ' '; - tempLine2 += tempLine; - - int lineWidth = _vm->_font->getWidth(tempLine2, 1); - if (((_currentX + (int)tempLine2.size()) > _lineSize) || - ((_lineWidth + lineWidth) > _innerWidth)) { - incNumLines(); - appendLine(tempLine); - } else { - appendLine(tempLine2); - } - - if (newLine) - incNumLines(); - } while (*srcP); - } -} - -void TextDialog::appendLine(const Common::String &line) { - _currentX += line.size(); - _lineWidth += _vm->_font->getWidth(line, 1); - _lines[_numLines] += line; -} - -/*------------------------------------------------------------------------*/ - bool CopyProtectionDialog::show(MADSEngine *vm) { CopyProtectionDialog *dlg = new CopyProtectionDialog(vm, false); @@ -166,7 +39,7 @@ bool CopyProtectionDialog::show(MADSEngine *vm) { } CopyProtectionDialog::CopyProtectionDialog(MADSEngine *vm, bool priorAnswerWrong): - TextDialog(vm, FONT_INTERFACE_MADS, Common::Point(-1, -1), 32) { + TextDialog(vm, FONT_INTERFACE, Common::Point(-1, -1), 32) { getHogAnusEntry(_hogEntry); if (priorAnswerWrong) { diff --git a/engines/mads/nebular/dialogs_nebular.h b/engines/mads/nebular/dialogs_nebular.h index 3e28ee39b3..7a63397603 100644 --- a/engines/mads/nebular/dialogs_nebular.h +++ b/engines/mads/nebular/dialogs_nebular.h @@ -25,81 +25,12 @@ #include "common/scummsys.h" #include "mads/game.h" +#include "mads/dialogs.h" namespace MADS { namespace Nebular { -enum { - TEXTDIALOG_F8 = 0XF8, - TEXTDIALOG_F9 = 0XF8, - TEXTDIALOG_FA = 0XF8, - TEXTDIALOG_FB = 0XF8, - TEXTDIALOG_FC = 0XF8, - TEXTDIALOG_FD = 0XF8, - TEXTDIALOG_FE = 0XF8, - TEXTDIALOG_FONT = 0 -}; - -#define TEXT_DIALOG_MAX_LINES 20 - -class TextDialog { -private: - /** - * Increments the number of text lines the text dialog uses - */ - void incNumLines(); - - /** - * Flags the previously added line to be underlined - */ - void underlineLine(); - - /** - * Append text to the currently end line. - */ - void appendLine(const Common::String &line); -protected: - MADSEngine *_vm; - Common::Point _position; - Common::String _fontName; - int _width; - int _innerWidth; - int _lineWidth; - int _currentX; - int _numLines; - int _lineSize; - Common::String _lines[TEXT_DIALOG_MAX_LINES]; - int _lineXp[TEXT_DIALOG_MAX_LINES]; - byte _savedPalette[8 * 3]; - - /** - * Add a new line to the dialog - */ - void addLine(const Common::String &line, bool underline = false); - - /** - * Adds one or more lines, word wrapping the passed text - */ - void wordWrap(const Common::String &line); -public: - /** - * Constructor - * @param vm Engine reference - * @param fontName Font to use for display - * @param pos Position for window top-left - * @param maxChars Horizontal width of window in characters - */ - TextDialog(MADSEngine *vm, const Common::String &fontName, const Common::Point &pos, - int maxChars); - - /** - * Destructor - */ - ~TextDialog(); - -}; - struct HOGANUS { int _bookId; int _pageNum; |