mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-27 05:32:45 +00:00
Pick up/drop/open/close actions are now available in game.
svn-id: r33371
This commit is contained in:
parent
fb388deb99
commit
a1557bd776
@ -301,13 +301,13 @@ void Input::enterInventoryMode() {
|
|||||||
void Input::exitInventoryMode() {
|
void Input::exitInventoryMode() {
|
||||||
// right up hides inventory
|
// right up hides inventory
|
||||||
|
|
||||||
int item = _vm->getHoverInventoryItem(_mousePos.x, _mousePos.y);
|
int pos = _vm->getHoverInventoryItem(_mousePos.x, _mousePos.y);
|
||||||
_vm->highlightInventoryItem(-1); // disable
|
_vm->highlightInventoryItem(-1); // disable
|
||||||
|
|
||||||
if ((_engineFlags & kEngineDragging)) {
|
if ((_engineFlags & kEngineDragging)) {
|
||||||
|
|
||||||
_engineFlags &= ~kEngineDragging;
|
_engineFlags &= ~kEngineDragging;
|
||||||
ZonePtr z = _vm->hitZone(kZoneMerge, _activeItem._index, _vm->getInventoryItemIndex(item));
|
ZonePtr z = _vm->hitZone(kZoneMerge, _activeItem._index, _vm->getInventoryItemIndex(pos));
|
||||||
|
|
||||||
if (z) {
|
if (z) {
|
||||||
_vm->dropItem(z->u.merge->_obj1);
|
_vm->dropItem(z->u.merge->_obj1);
|
||||||
@ -319,10 +319,14 @@ void Input::exitInventoryMode() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_vm->closeInventory();
|
_vm->closeInventory();
|
||||||
if (item == -1) {
|
if (pos == -1) {
|
||||||
_vm->setArrowCursor();
|
_vm->setArrowCursor();
|
||||||
} else {
|
} else {
|
||||||
_vm->setInventoryCursor(item);
|
const InventoryItem *item = _vm->getInventoryItem(pos);
|
||||||
|
if (item->_index != 0) {
|
||||||
|
_activeItem._id = item->_id;
|
||||||
|
_vm->setInventoryCursor(item->_index);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_vm->resumeJobs();
|
_vm->resumeJobs();
|
||||||
|
|
||||||
|
@ -100,6 +100,8 @@ Parallaction::~Parallaction() {
|
|||||||
|
|
||||||
cleanupGui();
|
cleanupGui();
|
||||||
|
|
||||||
|
delete _comboArrow;
|
||||||
|
|
||||||
delete _localFlagNames;
|
delete _localFlagNames;
|
||||||
delete _gfx;
|
delete _gfx;
|
||||||
delete _soundMan;
|
delete _soundMan;
|
||||||
|
@ -325,6 +325,7 @@ public:
|
|||||||
Common::RandomSource _rnd;
|
Common::RandomSource _rnd;
|
||||||
|
|
||||||
Debugger *_debugger;
|
Debugger *_debugger;
|
||||||
|
Frames *_comboArrow;
|
||||||
|
|
||||||
|
|
||||||
protected: // data
|
protected: // data
|
||||||
@ -365,7 +366,7 @@ public:
|
|||||||
virtual void callFunction(uint index, void* parm) { }
|
virtual void callFunction(uint index, void* parm) { }
|
||||||
|
|
||||||
virtual void setArrowCursor() = 0;
|
virtual void setArrowCursor() = 0;
|
||||||
virtual void setInventoryCursor(int pos) = 0;
|
virtual void setInventoryCursor(ItemName name) = 0;
|
||||||
|
|
||||||
virtual void parseLocation(const char* name) = 0;
|
virtual void parseLocation(const char* name) = 0;
|
||||||
|
|
||||||
@ -481,7 +482,6 @@ public:
|
|||||||
typedef void (Parallaction_ns::*Callable)(void*);
|
typedef void (Parallaction_ns::*Callable)(void*);
|
||||||
|
|
||||||
virtual void callFunction(uint index, void* parm);
|
virtual void callFunction(uint index, void* parm);
|
||||||
void setMousePointer(uint32 value);
|
|
||||||
|
|
||||||
bool loadGame();
|
bool loadGame();
|
||||||
bool saveGame();
|
bool saveGame();
|
||||||
@ -512,7 +512,7 @@ private:
|
|||||||
void changeCharacter(const char *name);
|
void changeCharacter(const char *name);
|
||||||
void runPendingZones();
|
void runPendingZones();
|
||||||
|
|
||||||
void setInventoryCursor(int pos);
|
void setInventoryCursor(ItemName name);
|
||||||
|
|
||||||
|
|
||||||
void doLoadGame(uint16 slot);
|
void doLoadGame(uint16 slot);
|
||||||
@ -525,7 +525,6 @@ private:
|
|||||||
|
|
||||||
static byte _resMouseArrow[256];
|
static byte _resMouseArrow[256];
|
||||||
byte *_mouseArrow;
|
byte *_mouseArrow;
|
||||||
Frames *_mouseComposedArrow;
|
|
||||||
|
|
||||||
static const Callable _dosCallables[25];
|
static const Callable _dosCallables[25];
|
||||||
static const Callable _amigaCallables[25];
|
static const Callable _amigaCallables[25];
|
||||||
@ -644,7 +643,7 @@ private:
|
|||||||
void initFonts();
|
void initFonts();
|
||||||
void freeFonts();
|
void freeFonts();
|
||||||
|
|
||||||
void setInventoryCursor(int pos);
|
void setInventoryCursor(ItemName name);
|
||||||
|
|
||||||
void changeLocation(char *location);
|
void changeLocation(char *location);
|
||||||
void runPendingZones();
|
void runPendingZones();
|
||||||
@ -652,7 +651,6 @@ private:
|
|||||||
void initPart();
|
void initPart();
|
||||||
void freePart();
|
void freePart();
|
||||||
|
|
||||||
void setMousePointer(int16 index);
|
|
||||||
void initCursors();
|
void initCursors();
|
||||||
|
|
||||||
Frames *_dinoCursor;
|
Frames *_dinoCursor;
|
||||||
|
@ -32,6 +32,27 @@
|
|||||||
|
|
||||||
namespace Parallaction {
|
namespace Parallaction {
|
||||||
|
|
||||||
|
struct MouseComboProperties {
|
||||||
|
int _xOffset;
|
||||||
|
int _yOffset;
|
||||||
|
int _width;
|
||||||
|
int _height;
|
||||||
|
};
|
||||||
|
/*
|
||||||
|
// TODO: improve NS's handling of normal cursor before merging cursor code.
|
||||||
|
MouseComboProperties _mouseComboProps_NS = {
|
||||||
|
7, // combo x offset (the icon from the inventory will be rendered from here)
|
||||||
|
7, // combo y offset (ditto)
|
||||||
|
32, // combo (arrow + icon) width
|
||||||
|
32 // combo (arrow + icon) height
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
MouseComboProperties _mouseComboProps_BR = {
|
||||||
|
8, // combo x offset (the icon from the inventory will be rendered from here)
|
||||||
|
8, // combo y offset (ditto)
|
||||||
|
68, // combo (arrow + icon) width
|
||||||
|
68 // combo (arrow + icon) height
|
||||||
|
};
|
||||||
|
|
||||||
const char *Parallaction_br::_partNames[] = {
|
const char *Parallaction_br::_partNames[] = {
|
||||||
"PART0",
|
"PART0",
|
||||||
@ -103,6 +124,7 @@ Parallaction_br::~Parallaction_br() {
|
|||||||
delete _dougCursor;
|
delete _dougCursor;
|
||||||
delete _donnaCursor;
|
delete _donnaCursor;
|
||||||
|
|
||||||
|
delete _mouseArrow;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Parallaction_br::callFunction(uint index, void* parm) {
|
void Parallaction_br::callFunction(uint index, void* parm) {
|
||||||
@ -154,6 +176,12 @@ void Parallaction_br::initCursors() {
|
|||||||
_dougCursor = _disk->loadPointer("pointer2");
|
_dougCursor = _disk->loadPointer("pointer2");
|
||||||
_donnaCursor = _disk->loadPointer("pointer3");
|
_donnaCursor = _disk->loadPointer("pointer3");
|
||||||
|
|
||||||
|
Graphics::Surface *surf = new Graphics::Surface;
|
||||||
|
surf->create(_mouseComboProps_BR._width, _mouseComboProps_BR._height, 1);
|
||||||
|
_comboArrow = new SurfaceToFrames(surf);
|
||||||
|
|
||||||
|
// TODO: choose the pointer depending on the active character
|
||||||
|
// For now, we pick Donna's
|
||||||
_mouseArrow = _donnaCursor;
|
_mouseArrow = _donnaCursor;
|
||||||
} else {
|
} else {
|
||||||
// TODO: Where are the Amiga cursors?
|
// TODO: Where are the Amiga cursors?
|
||||||
@ -161,19 +189,6 @@ void Parallaction_br::initCursors() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Parallaction_br::setMousePointer(int16 index) {
|
|
||||||
// FIXME: Where are the Amiga cursors?
|
|
||||||
if (getPlatform() == Common::kPlatformAmiga)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Common::Rect r;
|
|
||||||
_mouseArrow->getRect(0, r);
|
|
||||||
|
|
||||||
_system->setMouseCursor(_mouseArrow->getData(0), r.width(), r.height(), 0, 0, 0);
|
|
||||||
_system->showMouse(true);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void Parallaction_br::initPart() {
|
void Parallaction_br::initPart() {
|
||||||
|
|
||||||
memset(_counters, 0, ARRAYSIZE(_counters));
|
memset(_counters, 0, ARRAYSIZE(_counters));
|
||||||
@ -340,15 +355,29 @@ void Parallaction_br::changeCharacter(const char *name) {
|
|||||||
|
|
||||||
|
|
||||||
void Parallaction_br::setArrowCursor() {
|
void Parallaction_br::setArrowCursor() {
|
||||||
// TODO: choose the pointer depending on the active character
|
// FIXME: Where are the Amiga cursors?
|
||||||
// For now, defaults to 0, that corresponds to the default in the original
|
if (getPlatform() == Common::kPlatformAmiga)
|
||||||
setMousePointer(0);
|
return;
|
||||||
|
|
||||||
|
Common::Rect r;
|
||||||
|
_mouseArrow->getRect(0, r);
|
||||||
|
|
||||||
|
_system->setMouseCursor(_mouseArrow->getData(0), r.width(), r.height(), 0, 0, 0);
|
||||||
|
_system->showMouse(true);
|
||||||
|
|
||||||
|
_input->_activeItem._id = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Parallaction_br::setInventoryCursor(int pos) {
|
void Parallaction_br::setInventoryCursor(ItemName name) {
|
||||||
|
assert(name > 0);
|
||||||
|
|
||||||
|
byte *src = _mouseArrow->getData(0);
|
||||||
|
byte *dst = _comboArrow->getData(0);
|
||||||
|
memcpy(dst, src, _comboArrow->getSize(0));
|
||||||
|
|
||||||
|
// FIXME: destination offseting is not clear
|
||||||
|
_inventoryRenderer->drawItem(name, dst + _mouseComboProps_BR._yOffset * _mouseComboProps_BR._width + _mouseComboProps_BR._xOffset, _mouseComboProps_BR._width);
|
||||||
|
_system->setMouseCursor(dst, _mouseComboProps_BR._width, _mouseComboProps_BR._height, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Parallaction
|
} // namespace Parallaction
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
|
|
||||||
namespace Parallaction {
|
namespace Parallaction {
|
||||||
|
|
||||||
|
|
||||||
#define MOUSEARROW_WIDTH 16
|
#define MOUSEARROW_WIDTH 16
|
||||||
#define MOUSEARROW_HEIGHT 16
|
#define MOUSEARROW_HEIGHT 16
|
||||||
|
|
||||||
@ -165,7 +166,6 @@ Parallaction_ns::~Parallaction_ns() {
|
|||||||
|
|
||||||
delete _locationParser;
|
delete _locationParser;
|
||||||
delete _programParser;
|
delete _programParser;
|
||||||
delete _mouseComposedArrow;
|
|
||||||
|
|
||||||
_location._animations.remove(_char._ani);
|
_location._animations.remove(_char._ani);
|
||||||
|
|
||||||
@ -182,7 +182,7 @@ void Parallaction_ns::freeFonts() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Parallaction_ns::initCursors() {
|
void Parallaction_ns::initCursors() {
|
||||||
_mouseComposedArrow = _disk->loadPointer("pointer");
|
_comboArrow = _disk->loadPointer("pointer");
|
||||||
_mouseArrow = _resMouseArrow;
|
_mouseArrow = _resMouseArrow;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -197,21 +197,13 @@ void Parallaction_ns::setArrowCursor() {
|
|||||||
_system->setMouseCursor(_mouseArrow, MOUSEARROW_WIDTH, MOUSEARROW_HEIGHT, 0, 0, 0);
|
_system->setMouseCursor(_mouseArrow, MOUSEARROW_WIDTH, MOUSEARROW_HEIGHT, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Parallaction_ns::setInventoryCursor(int pos) {
|
void Parallaction_ns::setInventoryCursor(ItemName name) {
|
||||||
|
assert(name > 0);
|
||||||
|
|
||||||
if (pos == -1)
|
byte *v8 = _comboArrow->getData(0);
|
||||||
return;
|
|
||||||
|
|
||||||
const InventoryItem *item = getInventoryItem(pos);
|
|
||||||
if (item->_index == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
_input->_activeItem._id = item->_id;
|
|
||||||
|
|
||||||
byte *v8 = _mouseComposedArrow->getData(0);
|
|
||||||
|
|
||||||
// FIXME: destination offseting is not clear
|
// FIXME: destination offseting is not clear
|
||||||
_inventoryRenderer->drawItem(item->_index, v8 + 7 * MOUSECOMBO_WIDTH + 7, MOUSECOMBO_WIDTH);
|
_inventoryRenderer->drawItem(name, v8 + 7 * MOUSECOMBO_WIDTH + 7, MOUSECOMBO_WIDTH);
|
||||||
_system->setMouseCursor(v8, MOUSECOMBO_WIDTH, MOUSECOMBO_HEIGHT, 0, 0, 0);
|
_system->setMouseCursor(v8, MOUSECOMBO_WIDTH, MOUSECOMBO_HEIGHT, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user