diff options
-rw-r--r-- | engines/prince/prince.cpp | 50 | ||||
-rw-r--r-- | engines/prince/prince.h | 4 | ||||
-rw-r--r-- | engines/prince/script.cpp | 2 |
3 files changed, 46 insertions, 10 deletions
diff --git a/engines/prince/prince.cpp b/engines/prince/prince.cpp index a425510cef..e9847b7f0d 100644 --- a/engines/prince/prince.cpp +++ b/engines/prince/prince.cpp @@ -87,7 +87,7 @@ PrinceEngine::PrinceEngine(OSystem *syst, const PrinceGameDescription *gameDesc) _optionsMob(0), _currentPointerNumber(1), _selectedMob(0), _selectedItem(0), _selectedMode(0), _optionsWidth(210), _optionsHeight(170), _invOptionsWidth(210), _invOptionsHeight(130), _optionsStep(20), _invOptionsStep(20), _optionsNumber(7), _invOptionsNumber(5), _optionsColor1(0xFF00EC), _optionsColor2(0xFF00FC), - _dialogWidth(600), _dialogHeight(0) { + _dialogWidth(600), _dialogHeight(0), _dialogColor1(0xFF00DC), _dialogColor2(0xFF00DF) { // Debug/console setup DebugMan.addDebugChannel(DebugChannel::kScript, "script", "Prince Script debug channel"); @@ -1841,7 +1841,7 @@ void PrinceEngine::checkInvOptions() { }; uint16 textW = getTextWidth(invText.c_str()); uint16 textX = _optionsX + _invOptionsWidth / 2 - textW / 2; - _font->drawString(_graph->_screenForInventory, invText, textX, textY, textW, optionsColor); + _font->drawString(_graph->_screenForInventory, invText, textX, textY, _graph->_screenForInventory->w, optionsColor); textY += _invOptionsStep; } } @@ -1946,7 +1946,7 @@ void PrinceEngine::createDialogBox(Common::Array<DialogLine> &dialogData) { _dialogImage->fillRect(dBoxRect, _graph->kShadowColor); } -void PrinceEngine::runDialog() { +void PrinceEngine::runDialog(Common::Array<DialogLine> &dialogData) { while (!shouldQuit()) { @@ -1956,6 +1956,36 @@ void PrinceEngine::runDialog() { int dialogY = 460 - _dialogHeight; _graph->drawAsShadowSurface(_graph->_frontScreen, dialogX, dialogY, _dialogImage, _graph->_shadowTable50); + int dialogSkipLeft = 14; + int dialogSkipUp = 10; + int lineSpace = 10; + + int dialogTextX = dialogX + dialogSkipLeft; + int dialogTextY = dialogY + dialogSkipUp; + + Common::Point mousePos = _system->getEventManager()->getMousePos(); + + int dialogSelected = -1; + + for (uint i = 0; i < dialogData.size(); i++) { + int actualColor = _dialogColor1; + + Common::Array<Common::String> lines; + _font->wordWrapText(dialogData[i]._line, _graph->_frontScreen->w, lines); + + Common::Rect dialogOption(dialogTextX, dialogTextY - dialogSkipUp / 2, dialogX + _dialogWidth - dialogSkipLeft, dialogTextY + lines.size() * _font->getFontHeight() + dialogSkipUp / 2 - 1); + if (dialogOption.contains(mousePos)) { + actualColor = _dialogColor2; + } + + for (uint j = 0; j < lines.size(); j++) { + Common::String dialogText = dialogData[i]._line; + _font->drawString(_graph->_frontScreen, dialogText, dialogTextX, dialogTextY, _graph->_frontScreen->w, actualColor); + dialogTextY += _font->getFontHeight(); + } + dialogTextY += lineSpace; + } + Common::Event event; Common::EventManager *eventMan = _system->getEventManager(); while (eventMan->pollEvent(event)) { @@ -1993,25 +2023,29 @@ void PrinceEngine::runDialog() { delete _dialogImage; } -// Debug +// Test void PrinceEngine::testDialog() { Common::Array<DialogLine> tempDialogBox; DialogLine tempDialogLine; + // dialBox 0 create: for (int i = 0; i < 4; i++) { tempDialogLine._nr = i; tempDialogLine._line = ""; - tempDialogLine._line += "This is " + i; - tempDialogLine._line += " dialog line."; tempDialogBox.push_back(tempDialogLine); } + tempDialogBox[0]._line = "Co to za miejsce?"; + tempDialogBox[1]._line = "Prosze, musi mi pan pomoc wydostac sie stad!"; + tempDialogBox[2]._line = "Tu chyba nie jest zbyt bezpiecznie, prawda?"; + tempDialogBox[3]._line = "Nie chce przeszkadzac."; + _dialogBoxList.push_back(tempDialogBox); - //dialogBox 0 - test: + //dialogBox 0 draw: createDialogBox(_dialogBoxList[0]); if (_dialogBoxList[0].size() != 0) { changeCursor(1); - runDialog(); + runDialog(_dialogBoxList[0]); changeCursor(0); } } diff --git a/engines/prince/prince.h b/engines/prince/prince.h index d98bfacc56..7cdd611cf9 100644 --- a/engines/prince/prince.h +++ b/engines/prince/prince.h @@ -348,10 +348,12 @@ public: int _dialogWidth; int _dialogHeight; + int _dialogColor1; // color for non-selected options + int _dialogColor2; // color for selected option Graphics::Surface *_dialogImage; void createDialogBox(Common::Array<DialogLine> &dialogData); - void runDialog(); + void runDialog(Common::Array<DialogLine> &dialogData); void testDialog(); int testAnimNr; diff --git a/engines/prince/script.cpp b/engines/prince/script.cpp index c559d3f54c..29566b7fb7 100644 --- a/engines/prince/script.cpp +++ b/engines/prince/script.cpp @@ -1248,7 +1248,7 @@ void Interpreter::O_SHOWDIALOGBOX() { _flags->setFlagValue(Flags::DIALINES, dialogLines); if (dialogLines != 0) { _vm->changeCursor(1); - _vm->runDialog(); + _vm->runDialog(_vm->_dialogBoxList[box]); _vm->changeCursor(0); } } |