Skip to content

Commit

Permalink
ACCESS: More work on inventory screen setup
Browse files Browse the repository at this point in the history
  • Loading branch information
dreammaster committed Aug 24, 2014
1 parent 1073646 commit 89a3c43
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 5 deletions.
3 changes: 3 additions & 0 deletions engines/access/asurface.cpp
Expand Up @@ -208,6 +208,9 @@ void ASurface::plotImage(SpriteResource *sprite, int frameNum, const Common::Poi
}

void ASurface::copyTo(ASurface *dest, const Common::Point &destPos) {
if (dest->getPixels() == nullptr)
dest->create(w, h);

for (int yp = 0; yp < h; ++yp) {
byte *srcP = (byte *)getBasePtr(0, yp);
byte *destP = (byte *)dest->getBasePtr(destPos.x, destPos.y + yp);
Expand Down
8 changes: 6 additions & 2 deletions engines/access/files.cpp
Expand Up @@ -104,17 +104,21 @@ void FileManager::openFile(const Common::String &filename) {
_filesize = _file.size();
}

void FileManager::loadScreen(int fileNum, int subfile) {
void FileManager::loadScreen(Graphics::Surface *dest, int fileNum, int subfile) {
setAppended(fileNum);
gotoAppended(subfile);
_vm->_screen->loadPalette(_stream);

// Get the data for the screen, and copy it over
byte *pSrc = handleFile();
Common::copy(pSrc, pSrc + _filesize, (byte *)_vm->_screen->getPixels());
Common::copy(pSrc, pSrc + _filesize, (byte *)dest->getPixels());
delete[] pSrc;
}

void FileManager::loadScreen(int fileNum, int subfile) {
loadScreen(_vm->_screen, fileNum, subfile);
}

void FileManager::loadScreen(const Common::String &filename) {
// Open the file
openFile(filename);
Expand Down
6 changes: 6 additions & 0 deletions engines/access/files.h
Expand Up @@ -26,6 +26,7 @@
#include "common/scummsys.h"
#include "common/array.h"
#include "common/file.h"
#include "graphics/surface.h"
#include "access/decompress.h"

namespace Access {
Expand Down Expand Up @@ -96,6 +97,11 @@ class FileManager {
*/
void loadScreen(const Common::String &filename);

/**
* Load a screen resource onto a designated surface
*/
void loadScreen(Graphics::Surface *dest, int fileNum, int subfile);

/**
* Open up a sub-file container file
*/
Expand Down
40 changes: 37 additions & 3 deletions engines/access/inventory.cpp
Expand Up @@ -54,6 +54,11 @@ InventoryManager::InventoryManager(AccessEngine *vm) : Manager(vm) {

for (uint i = 0; i < _inv.size(); ++i)
_names.push_back(names[i]);

for (uint i = 0; i < 26; ++i) {
const int *r = INVCOORDS[i];
_invCoords.push_back(Common::Rect(r[0], r[1], r[0] + r[2], r[1] + r[3]));
}
}

int &InventoryManager::operator[](int idx) {
Expand Down Expand Up @@ -95,7 +100,7 @@ int InventoryManager::newDisplayInv() {
getList();
initFields();

files.loadScreen(99, 0);
_vm->_files->loadScreen(&_vm->_buffer1, 99, 0);
_vm->_buffer1.copyTo(&_vm->_buffer2);
_vm->copyBF2Vid();

Expand Down Expand Up @@ -267,14 +272,43 @@ void InventoryManager::putInvIcon(int itemIndex, int itemId) {
}

void InventoryManager::chooseItem() {
EventsManager &events = *_vm->_events;
_vm->_useItem = -1;

error("TODO: chooseItem");
int selIndex;

while (!_vm->shouldQuit()) {
g_system->delayMillis(10);

// Poll events and wait for a click on a known area
events.pollEvents();
if (!events._leftButton || ((selIndex = coordIndexOf()) == -1))
continue;

if (selIndex > 23) {
if (selIndex == 25)
_vm->_useItem = -1;
break;
} else if (selIndex < (int)_items.size()) {
warning("TODO: Combine items");
}
}
}

void InventoryManager::freeInvCells() {
delete _vm->_objectsTable[99];
_vm->_objectsTable[99] = nullptr;
}

int InventoryManager::coordIndexOf() {
const Common::Point pt = _vm->_events->_mousePos;

for (int i = 0; i < (int)_invCoords.size(); ++i) {
if (_invCoords[i].contains(pt))
return i;
}

return -1;
}


} // End of namespace Access
3 changes: 3 additions & 0 deletions engines/access/inventory.h
Expand Up @@ -53,6 +53,7 @@ class InventoryManager : public Manager {
};
private:
Common::Array<int> _items;
Common::Array<Common::Rect> _invCoords;
ASurface _savedBuffer1;
ASurface _savedScreen;
SavedFields _fields;
Expand All @@ -73,6 +74,8 @@ class InventoryManager : public Manager {
void chooseItem();

void freeInvCells();

int coordIndexOf();
public:
Common::Array<int> _inv;
Common::StringArray _names;
Expand Down

0 comments on commit 89a3c43

Please sign in to comment.