diff options
author | Paul Gilbert | 2014-03-15 18:43:39 -0400 |
---|---|---|
committer | Paul Gilbert | 2014-03-15 18:43:39 -0400 |
commit | b652e2eafd3de5436b45619659b5299d945074be (patch) | |
tree | 4766419b95c6f44c309256a7d5860d4bb184e8c1 /engines/mads/user_interface.cpp | |
parent | 10124f6806150aad409f6db9a6c7a60afcb44872 (diff) | |
download | scummvm-rg350-b652e2eafd3de5436b45619659b5299d945074be.tar.gz scummvm-rg350-b652e2eafd3de5436b45619659b5299d945074be.tar.bz2 scummvm-rg350-b652e2eafd3de5436b45619659b5299d945074be.zip |
MADS: Merged the InterfaceSurface and UserInterface classes
Diffstat (limited to 'engines/mads/user_interface.cpp')
-rw-r--r-- | engines/mads/user_interface.cpp | 101 |
1 files changed, 93 insertions, 8 deletions
diff --git a/engines/mads/user_interface.cpp b/engines/mads/user_interface.cpp index ec5ca8a0b5..6afbf4c09c 100644 --- a/engines/mads/user_interface.cpp +++ b/engines/mads/user_interface.cpp @@ -22,22 +22,107 @@ #include "common/scummsys.h" #include "mads/mads.h" -#include "mads/screen.h" +#include "mads/compression.h" #include "mads/user_interface.h" -#include "mads/msurface.h" namespace MADS { -UserInterface *UserInterface::init(MADSEngine *vm) { - return new UserInterface(vm); +void SceneNode::load(Common::SeekableReadStream *f) { + _walkPos.x = f->readSint16LE(); + _walkPos.y = f->readSint16LE(); + for (int i = 0; i < MAX_ROUTE_NODES; ++i) + _indexes[i] = f->readUint16LE(); } -UserInterface::UserInterface(MADSEngine *vm): _vm(vm), _surface( - new MSurface(MADS_SCREEN_WIDTH, MADS_INTERFACE_HEIGHT)) { +/*------------------------------------------------------------------------*/ + +UserInterface::UserInterface(MADSEngine *vm) : _vm(vm) { + _category = CAT_NONE; + _screenObjectsCount = 0; +} + +void UserInterface::load(const Common::String &resName) { + File f(resName); + MadsPack madsPack(&f); + + // Load in the palette + Common::SeekableReadStream *palStream = madsPack.getItemStream(0); + + uint32 *gamePalP = &_vm->_palette->_palFlags[0]; + byte *palP = &_vm->_palette->_mainPalette[0]; + + for (int i = 0; i < 16; ++i, gamePalP++, palP += 3) { + palP[0] = VGA_COLOR_TRANS(palStream->readByte()); + palP[1] = VGA_COLOR_TRANS(palStream->readByte()); + palP[2] = VGA_COLOR_TRANS(palStream->readByte()); + *gamePalP |= 1; + palStream->skip(3); + } + delete palStream; + + // set the size for the interface + setSize(MADS_SCREEN_WIDTH, MADS_INTERFACE_HEIGHT); + Common::SeekableReadStream *pixelsStream = madsPack.getItemStream(1); + pixelsStream->read(getData(), MADS_SCREEN_WIDTH * MADS_INTERFACE_HEIGHT); + delete pixelsStream; +} + +void UserInterface::setup(int id) { + Scene &scene = _vm->_game->_scene; + + if (scene._screenObjects._v832EC != id) { + Common::String resName = _vm->_game->_aaName; + + // Strip off any extension + const char *p = strchr(resName.c_str(), '.'); + if (p) { + resName = Common::String(resName.c_str(), p); + } + + // Add on suffix if necessary + if (id) + resName += "A"; + + resName += ".INT"; + free(); + load(resName); + } + scene._screenObjects._v832EC = id; + + scene._imageInterEntries.clear(); + scene._imageInterEntries.add(-2, 0xff); + _vm->_game->_ticksExpiry = _vm->_events->getFrameCounter(); + scene._v1A = true; + _vm->_game->_objectHiliteVocabIdx = -1; + scene._v1C = -1; + + // Make a copy of the surface + copyTo(&_surface); + + if (_vm->_game->_v1 == 5) + scene._imageInterEntries.call(0, 0); + + scene._action.clear(); + writeText(); + loadElements(); + scene._dynamicHotspots.refresh(); +} + +void UserInterface::elementHighlighted() { + warning("TODO: UserInterface::elementHighlighted"); +} + +void UserInterface::writeText() { + warning("TODO: UserInterface::writeText"); +} + + +void UserInterface::setBounds(const Common::Rect &r) { + _bounds = r; } -UserInterface::~UserInterface() { - delete _surface; +void UserInterface::loadElements() { + warning("TODO: UserInterface::loadElements"); } } // End of namespace MADS |