mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-02 00:42:24 +00:00
SUPERNOVA: Adds text reader to view text files
This commit is contained in:
parent
38e04455fc
commit
8c4af9f175
@ -585,10 +585,12 @@ void GameManager::processInput(Common::KeyState &state) {
|
||||
_vm->showHelpScreen();
|
||||
break;
|
||||
case Common::KEYCODE_F2:
|
||||
// show game doc
|
||||
// show game manual
|
||||
_vm->showTextReader("msn.doc");
|
||||
break;
|
||||
case Common::KEYCODE_F3:
|
||||
// show game info
|
||||
_vm->showTextReader("msn.inf");
|
||||
break;
|
||||
case Common::KEYCODE_F4:
|
||||
_vm->setTextSpeed();
|
||||
|
@ -23,6 +23,7 @@
|
||||
#ifndef SUPERNOVA_STATE_H
|
||||
#define SUPERNOVA_STATE_H
|
||||
|
||||
#include "common/error.h"
|
||||
#include "common/events.h"
|
||||
#include "common/rect.h"
|
||||
#include "common/keyboard.h"
|
||||
|
@ -434,6 +434,83 @@ void SupernovaEngine::showHelpScreen() {
|
||||
_gm->animationOn();
|
||||
}
|
||||
|
||||
Common::Error SupernovaEngine::showTextReader(const char *filename) {
|
||||
Common::File file;
|
||||
|
||||
if (!file.open(filename)) {
|
||||
GUIErrorMessageFormat(_("Unable to find '%s' in game folder."), filename);
|
||||
return Common::kReadingFailed;
|
||||
}
|
||||
Common::SeekableReadStream *stream = file.readStream(file.size());
|
||||
int linesInFile = 0;
|
||||
while (!stream->eos()) {
|
||||
stream->readLine();
|
||||
++linesInFile;
|
||||
}
|
||||
--linesInFile;
|
||||
stream->seek(0);
|
||||
stream->clearErr();
|
||||
|
||||
if (_screen->isMessageShown())
|
||||
_screen->removeMessage();
|
||||
_gm->animationOff();
|
||||
_gm->saveTime();
|
||||
paletteFadeOut();
|
||||
g_system->fillScreen(kColorWhite35);
|
||||
for (int y = 6; y < (200 - kFontHeight); y += (kFontHeight + 2)) {
|
||||
Common::String line = stream->readLine();
|
||||
if (stream->eos())
|
||||
break;
|
||||
_screen->renderText(line, 6, y, kColorWhite99);
|
||||
}
|
||||
paletteFadeIn();
|
||||
|
||||
const int linesPerPage = 19;
|
||||
int lineNumber = 0;
|
||||
bool exitReader = false;
|
||||
do {
|
||||
stream->seek(0);
|
||||
stream->clearErr();
|
||||
for (int i = 0; i < lineNumber; ++i)
|
||||
stream->readLine();
|
||||
g_system->fillScreen(kColorWhite35);
|
||||
for (int y = 6; y < (_screen->getScreenHeight() - kFontHeight); y += (kFontHeight + 2)) {
|
||||
Common::String line = stream->readLine();
|
||||
if (stream->eos())
|
||||
break;
|
||||
_screen->renderText(line, 6, y, kColorWhite99);
|
||||
}
|
||||
_gm->getKeyInput();
|
||||
switch (_gm->_key.keycode) {
|
||||
case Common::KEYCODE_ESCAPE:
|
||||
exitReader = true;
|
||||
break;
|
||||
case Common::KEYCODE_UP:
|
||||
lineNumber = lineNumber > 0 ? lineNumber - 1 : 0;
|
||||
break;
|
||||
case Common::KEYCODE_DOWN:
|
||||
lineNumber = lineNumber < linesInFile - (linesPerPage + 1) ? lineNumber + 1
|
||||
: linesInFile - linesPerPage;
|
||||
break;
|
||||
case Common::KEYCODE_PAGEUP:
|
||||
lineNumber = lineNumber > linesPerPage ? lineNumber - linesPerPage : 0;
|
||||
break;
|
||||
case Common::KEYCODE_PAGEDOWN:
|
||||
lineNumber = lineNumber < linesInFile - (linesPerPage * 2) ? lineNumber + linesPerPage
|
||||
: linesInFile - linesPerPage;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} while (!exitReader && !shouldQuit());
|
||||
|
||||
paletteFadeOut();
|
||||
_gm->loadTime();
|
||||
_gm->animationOn();
|
||||
|
||||
return Common::kNoError;
|
||||
}
|
||||
|
||||
bool SupernovaEngine::quitGameDialog() {
|
||||
bool quit = false;
|
||||
|
||||
|
@ -96,6 +96,7 @@ public:
|
||||
const Common::String &getGameString(int idx) const;
|
||||
void setGameString(int idx, const Common::String &string);
|
||||
void showHelpScreen();
|
||||
Common::Error showTextReader(const char *filename);
|
||||
|
||||
// forwarding calls
|
||||
void playSound(AudioId sample);
|
||||
|
Loading…
x
Reference in New Issue
Block a user