IHNM: Button textures are loaded correctly now for buttons in the option and quit panel. Also, implemented the voices/subtitles toggle functionality and fixed widget placement a bit

svn-id: r27388
This commit is contained in:
Filippos Karapetis 2007-06-13 19:41:27 +00:00
parent 7af7e3f192
commit 0d4a3c28d9
11 changed files with 101 additions and 35 deletions

View file

@ -142,6 +142,8 @@ Interface::Interface(SagaEngine *vm) : _vm(vm) {
// Main panel sprites
_vm->_sprite->loadList(_vm->getResourceDescription()->mainPanelSpritesResourceId, _mainPanel.sprites);
// Option panel sprites
_vm->_sprite->loadList(_vm->getResourceDescription()->optionPanelSpritesResourceId, _optionPanel.sprites);
if (_vm->getGameType() == GType_ITE) {
_vm->_sprite->loadList(_vm->getResourceDescription()->defaultPortraitsResourceId, _defPortraits);
@ -755,7 +757,8 @@ void Interface::drawOption() {
PanelButton *panelButton;
Point textPoint;
Point point;
int spritenum = 0;
backBuffer = _vm->_gfx->getBackBuffer();
_optionPanel.getRect(rect);
@ -764,16 +767,13 @@ void Interface::drawOption() {
for (i = 0; i < _optionPanel.buttonsCount; i++) {
panelButton = &_optionPanel.buttons[i];
// TODO: This probably works for the button background, but the resources are still not loeaded
// (_optionPanel.sprites)
/*
point.x = _optionPanel.x + panelButton->xOffset;
point.y = _optionPanel.y + panelButton->yOffset;
_vm->_sprite->draw(backBuffer, _vm->getDisplayClip(), _optionPanel.sprites, i, point, 256);
*/
if (panelButton->type == kPanelButtonOption) {
drawPanelButtonText(backBuffer, &_optionPanel, panelButton);
if (_vm->getGameType() == GType_ITE) {
drawPanelButtonText(backBuffer, &_optionPanel, panelButton);
} else {
drawPanelButtonText(backBuffer, &_optionPanel, panelButton, spritenum);
spritenum += 2; // 2 sprites per button (lit and unlit)
}
}
if (panelButton->type == kPanelButtonOptionText) {
drawPanelText(backBuffer, &_optionPanel, panelButton);
@ -781,11 +781,8 @@ void Interface::drawOption() {
}
if (_optionSaveRectTop.height() > 0) {
if (_vm->getGameType() == GType_ITE) {
if (_vm->getGameType() == GType_ITE)
backBuffer->drawRect(_optionSaveRectTop, kITEColorDarkGrey);
} else {
// TODO: Draw the button graphic properly for IHNM
}
}
// FIXME: The _optionSaveFileSlider checks exist for IHNM, where
@ -1399,6 +1396,21 @@ void Interface::setOption(PanelButton *panelButton) {
_vm->_sound->setVolume(_vm->_soundVolume == 10 ? 255 : _vm->_soundVolume * 25);
ConfMan.setInt("sfx_volume", _vm->_soundVolume * 25);
break;
case kTextVoices:
if (_vm->_subtitlesEnabled && _vm->_voicesEnabled) { // Both
_vm->_subtitlesEnabled = false; // Set it to "Audio"
_vm->_voicesEnabled = true; // Not necessary, just for completeness
} else if (!_vm->_subtitlesEnabled && _vm->_voicesEnabled) {
_vm->_subtitlesEnabled = true; // Set it to "Text"
_vm->_voicesEnabled = false;
} else if (_vm->_subtitlesEnabled && !_vm->_voicesEnabled) {
_vm->_subtitlesEnabled = true; // Set it to "Both"
_vm->_voicesEnabled = true;
}
ConfMan.setBool("subtitles", _vm->_subtitlesEnabled);
ConfMan.setBool("voices", _vm->_voicesEnabled);
break;
}
}
@ -1917,14 +1929,16 @@ void Interface::drawButtonBox(Surface *ds, const Rect& rect, ButtonKind kind, bo
static const int readingSpeeds[] = { kTextClick, kTextSlow, kTextMid, kTextFast };
void Interface::drawPanelButtonText(Surface *ds, InterfacePanel *panel, PanelButton *panelButton) {
void Interface::drawPanelButtonText(Surface *ds, InterfacePanel *panel, PanelButton *panelButton, int spritenum) {
const char *text;
int textId;
int textWidth;
int textHeight;
Point point;
Point texturePoint;
KnownColor textColor;
Rect rect;
int litButton = 0;
textId = panelButton->id;
switch (panelButton->id) {
@ -1950,6 +1964,14 @@ void Interface::drawPanelButtonText(Surface *ds, InterfacePanel *panel, PanelBut
else
textId = kTextOff;
break;
case kTextVoices:
if (_vm->_subtitlesEnabled && _vm->_voicesEnabled)
textId = kTextBoth;
else if (_vm->_subtitlesEnabled && !_vm->_voicesEnabled)
textId = kTextText;
else if (!_vm->_subtitlesEnabled && _vm->_voicesEnabled)
textId = kTextAudio;
break;
}
text = _vm->getTextString(textId);
@ -1971,7 +1993,24 @@ void Interface::drawPanelButtonText(Surface *ds, InterfacePanel *panel, PanelBut
}
panel->calcPanelButtonRect(panelButton, rect);
drawButtonBox(ds, rect, kButton, panelButton->state > 0);
if (_vm->getGameType() == GType_ITE) {
drawButtonBox(ds, rect, kButton, panelButton->state > 0);
} else {
litButton = panelButton->state > 0;
if (panel == &_optionPanel) {
texturePoint.x = _optionPanel.x + panelButton->xOffset;
texturePoint.y = _optionPanel.y + panelButton->yOffset;
_vm->_sprite->draw(ds, _vm->getDisplayClip(), _optionPanel.sprites, spritenum + 2 + litButton, texturePoint, 256);
} else if (panel == &_quitPanel) {
texturePoint.x = _quitPanel.x + panelButton->xOffset;
texturePoint.y = _quitPanel.y + panelButton->yOffset;
_vm->_sprite->draw(ds, _vm->getDisplayClip(), _optionPanel.sprites, 14 + litButton, texturePoint, 256);
} else {
// revert to default behavior
drawButtonBox(ds, rect, kButton, panelButton->state > 0);
}
}
if (_vm->getGameType() == GType_ITE)
_vm->_font->textDraw(kKnownFontMedium, ds, text, point,