aboutsummaryrefslogtreecommitdiff
path: root/engines/mads/user_interface.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2014-03-15 18:43:39 -0400
committerPaul Gilbert2014-03-15 18:43:39 -0400
commitb652e2eafd3de5436b45619659b5299d945074be (patch)
tree4766419b95c6f44c309256a7d5860d4bb184e8c1 /engines/mads/user_interface.cpp
parent10124f6806150aad409f6db9a6c7a60afcb44872 (diff)
downloadscummvm-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.cpp101
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