PRINCE: Option window texts drawing and highlighting

This commit is contained in:
lukaslw 2014-06-12 23:57:45 +02:00
parent 5163d6ce4e
commit 8fd44cbbf3
3 changed files with 135 additions and 3 deletions

View File

@ -0,0 +1,84 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
namespace Prince {
// Mazovia coding (with U2 negation)
const char invOptionsTextPL[5][18] = {
{ 'O', 'b', 'e', 'j', 'r', 'z', 'y', 'j', '\0' },
{ 'U', -89, 'y', 'j', '\0' },
{ 'O', 't', 'w', -94, 'r', 'z', '/', 'P', 'c', 'h', 'n', 'i', 'j', '\0' },
{ 'Z', 'a', 'm', 'k', 'n', 'i', 'j', '/', 'P', 'o', 'c', 'i', -122, 'g', 'n', 'i', 'j', '\0' },
{ 'D', 'a', 'j', '\0' }
};
// TODO
const char *invOptionsTextDE[] = {
"Anschauen",
"Benutzen",
"Öffnen/Stoßen",
"Schließen/Ziehen",
"Geben"
};
const char *invOptionsTextEN[] = {
"Examine",
"Use",
"Open/Push",
"Close/Pull",
"Give"
};
const char optionsTextPL[7][18] = {
{ 'P', 'o', 'd', 'e', 'j', 'd', -90, '\0' },
{ 'O', 'b', 'e', 'j', 'r', 'z', 'y', 'j', '\0' },
{ 'Z', 'a', 'b', 'i', 'e', 'r', 'z', '\0' },
{ 'U', -89, 'y', 'j' },
{ 'O', 't', 'w', -94, 'r', 'z', '/', 'P', 'c', 'h', 'n', 'i', 'j', '\0' },
{ 'Z', 'a', 'm', 'k', 'n', 'i', 'j', '/', 'P', 'o', 'c', 'i', -122, 'g', 'n', 'i', 'j', '\0' },
{ 'P', 'o', 'r', 'o', 'z', 'm', 'a', 'w', 'i', 'a', 'j', '\0' }
};
// TODO
const char *optionsTextDE[] = {
"Hingehen",
"Anschauen",
"Wegnehmen",
"Benutzen",
"Öffnen/Stoßen",
"Schließen/Ziehen",
"Ansprechen"
};
const char *optionsTextEN[] = {
"Walk to",
"Examine",
"Pick up",
"Use",
"Open/Push",
"Close/Pull",
"Talk to"
};
}

View File

@ -60,6 +60,7 @@
#include "prince/hero.h"
#include "prince/resource.h"
#include "prince/animation.h"
#include "prince/option_text.h"
namespace Prince {
@ -82,9 +83,10 @@ PrinceEngine::PrinceEngine(OSystem *syst, const PrinceGameDescription *gameDesc)
_invLineX(134), _invLineY(176), _invLine(5), _invLines(3), _invLineW(70), _invLineH(76), _maxInvW(72), _maxInvH(76),
_invLineSkipX(2), _invLineSkipY(3), _showInventoryFlag(false), _inventoryBackgroundRemember(false),
_mst_shadow(0), _mst_shadow2(0), _candleCounter(0), _invX1(53), _invY1(18), _invWidth(536), _invHeight(438),
_invCurInside(false), _optionsFlag(false), _optionEnabled(0), _invOptionsNumber(5), _invExamY(120),
_invCurInside(false), _optionsFlag(false), _optionEnabled(0), _invExamY(120),
_optionsMob(0), _currentPointerNumber(1), _selectedMob(0), _selectedItem(0), _selectedMode(0),
_optionsWidth(210), _optionsHeight(170), _invOptionsWidth(210), _invOptionsHeight(130) {
_optionsWidth(210), _optionsHeight(170), _invOptionsWidth(210), _invOptionsHeight(130), _optionsStep(20),
_invOptionsStep(20), _optionsNumber(7), _invOptionsNumber(5), _optionsColor1(0xFF00EC), _optionsColor2(0xFF00FC) {
// Debug/console setup
DebugMan.addDebugChannel(DebugChannel::kScript, "script", "Prince Script debug channel");
@ -1666,6 +1668,47 @@ void PrinceEngine::checkInvOptions() {
return;
}
_graph->drawAsShadowSurface(_graph->_screenForInventory, _optionsX, _optionsY, _optionsPicInInventory, _graph->_shadowTable50);
_optionEnabled = -1;
int optionsYCord = mousePos.y - (_optionsY + 16);
if (optionsYCord >= 0) {
int selectedOptionNr = optionsYCord / _invOptionsStep;
if (selectedOptionNr < _optionsNumber) {
_optionEnabled = selectedOptionNr;
}
}
//NoBackgroundFlag = 1;
//int eax = _optionsX + _invOptionsWidth / 2;
//int ecx = _optionsNumber;
int optionsColor;
int textY = _optionsY + 16;
for (int i = 0; i < _invOptionsNumber; i++) {
if (i != _optionEnabled) {
optionsColor = _optionsColor1;
} else {
optionsColor = _optionsColor2;
}
Common::String invText;
switch(getLanguage()) {
case Common::PL_POL:
invText = invOptionsTextPL[i];
break;
case Common::DE_DEU:
invText = invOptionsTextDE[i];
break;
case Common::EN_ANY:
invText = invOptionsTextEN[i];
break;
};
uint16 textW = 0;
for (uint16 i = 0; i < invText.size(); i++) {
textW += _font->getCharWidth(invText[i]);
}
uint16 textX = _optionsX + _optionsWidth / 2 - textW / 2;
_font->drawString(_graph->_screenForInventory, invText, textX, textY, _graph->_screenForInventory->w, optionsColor);
textY += _invOptionsStep;
}
//NoBackgroundFlag = 1;
}
}

View File

@ -295,9 +295,14 @@ public:
int _optionsHeight;
int _invOptionsWidth;
int _invOptionsHeight;
int _optionsStep;
int _invOptionsStep;
int _optionsNumber;
int _invOptionsNumber;
int _optionsColor1; // color for non-selected options
int _optionsColor2; // color for selected option
bool _showInventoryFlag;
int _invOptionsNumber;
int _invExamY;
bool _inventoryBackgroundRemember;
int _invLineX;