diff options
author | Nicola Mettifogo | 2008-02-02 12:36:06 +0000 |
---|---|---|
committer | Nicola Mettifogo | 2008-02-02 12:36:06 +0000 |
commit | 9f3ecd64092f5765c0b9952b10ddc223858ac7eb (patch) | |
tree | 9e4da00b8e4dde90cd29fc95e5c1f8640827f1b3 /engines/parallaction/parallaction_br.cpp | |
parent | 33a534b76ca54b6230c851850fd431d345f383ca (diff) | |
download | scummvm-rg350-9f3ecd64092f5765c0b9952b10ddc223858ac7eb.tar.gz scummvm-rg350-9f3ecd64092f5765c0b9952b10ddc223858ac7eb.tar.bz2 scummvm-rg350-9f3ecd64092f5765c0b9952b10ddc223858ac7eb.zip |
Cleanup of BRA menu code.
svn-id: r30739
Diffstat (limited to 'engines/parallaction/parallaction_br.cpp')
-rw-r--r-- | engines/parallaction/parallaction_br.cpp | 210 |
1 files changed, 3 insertions, 207 deletions
diff --git a/engines/parallaction/parallaction_br.cpp b/engines/parallaction/parallaction_br.cpp index 123a0f968e..f8ba6e7e07 100644 --- a/engines/parallaction/parallaction_br.cpp +++ b/engines/parallaction/parallaction_br.cpp @@ -31,17 +31,8 @@ namespace Parallaction { -enum MenuOptions { - kMenuPart0 = 0, - kMenuPart1 = 1, - kMenuPart2 = 2, - kMenuPart3 = 3, - kMenuPart4 = 4, - kMenuLoadGame = 5, - kMenuQuit = 6 -}; -const char *partNames[] = { +const char *Parallaction_br::_partNames[] = { "PART0", "PART1", "PART2", @@ -104,33 +95,12 @@ void Parallaction_br::callFunction(uint index, void* parm) { } int Parallaction_br::go() { - splash("dyna"); - splash("core"); - - // TODO: load progress value from special save game - _progress = 3; while ((_engineFlags & kEngineQuit) == 0) { -// initCharacter(); - - int option = showMenu(); - switch (option) { - case kMenuQuit: - _engineFlags |= kEngineQuit; - break; - - case kMenuLoadGame: - warning("loadgame not yet implemented"); - break; - - default: - _part = option; - _disk->selectArchive(partNames[_part]); - startPart(); - break; - } + guiStart(); +// initCharacter(); runGame(); @@ -143,180 +113,6 @@ int Parallaction_br::go() { return 0; } -void Parallaction_br::splash(const char *name) { - - _gfx->clearScreen(); - _gfx->setBackground(kBackgroundSlide, name, 0, 0); - _gfx->_backgroundInfo.x = (_screenWidth - _gfx->_backgroundInfo.width) >> 1; - _gfx->_backgroundInfo.y = (_screenHeight - _gfx->_backgroundInfo.height) >> 1; - _gfx->updateScreen(); - _system->delayMillis(600); - - Palette blackPal; - Palette pal(_gfx->_backgroundInfo.palette); - for (uint i = 0; i < 64; i++) { - pal.fadeTo(blackPal, 1); - _gfx->setPalette(pal); - _gfx->updateScreen(); - _system->delayMillis(20); - } - -} - -#define MENUITEMS_X 250 -#define MENUITEMS_Y 200 - -#define MENUITEM_WIDTH 190 -#define MENUITEM_HEIGHT 18 - -void Parallaction_br::renderMenuItem(Graphics::Surface &surf, const char *text) { - surf.create(MENUITEM_WIDTH, MENUITEM_HEIGHT, 1); - _menuFont->setColor(0); - _menuFont->drawString((byte*)surf.getBasePtr(5, 2), MENUITEM_WIDTH, text); -} - -void Parallaction_br::invertMenuItem(Graphics::Surface &surf) { - for (int i = 0; i < surf.w * surf.h; i++) - ((byte*)surf.pixels)[i] ^= 0xD; -} - -/* - this adapter can handle Surfaces containing multiple frames, - provided all these frames are the same width and height -*/ -struct SurfaceToMultiFrames : public Frames { - - uint _num; - uint _width, _height; - Graphics::Surface *_surf; - - SurfaceToMultiFrames(uint num, uint w, uint h, Graphics::Surface *surf) : _num(num), _width(w), _height(h), _surf(surf) { - - } - - ~SurfaceToMultiFrames() { - delete _surf; - } - - uint16 getNum() { - return _num; - } - byte* getData(uint16 index) { - assert(index < _num); - return (byte*)_surf->getBasePtr(0, _height * index); - } - void getRect(uint16 index, Common::Rect &r) { - assert(index < _num); - r.left = 0; - r.top = 0; - r.setWidth(_width); - r.setHeight(_height); - } - -}; - -Frames* Parallaction_br::renderMenuItem(const char *text) { - // this builds a surface containing two copies of the text. - // one is in normal color, the other is inverted. - // the two 'frames' are used to display selected/unselected menu items - - Graphics::Surface *surf = new Graphics::Surface; - surf->create(MENUITEM_WIDTH, MENUITEM_HEIGHT*2, 1); - - // build first frame to be displayed when item is not selected - _menuFont->setColor(0); - _menuFont->drawString((byte*)surf->getBasePtr(5, 2), MENUITEM_WIDTH, text); - - // build second frame to be displayed when item is selected - _menuFont->drawString((byte*)surf->getBasePtr(5, 2 + MENUITEM_HEIGHT), MENUITEM_WIDTH, text); - byte *s = (byte*)surf->getBasePtr(0, MENUITEM_HEIGHT); - for (int i = 0; i < surf->w * MENUITEM_HEIGHT; i++) { - *s++ ^= 0xD; - } - - // wrap the surface into the suitable Frames adapter - return new SurfaceToMultiFrames(2, MENUITEM_WIDTH, MENUITEM_HEIGHT, surf); -} - - -int Parallaction_br::showMenu() { - // TODO: filter menu entries according to progress in game - - #define NUM_MENULINES 7 - Frames *_lines[NUM_MENULINES]; - - const char *menuStrings[NUM_MENULINES] = { - "SEE INTRO", - "NEW GAME", - "SAVED GAME", - "EXIT TO DOS", - "PART 2", - "PART 3", - "PART 4" - }; - - MenuOptions options[NUM_MENULINES] = { - kMenuPart0, - kMenuPart1, - kMenuLoadGame, - kMenuQuit, - kMenuPart2, - kMenuPart3, - kMenuPart4 - }; - - _gfx->clearScreen(); - _gfx->setBackground(kBackgroundSlide, "tbra", 0, 0); - _gfx->_backgroundInfo.x = 20; - _gfx->_backgroundInfo.y = 50; - - int availItems = 4 + _progress; - - // TODO: keep track of and destroy menu item frames/surfaces - - int i; - for (i = 0; i < availItems; i++) { - _lines[i] = renderMenuItem(menuStrings[i]); - uint id = _gfx->setItem(_lines[i], MENUITEMS_X, MENUITEMS_Y + MENUITEM_HEIGHT * i, 0xFF); - _gfx->setItemFrame(id, 0); - } - - int selectedItem = -1; - - setMousePointer(0); - - while (true) { - - if ((_mouseButtons == kMouseLeftUp) && selectedItem >= 0) - break; - - readInput(); - - if ((_mousePos.x > MENUITEMS_X) && (_mousePos.x < (MENUITEMS_X+MENUITEM_WIDTH)) && (_mousePos.y > MENUITEMS_Y)) { - selectedItem = (_mousePos.y - MENUITEMS_Y) / MENUITEM_HEIGHT; - - if (!(selectedItem < availItems)) - selectedItem = -1; - } else - selectedItem = -1; - - for (int i = 0; i < availItems; i++) { - _gfx->setItemFrame(i, selectedItem == i ? 1 : 0); - } - - _gfx->updateScreen(); - _system->delayMillis(20); - } - - _system->showMouse(false); - _gfx->hideDialogueStuff(); - - for (i = 0; i < availItems; i++) { - delete _lines[i]; - } - - return options[selectedItem]; -} void Parallaction_br::initFonts() { |