diff options
author | Eugene Sandulenko | 2013-07-31 20:06:13 +0300 |
---|---|---|
committer | Eugene Sandulenko | 2013-09-06 14:51:09 +0300 |
commit | 856eb1b0fa92068fd7b61a8c9a6350af596f3f00 (patch) | |
tree | 9a132846224ae8c03ca6ef2a31a296b61987a598 | |
parent | 1c75ebcca93bd1eb260166e17adacdcfac721099 (diff) | |
download | scummvm-rg350-856eb1b0fa92068fd7b61a8c9a6350af596f3f00.tar.gz scummvm-rg350-856eb1b0fa92068fd7b61a8c9a6350af596f3f00.tar.bz2 scummvm-rg350-856eb1b0fa92068fd7b61a8c9a6350af596f3f00.zip |
FULLPIPE: Implemented FullpipeEngine::updateScreen()
-rw-r--r-- | engines/fullpipe/fullpipe.cpp | 46 | ||||
-rw-r--r-- | engines/fullpipe/fullpipe.h | 9 | ||||
-rw-r--r-- | engines/fullpipe/gameloader.cpp | 25 | ||||
-rw-r--r-- | engines/fullpipe/gameloader.h | 3 | ||||
-rw-r--r-- | engines/fullpipe/input.cpp | 4 | ||||
-rw-r--r-- | engines/fullpipe/input.h | 2 | ||||
-rw-r--r-- | engines/fullpipe/inventory.cpp | 6 | ||||
-rw-r--r-- | engines/fullpipe/inventory.h | 1 | ||||
-rw-r--r-- | engines/fullpipe/messages.cpp | 21 | ||||
-rw-r--r-- | engines/fullpipe/messages.h | 5 | ||||
-rw-r--r-- | engines/fullpipe/modal.h | 12 | ||||
-rw-r--r-- | engines/fullpipe/module.mk | 1 | ||||
-rw-r--r-- | engines/fullpipe/scene.cpp | 5 | ||||
-rw-r--r-- | engines/fullpipe/scene.h | 2 | ||||
-rw-r--r-- | engines/fullpipe/statics.cpp | 4 | ||||
-rw-r--r-- | engines/fullpipe/statics.h | 2 |
16 files changed, 142 insertions, 6 deletions
diff --git a/engines/fullpipe/fullpipe.cpp b/engines/fullpipe/fullpipe.cpp index 07a6651ad0..e762331acc 100644 --- a/engines/fullpipe/fullpipe.cpp +++ b/engines/fullpipe/fullpipe.cpp @@ -32,6 +32,7 @@ #include "fullpipe/messages.h" #include "fullpipe/behavior.h" #include "fullpipe/modal.h" +#include "fullpipe/input.h" namespace Fullpipe { @@ -68,6 +69,9 @@ FullpipeEngine::FullpipeEngine(OSystem *syst, const ADGameDescription *gameDesc) _gameContinue = true; _needRestart = false; _flgPlayIntro = true; + _flgSavegameMenuRequested = false; + + _isProcessingMessages = false; _musicAllowed = -1; @@ -87,6 +91,8 @@ FullpipeEngine::FullpipeEngine(OSystem *syst, const ADGameDescription *gameDesc) _msgY = 0; _msgObjectId2 = 0; _msgId = 0; + _mouseVirtX = 0; + _mouseVirtY = 0; _behaviorManager = 0; @@ -206,7 +212,45 @@ void FullpipeEngine::cleanup() { } void FullpipeEngine::updateScreen() { - warning("STUB: FullpipeEngine::updateScreen()"); + _mouseVirtX = _mouseX + _sceneRect.left; + _mouseVirtY = _mouseY + _sceneRect.top; + + //if (inputArFlag) + // updateGame_inputArFlag(); + + if (_modalObject || _flgSavegameMenuRequested && (_gameLoader->updateSystems(42), _modalObject != 0)) { + if (_flgSavegameMenuRequested) { + if (_modalObject->init(42)) { + _modalObject->update(); + } else { + _modalObject->saveload(); + CBaseModalObject *tmp = _modalObject->_parentObj; + + if (_modalObject) + delete _modalObject; + + _modalObject = tmp; + } + } + } else if (_currentScene) { + _currentScene->draw(); + + if (_inventoryScene) + _inventory->draw(); + + if (_updateScreenCallback) + _updateScreenCallback(); + + //if (inputArFlag && _currentScene) { + // vrtTextOut(*(_DWORD *)g_vrtHandle, smallNftData, "DEMO", 4, 380, 580); + // vrtTextOut(*(_DWORD *)g_vrtHandle, smallNftData, "Alt+F4 - exit", 14, 695, 580); + //} + } else { + //vrtRectangle(*(_DWORD *)g_vrtHandle, 0, 0, 0, 800, 600); + } + _inputController->drawCursor(_mouseX, _mouseY); + + ++_updateTicks; } int FullpipeEngine::getObjectEnumState(const char *name, const char *state) { diff --git a/engines/fullpipe/fullpipe.h b/engines/fullpipe/fullpipe.h index 37dc8273aa..15bb28ff0e 100644 --- a/engines/fullpipe/fullpipe.h +++ b/engines/fullpipe/fullpipe.h @@ -108,6 +108,7 @@ public: bool _savesEnabled; bool _updateFlag; bool _flgCanOpenMap; + bool _flgSavegameMenuRequested; Common::Rect _sceneRect; int _sceneWidth; @@ -133,6 +134,12 @@ public: int _msgObjectId2; int _msgId; + Common::List<ExCommand *> _exCommandList; + bool _isProcessingMessages; + + int _mouseVirtX; + int _mouseVirtY; + BehaviorManager *_behaviorManager; MovTable *_movTable; @@ -170,7 +177,7 @@ public: CBaseModalObject *_modalObject; - int (*_updateScreenCallback)(void *); + int (*_updateScreenCallback)(); int (*_updateCursorCallback)(); int _cursorId; diff --git a/engines/fullpipe/gameloader.cpp b/engines/fullpipe/gameloader.cpp index 1d53cd3e15..939da177f4 100644 --- a/engines/fullpipe/gameloader.cpp +++ b/engines/fullpipe/gameloader.cpp @@ -225,6 +225,12 @@ bool CGameLoader::gotoScene(int sceneId, int entranceId) { return true; } +bool CGameLoader::preloadScene(int sceneId, int entranceId) { + warning("STUB: preloadScene(%d, %d), ", sceneId, entranceId); + + return true; +} + int CGameLoader::getSceneTagBySceneId(int sceneId, SceneTag **st) { if (_sc2array.size() > 0 && _gameProject->_sceneTagList->size() > 0) { for (uint i = 0; i < _sc2array.size(); i++) { @@ -248,6 +254,25 @@ void CGameLoader::applyPicAniInfos(Scene *sc, PicAniInfo **picAniInfo, int picAn warning("STUB: CGameLoader::applyPicAniInfo()"); } +void CGameLoader::updateSystems(int counterdiff) { + if (g_fullpipe->_currentScene) { + g_fullpipe->_currentScene->update(counterdiff); + + _exCommand._messageKind = 17; + _updateCounter++; + _exCommand._messageNum = 33; + _exCommand._excFlags = 0; + postMessage(&_exCommand); + } + + processMessages(); + + if (_preloadId1) { + processMessages(); + preloadScene(_preloadId1, _preloadId2); + } +} + CGameVar *FullpipeEngine::getGameLoaderGameVar() { if (_gameLoader) return _gameLoader->_gameVar; diff --git a/engines/fullpipe/gameloader.h b/engines/fullpipe/gameloader.h index 36c99f20dc..4ba48297af 100644 --- a/engines/fullpipe/gameloader.h +++ b/engines/fullpipe/gameloader.h @@ -41,6 +41,9 @@ class CGameLoader : public CObject { virtual bool load(MfcArchive &file); bool loadScene(int sceneId); bool gotoScene(int sceneId, int entranceId); + bool preloadScene(int sceneId, int entranceId); + + void updateSystems(int counterdiff); int getSceneTagBySceneId(int sceneId, SceneTag **st); void applyPicAniInfos(Scene *sc, PicAniInfo **picAniInfo, int picAniInfoCount); diff --git a/engines/fullpipe/input.cpp b/engines/fullpipe/input.cpp index bb6d8baae5..78c6e50a49 100644 --- a/engines/fullpipe/input.cpp +++ b/engines/fullpipe/input.cpp @@ -78,6 +78,10 @@ void CInputController::setCursorMode(bool enabled) { _inputFlags &= ~1; } +void CInputController::drawCursor(int x, int y) { + warning("STUB: CInputController::drawCursor(%d, %d)", x, y); +} + CursorInfo::CursorInfo() { pictureId = 0; picture = 0; diff --git a/engines/fullpipe/input.h b/engines/fullpipe/input.h index 72742b04b6..06013ab0c1 100644 --- a/engines/fullpipe/input.h +++ b/engines/fullpipe/input.h @@ -63,6 +63,8 @@ class CInputController { void setInputDisabled(bool state); void addCursor(CursorInfo *cursor); void setCursorMode(bool mode); + + void drawCursor(int x, int y); }; } // End of namespace Fullpipe diff --git a/engines/fullpipe/inventory.cpp b/engines/fullpipe/inventory.cpp index 8df06e617e..c88d6f9cdc 100644 --- a/engines/fullpipe/inventory.cpp +++ b/engines/fullpipe/inventory.cpp @@ -97,7 +97,7 @@ bool CInventory2::loadPartial(MfcArchive &file) { // CInventory2_SerializePartia } void CInventory2::addItem(int itemId, int value) { - warning("STUB: CInventory2::addItem"); + warning("STUB: CInventory2::addItem(%d, %d)", itemId, value); } void CInventory2::rebuildItemRects() { @@ -106,4 +106,8 @@ void CInventory2::rebuildItemRects() { warning("STUB: CInventory2::rebuildItemRects()"); } +void CInventory2::draw() { + warning("STUB: CInventory2::draw()"); +} + } // End of namespace Fullpipe diff --git a/engines/fullpipe/inventory.h b/engines/fullpipe/inventory.h index 36170b86bf..a61df385a5 100644 --- a/engines/fullpipe/inventory.h +++ b/engines/fullpipe/inventory.h @@ -101,6 +101,7 @@ class CInventory2 : public CInventory { Scene *getScene() { return _scene; } + void draw(); }; } // End of namespace Fullpipe diff --git a/engines/fullpipe/messages.cpp b/engines/fullpipe/messages.cpp index 69b29dcef8..ee9210f066 100644 --- a/engines/fullpipe/messages.cpp +++ b/engines/fullpipe/messages.cpp @@ -79,6 +79,10 @@ bool ExCommand::load(MfcArchive &file) { return true; } +void ExCommand::handleMessage() { + warning("STUB: ExCommand::handleMessage()"); +} + Message::Message() { _messageKind = 0; _parentId = 0; @@ -416,4 +420,21 @@ void clearMessageHandlers() { } } +void postMessage(ExCommand *ex) { + g_fullpipe->_exCommandList.push_back(ex); +} + +void processMessages() { + if (!g_fullpipe->_isProcessingMessages) { + g_fullpipe->_isProcessingMessages = true; + + while (g_fullpipe->_exCommandList.size()) { + ExCommand *ex = g_fullpipe->_exCommandList.front(); + ex->handleMessage(); + g_fullpipe->_exCommandList.pop_front(); + } + g_fullpipe->_isProcessingMessages = false; + } +} + } // End of namespace Fullpipe diff --git a/engines/fullpipe/messages.h b/engines/fullpipe/messages.h index c8fe264da3..0ae11ff244 100644 --- a/engines/fullpipe/messages.h +++ b/engines/fullpipe/messages.h @@ -69,6 +69,8 @@ class ExCommand : public Message { virtual ~ExCommand() {} virtual bool load(MfcArchive &file); + + void handleMessage(); }; class CObjstateCommand : public CObject { @@ -138,7 +140,8 @@ int getMessageHandlersCount(); bool addMessageHandlerByIndex(int (*callback)(ExCommand *), int index, int16 id); bool insertMessageHandler(int (*callback)(ExCommand *), int index, int16 id); void clearMessageHandlers(); - +void postMessage(ExCommand *ex); +void processMessages(); } // End of namespace Fullpipe diff --git a/engines/fullpipe/modal.h b/engines/fullpipe/modal.h index 86b166e317..fb2279825e 100644 --- a/engines/fullpipe/modal.h +++ b/engines/fullpipe/modal.h @@ -26,12 +26,20 @@ namespace Fullpipe { class CBaseModalObject { - int _parentObj; + public: + + CBaseModalObject *_parentObj; public: CBaseModalObject() : _parentObj(0) {} -}; + virtual ~CBaseModalObject() {} + virtual bool handleMessage(ExCommand *message); + virtual bool init(int counterdiff); + virtual bool update(); + + void saveload(); +}; } // End of namespace Fullpipe diff --git a/engines/fullpipe/module.mk b/engines/fullpipe/module.mk index 1771036749..602478cbb7 100644 --- a/engines/fullpipe/module.mk +++ b/engines/fullpipe/module.mk @@ -10,6 +10,7 @@ MODULE_OBJS = \ input.o \ inventory.o \ messages.o \ + modal.o \ motion.o \ ngiarchive.o \ scene.o \ diff --git a/engines/fullpipe/scene.cpp b/engines/fullpipe/scene.cpp index bb0d632186..146cd6e305 100644 --- a/engines/fullpipe/scene.cpp +++ b/engines/fullpipe/scene.cpp @@ -406,6 +406,11 @@ void Scene::updateScrolling() { warning("STUB Scene::updateScrolling()"); } +void Scene::update(int counterdiff) { + for (CPtrList::iterator s = _staticANIObjectList2.begin(); s != _staticANIObjectList2.end(); ++s) + ((StaticANIObject *)*s)->update(counterdiff); +} + void Scene::drawContent(int minPri, int maxPri, bool drawBg) { if (!_picObjList.size() && !_bigPictureArray1Count) return; diff --git a/engines/fullpipe/scene.h b/engines/fullpipe/scene.h index b3dbdcc605..2a6fafd037 100644 --- a/engines/fullpipe/scene.h +++ b/engines/fullpipe/scene.h @@ -54,6 +54,8 @@ class Scene : public Background { void drawContent(int minPri, int maxPri, bool drawBG); void updateScrolling(); + void update(int counterdiff); + StaticANIObject *getAniMan(); StaticANIObject *getStaticANIObject1ById(int obj, int a3); StaticANIObject *getStaticANIObject1ByName(char *name, int a3); diff --git a/engines/fullpipe/statics.cpp b/engines/fullpipe/statics.cpp index 6c3ba3ff17..5d0ba0d7a6 100644 --- a/engines/fullpipe/statics.cpp +++ b/engines/fullpipe/statics.cpp @@ -352,6 +352,10 @@ Common::Point *StaticANIObject::getCurrDimensions(Common::Point &p) { return &p; } +void StaticANIObject::update(int counterdiff) { + warning("STUB: StaticANIObject::update(%d)", counterdiff); +} + Statics::Statics() { _staticsId = 0; _picture = 0; diff --git a/engines/fullpipe/statics.h b/engines/fullpipe/statics.h index bfd7e70f99..ccac7dea11 100644 --- a/engines/fullpipe/statics.h +++ b/engines/fullpipe/statics.h @@ -195,6 +195,8 @@ class StaticANIObject : public GameObject { void initMovements(); void loadMovementsPixelData(); + void update(int counterdiff); + Statics *addReverseStatics(Statics *ani); void draw(); void draw2(); |