diff options
-rw-r--r-- | engines/fullpipe/fullpipe.h | 3 | ||||
-rw-r--r-- | engines/fullpipe/gameloader.cpp | 7 | ||||
-rw-r--r-- | engines/fullpipe/gfx.h | 1 | ||||
-rw-r--r-- | engines/fullpipe/init.cpp | 43 | ||||
-rw-r--r-- | engines/fullpipe/input.cpp | 47 | ||||
-rw-r--r-- | engines/fullpipe/input.h | 23 |
6 files changed, 119 insertions, 5 deletions
diff --git a/engines/fullpipe/fullpipe.h b/engines/fullpipe/fullpipe.h index c058022312..a0dba6a431 100644 --- a/engines/fullpipe/fullpipe.h +++ b/engines/fullpipe/fullpipe.h @@ -48,6 +48,7 @@ class CGameLoader; class CGameVar; class CInputController; class CInventory2; +struct CursorInfo; class EntranceInfo; class GameProject; class GlobalMessageQueueList; @@ -92,6 +93,7 @@ public: bool loadGam(const char *fname); CGameVar *getGameLoaderGameVar(); + CInputController *getGameLoaderInputController(); int _gameProjectVersion; int _pictureScale; @@ -135,6 +137,7 @@ public: void setSwallowedEggsState(); void initCursors(); + void addCursor(CursorInfo *cursorInfo, Scene *inv, int pictureId, int hotspotX, int hotspotY, int itemPictureOffsX, int itemPictureOffsY); CGameVar *_swallowedEgg1; CGameVar *_swallowedEgg2; diff --git a/engines/fullpipe/gameloader.cpp b/engines/fullpipe/gameloader.cpp index 1049e1cc3d..72b2827568 100644 --- a/engines/fullpipe/gameloader.cpp +++ b/engines/fullpipe/gameloader.cpp @@ -191,4 +191,11 @@ CGameVar *FullpipeEngine::getGameLoaderGameVar() { return 0; } +CInputController *FullpipeEngine::getGameLoaderInputController() { + if (_gameLoader) + return _gameLoader->_inputController; + else + return 0; +} + } // End of namespace Fullpipe diff --git a/engines/fullpipe/gfx.h b/engines/fullpipe/gfx.h index 27be7c474f..81de8ec1c0 100644 --- a/engines/fullpipe/gfx.h +++ b/engines/fullpipe/gfx.h @@ -61,6 +61,7 @@ class Picture : public MemoryObject { friend class Movement; friend class DynamicPhase; friend class PictureObject; + friend class CInputController; Common::Rect _rect; Bitmap *_convertedBitmap; diff --git a/engines/fullpipe/init.cpp b/engines/fullpipe/init.cpp index 07a7c9c7f5..9892f55574 100644 --- a/engines/fullpipe/init.cpp +++ b/engines/fullpipe/init.cpp @@ -25,6 +25,8 @@ #include "fullpipe/objects.h" #include "fullpipe/gameloader.h" #include "fullpipe/objectnames.h" +#include "fullpipe/input.h" + #include "fullpipe/gameobj.h" namespace Fullpipe { @@ -149,8 +151,47 @@ void FullpipeEngine::setSwallowedEggsState() { _swallowedEgg3->_value.intValue = 0; } +void FullpipeEngine::addCursor(CursorInfo *cursorInfo, Scene *inv, int pictureId, int hotspotX, int hotspotY, int itemPictureOffsX, int itemPictureOffsY) { + cursorInfo->pictureId = pictureId; + cursorInfo->picture = inv->getPictureObjectById(pictureId, 0)->_picture; + cursorInfo->hotspotX = hotspotX; + cursorInfo->hotspotY = hotspotY; + cursorInfo->itemPictureOffsX = itemPictureOffsX; + cursorInfo->itemPictureOffsY = itemPictureOffsY; + + getGameLoaderInputController()->addCursor(cursorInfo); +} + void FullpipeEngine::initCursors() { - warning("STUB: FullpipeEngine::initCursors()"); + CursorInfo crs; + Scene *inv = accessScene(SC_INV); + + addCursor(&crs, inv, PIC_CSR_DEFAULT, 15, 1, 10, 10); + addCursor(&crs, inv, PIC_CSR_DEFAULT_INV, 18, 18, 23, 23); + addCursor(&crs, inv, PIC_CSR_ITN, 11, 11, 10, 10); + addCursor(&crs, inv, PIC_CSR_ITN_RED, 11, 11, 10, 10); + addCursor(&crs, inv, PIC_CSR_ITN_GREEN, 11, 11, 10, 10); + addCursor(&crs, inv, PIC_CSR_ITN_INV, 23, 17, 23, 17); + addCursor(&crs, inv, PIC_CSR_GOU, 15, 17, 10, 10); + addCursor(&crs, inv, PIC_CSR_GOD, 15, 1, 10, 10); + addCursor(&crs, inv, PIC_CSR_GOL, 26, 1, 10, 10); + addCursor(&crs, inv, PIC_CSR_GOR, 15, 1, 10, 10); + addCursor(&crs, inv, PIC_CSR_GOFAR_L, 1, 1, 10, 10); + addCursor(&crs, inv, PIC_CSR_GOFAR_R, 39, 1, 10, 10); + addCursor(&crs, inv, PIC_CSR_ARCADE1, 12, 24, 10, 10); + addCursor(&crs, inv, PIC_CSR_ARCADE2, 11, 11, 10, 10); + addCursor(&crs, inv, PIC_CSR_ARCADE2_D, 22, 15, 10, 10); + addCursor(&crs, inv, PIC_CSR_ARCADE3, 11, 11, 10, 10); + addCursor(&crs, inv, PIC_CSR_ARCADE4, 18, 11, 10, 10); + addCursor(&crs, inv, PIC_CSR_ARCADE5, 23, 11, 10, 10); + addCursor(&crs, inv, PIC_CSR_ARCADE6, 11, 11, 10, 10); + addCursor(&crs, inv, PIC_CSR_ARCADE6_D, 0, 0, 10, 10); + addCursor(&crs, inv, PIC_CSR_ARCADE7, 21, 11, 10, 10); + addCursor(&crs, inv, PIC_CSR_ARCADE7_D, 7, 20, 10, 10); + addCursor(&crs, inv, PIC_CSR_ARCADE8, 23, 11, 10, 10); + addCursor(&crs, inv, PIC_CSR_LIFT, 6, 13, 10, 10); + + getGameLoaderInputController()->setCursorMode(0); } void FullpipeEngine::initMap() { diff --git a/engines/fullpipe/input.cpp b/engines/fullpipe/input.cpp index 68efacf74b..bb6d8baae5 100644 --- a/engines/fullpipe/input.cpp +++ b/engines/fullpipe/input.cpp @@ -24,6 +24,7 @@ #include "fullpipe/objects.h" #include "fullpipe/input.h" +#include "fullpipe/gfx.h" namespace Fullpipe { @@ -36,7 +37,7 @@ CInputController::CInputController() { _field_14 = 0; _cursorId = 0; _cursorIndex = -1; - _flags = 1; + _inputFlags = 1; _cursorBounds.left = 0; _cursorBounds.top = 0; @@ -55,4 +56,48 @@ void setInputDisabled(bool state) { g_fullpipe->_inputController->setInputDisabled(state); } +void CInputController::addCursor(CursorInfo *cursor) { + CursorInfo *newc = new CursorInfo(cursor); + Common::Point p; + + cursor->picture->getDimensions(&p); + + newc->width = p.x; + newc->height = p.y; + + newc->picture->_x = -1; + newc->picture->_y = -1; + + _cursorsArray.push_back(newc); +} + +void CInputController::setCursorMode(bool enabled) { + if (enabled) + _inputFlags |= 1; + else + _inputFlags &= ~1; +} + +CursorInfo::CursorInfo() { + pictureId = 0; + picture = 0; + hotspotX = 0; + hotspotY = 0; + itemPictureOffsX = 0; + itemPictureOffsY = 0; + width = 0; + height = 0; +} + +CursorInfo::CursorInfo(CursorInfo *src) { + pictureId = src->pictureId; + picture = src->picture; + hotspotX = src->hotspotX; + hotspotY = src->hotspotY; + itemPictureOffsX = src->itemPictureOffsX; + itemPictureOffsY = src->itemPictureOffsY; + width = src->width; + height = src->height; +} + } // End of namespace Fullpipe diff --git a/engines/fullpipe/input.h b/engines/fullpipe/input.h index a9106b7b01..72742b04b6 100644 --- a/engines/fullpipe/input.h +++ b/engines/fullpipe/input.h @@ -25,27 +25,44 @@ namespace Fullpipe { +class Picture; + void setInputDisabled(bool state); -class CInputControllerItemArray : public CObArray { +struct CursorInfo { + int pictureId; + Picture *picture; + int hotspotX; + int hotspotY; + int itemPictureOffsX; + int itemPictureOffsY; + int width; + int height; + + CursorInfo(); + CursorInfo(CursorInfo *src); }; +typedef Common::Array<CursorInfo *> CursorsArray; + class CInputController { //CObject obj; int _flag; - int _flags; + int _inputFlags; int _cursorHandle; int _hCursor; int _field_14; int _cursorId; int _cursorIndex; - CInputControllerItemArray _cursorsArray; + CursorsArray _cursorsArray; Common::Rect _cursorBounds; int _cursorItemPicture; public: CInputController(); void setInputDisabled(bool state); + void addCursor(CursorInfo *cursor); + void setCursorMode(bool mode); }; } // End of namespace Fullpipe |