[Scummvm-cvs-logs] scummvm master -> e8f4c28d10e072a77aafbed9033991a4bb3da43b
sev-
sev at scummvm.org
Thu Sep 12 21:52:18 CEST 2013
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
7e08d4f6b2 FULLPIPE: Move PreloadItems to gameloader.h
6cd830fb1b FULLPIPE: Implement CGameLoader::preloadScene()
e8f4c28d10 FULLPIPE: Move Sc2 to gameloader.h
Commit: 7e08d4f6b290824e43c91cea8cb3b8716144b859
https://github.com/scummvm/scummvm/commit/7e08d4f6b290824e43c91cea8cb3b8716144b859
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2013-09-12T12:51:21-07:00
Commit Message:
FULLPIPE: Move PreloadItems to gameloader.h
Changed paths:
engines/fullpipe/gameloader.h
engines/fullpipe/objects.h
diff --git a/engines/fullpipe/gameloader.h b/engines/fullpipe/gameloader.h
index a8d51cd..73873fb 100644
--- a/engines/fullpipe/gameloader.h
+++ b/engines/fullpipe/gameloader.h
@@ -34,6 +34,18 @@ class CMctlCompound;
class CInputController;
class CInteractionController;
+struct PreloadItem {
+ int preloadId1;
+ int preloadId2;
+ int sceneId;
+ int field_C;
+};
+
+class PreloadItems : public Common::Array<PreloadItem>, public CObject {
+ public:
+ virtual bool load(MfcArchive &file);
+};
+
class CGameLoader : public CObject {
public:
CGameLoader();
diff --git a/engines/fullpipe/objects.h b/engines/fullpipe/objects.h
index 55686ac..008e684 100644
--- a/engines/fullpipe/objects.h
+++ b/engines/fullpipe/objects.h
@@ -117,18 +117,6 @@ class CGameVar : public CObject {
CGameVar *getSubVarByIndex(int idx);
};
-struct PreloadItem {
- int preloadId1;
- int preloadId2;
- int sceneId;
- int field_C;
-};
-
-class PreloadItems : public Common::Array<PreloadItem>, public CObject {
- public:
- virtual bool load(MfcArchive &file);
-};
-
} // End of namespace Fullpipe
#endif /* FULLPIPE_OBJECTS_H */
Commit: 6cd830fb1bfaec9207248bb935d1f9c9c008dd7a
https://github.com/scummvm/scummvm/commit/6cd830fb1bfaec9207248bb935d1f9c9c008dd7a
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2013-09-12T12:51:21-07:00
Commit Message:
FULLPIPE: Implement CGameLoader::preloadScene()
Changed paths:
engines/fullpipe/gameloader.cpp
engines/fullpipe/gameloader.h
engines/fullpipe/messages.cpp
engines/fullpipe/messages.h
engines/fullpipe/motion.h
engines/fullpipe/stateloader.cpp
diff --git a/engines/fullpipe/gameloader.cpp b/engines/fullpipe/gameloader.cpp
index 142c278..fef7f56 100644
--- a/engines/fullpipe/gameloader.cpp
+++ b/engines/fullpipe/gameloader.cpp
@@ -27,6 +27,7 @@
#include "fullpipe/input.h"
#include "fullpipe/statics.h"
#include "fullpipe/interaction.h"
+#include "fullpipe/motion.h"
namespace Fullpipe {
@@ -227,12 +228,88 @@ bool CGameLoader::gotoScene(int sceneId, int entranceId) {
return true;
}
+bool preloadCallback(const PreloadItem &pre, int flag) {
+ warning("STUB: preloadCallback");
+
+ return true;
+}
+
bool CGameLoader::preloadScene(int sceneId, int entranceId) {
- warning("STUB: preloadScene(%d, %d), ", sceneId, entranceId);
+ debug(0, "preloadScene(%d, %d), ", sceneId, entranceId);
+
+ if (_preloadSceneId != sceneId || _preloadEntranceId != entranceId) {
+ _preloadSceneId = sceneId;
+ _preloadEntranceId = entranceId;
+ return true;
+ }
+
+ int idx = -1;
+
+ for (uint i = 0; i < _preloadItems.size(); i++)
+ if (_preloadItems[i].preloadId1 == sceneId && _preloadItems[i].preloadId2 == entranceId) {
+ idx = i;
+ break;
+ }
+
+ if (idx == -1) {
+ _preloadSceneId = 0;
+ _preloadEntranceId = 0;
+ return false;
+ }
+
+ if (_preloadCallback) {
+ if (!_preloadCallback(_preloadItems[idx], 0))
+ return false;
+ }
+
+ if (g_fullpipe->_currentScene && g_fullpipe->_currentScene->_sceneId == sceneId)
+ g_fullpipe->_currentScene = 0;
+
+ saveScenePicAniInfos(sceneId);
+ clearGlobalMessageQueueList1();
+ unloadScene(sceneId);
+
+ if (_preloadCallback)
+ _preloadCallback(_preloadItems[idx], 50);
+
+ loadScene(_preloadItems[idx].sceneId);
+
+ ExCommand *ex = new ExCommand(_preloadItems[idx].sceneId, 17, 62, 0, 0, 0, 1, 0, 0, 0);
+ ex->_excFlags = 2;
+ ex->_keyCode = _preloadItems[idx].keyCode;
+
+ _preloadSceneId = 0;
+ _preloadEntranceId = 0;
+
+ if (_preloadCallback)
+ _preloadCallback(_preloadItems[idx], 100);
+
+ ex->postMessage();
return true;
}
+bool CGameLoader::unloadScene(int sceneId) {
+ SceneTag *tag;
+ int sceneTag = getSceneTagBySceneId(sceneId, &tag);
+
+ if (sceneTag < 0)
+ return false;
+
+ if (_sc2array[sceneTag]._isLoaded)
+ saveScenePicAniInfos(sceneId);
+
+ _sc2array[sceneTag]._motionController->freeItems();
+
+ delete tag->_scene;
+ tag->_scene = 0;
+
+ _sc2array[sceneTag]._isLoaded = 0;
+ _sc2array[sceneTag]._scene = 0;
+
+ 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++) {
@@ -304,6 +381,10 @@ void CGameLoader::applyPicAniInfos(Scene *sc, PicAniInfo **picAniInfo, int picAn
}
}
+void CGameLoader::saveScenePicAniInfos(int sceneId) {
+ warning("STUB: CGameLoader::saveScenePicAniInfos(%d)", sceneId);
+}
+
void CGameLoader::updateSystems(int counterdiff) {
if (g_fullpipe->_currentScene) {
g_fullpipe->_currentScene->update(counterdiff);
diff --git a/engines/fullpipe/gameloader.h b/engines/fullpipe/gameloader.h
index 73873fb..6db9c98 100644
--- a/engines/fullpipe/gameloader.h
+++ b/engines/fullpipe/gameloader.h
@@ -38,9 +38,11 @@ struct PreloadItem {
int preloadId1;
int preloadId2;
int sceneId;
- int field_C;
+ int keyCode;
};
+bool preloadCallback(const PreloadItem &pre, int flag);
+
class PreloadItems : public Common::Array<PreloadItem>, public CObject {
public:
virtual bool load(MfcArchive &file);
@@ -55,11 +57,13 @@ class CGameLoader : public CObject {
bool loadScene(int sceneId);
bool gotoScene(int sceneId, int entranceId);
bool preloadScene(int sceneId, int entranceId);
+ bool unloadScene(int sceneId);
void updateSystems(int counterdiff);
int getSceneTagBySceneId(int sceneId, SceneTag **st);
void applyPicAniInfos(Scene *sc, PicAniInfo **picAniInfo, int picAniInfoCount);
+ void saveScenePicAniInfos(int sceneId);
GameProject *_gameProject;
CInteractionController *_interactionController;
@@ -67,7 +71,7 @@ class CGameLoader : public CObject {
CInventory2 _inventory;
Sc2Array _sc2array;
void *_sceneSwitcher;
- void *_preloadCallback;
+ bool (*_preloadCallback)(const PreloadItem &pre, int flag);
void *_readSavegameCallback;
int16 _field_F8;
int16 _field_FA;
diff --git a/engines/fullpipe/messages.cpp b/engines/fullpipe/messages.cpp
index 478112f..36fd139 100644
--- a/engines/fullpipe/messages.cpp
+++ b/engines/fullpipe/messages.cpp
@@ -530,6 +530,10 @@ void GlobalMessageQueueList::addMessageQueue(MessageQueue *msg) {
push_back(msg);
}
+void clearGlobalMessageQueueList1() {
+ warning("STUB: clearGlobalMessageQueueList1()");
+}
+
bool removeMessageHandler(int16 id, int pos) {
if (g_fullpipe->_messageHandlers) {
MessageHandler *curItem = g_fullpipe->_messageHandlers;
diff --git a/engines/fullpipe/messages.h b/engines/fullpipe/messages.h
index 960e184..7ba9126 100644
--- a/engines/fullpipe/messages.h
+++ b/engines/fullpipe/messages.h
@@ -168,6 +168,7 @@ bool insertMessageHandler(int (*callback)(ExCommand *), int index, int16 id);
void clearMessageHandlers();
void processMessages();
void updateGlobalMessageQueue(int id, int objid);
+void clearGlobalMessageQueueList1();
} // End of namespace Fullpipe
diff --git a/engines/fullpipe/motion.h b/engines/fullpipe/motion.h
index 89a9896..85a5291 100644
--- a/engines/fullpipe/motion.h
+++ b/engines/fullpipe/motion.h
@@ -42,6 +42,7 @@ class CMotionController : public CObject {
void clearEnabled() { _isEnabled = false; }
virtual void addObject(StaticANIObject *obj) {}
+ virtual void freeItems() {}
};
class CMctlCompoundArray : public Common::Array<CObject>, public CObject {
diff --git a/engines/fullpipe/stateloader.cpp b/engines/fullpipe/stateloader.cpp
index 40169dd..366872c 100644
--- a/engines/fullpipe/stateloader.cpp
+++ b/engines/fullpipe/stateloader.cpp
@@ -59,8 +59,8 @@ bool FullpipeEngine::loadGam(const char *fname, int scene) {
}
// _sceneSwitcher = sceneSwitcher; // substituted with direct call
- // _preloadCallback = gameLoaderPreloadCallback
- // _readSavegameCallback = gameLoaderReadSavegameCallback;
+ _gameLoader->_preloadCallback = preloadCallback;
+ // _readSavegameCallback = gameLoaderReadSavegameCallback; // TODO
_aniMan = accessScene(SC_COMMON)->getAniMan();
_scene2 = 0;
@@ -155,7 +155,7 @@ bool PreloadItems::load(MfcArchive &file) {
t->preloadId1 = file.readUint32LE();
t->preloadId2 = file.readUint32LE();
t->sceneId = file.readUint32LE();
- t->field_C = file.readUint32LE();
+ t->keyCode = file.readUint32LE();
push_back(*t);
}
Commit: e8f4c28d10e072a77aafbed9033991a4bb3da43b
https://github.com/scummvm/scummvm/commit/e8f4c28d10e072a77aafbed9033991a4bb3da43b
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2013-09-12T12:51:21-07:00
Commit Message:
FULLPIPE: Move Sc2 to gameloader.h
Changed paths:
engines/fullpipe/gameloader.cpp
engines/fullpipe/gameloader.h
engines/fullpipe/objects.h
engines/fullpipe/stateloader.cpp
diff --git a/engines/fullpipe/gameloader.cpp b/engines/fullpipe/gameloader.cpp
index fef7f56..fa8eddf 100644
--- a/engines/fullpipe/gameloader.cpp
+++ b/engines/fullpipe/gameloader.cpp
@@ -404,6 +404,78 @@ void CGameLoader::updateSystems(int counterdiff) {
}
}
+Sc2::Sc2() {
+ _sceneId = 0;
+ _field_2 = 0;
+ _scene = 0;
+ _motionController = 0;
+ _data1 = 0;
+ _count1 = 0;
+ _defPicAniInfos = 0;
+ _defPicAniInfosCount = 0;
+ _picAniInfos = 0;
+ _picAniInfosCount = 0;
+ _isLoaded = 0;
+ _entranceData = 0;
+ _entranceDataCount = 0;
+}
+
+bool Sc2::load(MfcArchive &file) {
+ debug(5, "Sc2::load()");
+
+ _sceneId = file.readUint16LE();
+
+ _motionController = (CMotionController *)file.readClass();
+
+ _count1 = file.readUint32LE();
+ debug(4, "count1: %d", _count1);
+ if (_count1 > 0) {
+ _data1 = (int32 *)malloc(_count1 * sizeof(int32));
+
+ for (int i = 0; i < _count1; i++) {
+ _data1[i] = file.readUint32LE();
+ }
+ } else {
+ _data1 = 0;
+ }
+
+ _defPicAniInfosCount = file.readUint32LE();
+ debug(4, "defPicAniInfos: %d", _defPicAniInfosCount);
+ if (_defPicAniInfosCount > 0) {
+ _defPicAniInfos = (PicAniInfo **)malloc(_defPicAniInfosCount * sizeof(PicAniInfo *));
+
+ for (int i = 0; i < _defPicAniInfosCount; i++) {
+ _defPicAniInfos[i] = new PicAniInfo();
+
+ _defPicAniInfos[i]->load(file);
+ }
+ } else {
+ _defPicAniInfos = 0;
+ }
+
+ _picAniInfos = 0;
+ _picAniInfosCount = 0;
+
+ _entranceDataCount = file.readUint32LE();
+ debug(4, "_entranceData: %d", _entranceDataCount);
+
+ if (_entranceDataCount > 0) {
+ _entranceData = (EntranceInfo **)malloc(_entranceDataCount * sizeof(EntranceInfo *));
+
+ for (int i = 0; i < _entranceDataCount; i++) {
+ _entranceData[i] = new EntranceInfo();
+ _entranceData[i]->load(file);
+ }
+ } else {
+ _entranceData = 0;
+ }
+
+ if (file.size() - file.pos() > 0)
+ error("Sc2::load(): (%d bytes left)", file.size() - file.pos());
+
+ return true;
+}
+
CGameVar *FullpipeEngine::getGameLoaderGameVar() {
if (_gameLoader)
return _gameLoader->_gameVar;
diff --git a/engines/fullpipe/gameloader.h b/engines/fullpipe/gameloader.h
index 6db9c98..87cd1f1 100644
--- a/engines/fullpipe/gameloader.h
+++ b/engines/fullpipe/gameloader.h
@@ -33,6 +33,30 @@ class SceneTag;
class CMctlCompound;
class CInputController;
class CInteractionController;
+class CMotionController;
+
+class Sc2 : public CObject {
+ public:
+ int16 _sceneId;
+ int16 _field_2;
+ Scene *_scene;
+ CMotionController *_motionController;
+ int32 *_data1; // FIXME, could be a struct
+ int _count1;
+ PicAniInfo **_defPicAniInfos;
+ int _defPicAniInfosCount;
+ PicAniInfo **_picAniInfos;
+ int _picAniInfosCount;
+ int _isLoaded;
+ EntranceInfo **_entranceData;
+ int _entranceDataCount;
+
+ public:
+ Sc2();
+ virtual bool load(MfcArchive &file);
+};
+
+typedef Common::Array<Sc2> Sc2Array;
struct PreloadItem {
int preloadId1;
diff --git a/engines/fullpipe/objects.h b/engines/fullpipe/objects.h
index 008e684..9e7c753 100644
--- a/engines/fullpipe/objects.h
+++ b/engines/fullpipe/objects.h
@@ -63,31 +63,6 @@ struct PicAniInfo {
bool load(MfcArchive &file);
};
-class CMotionController;
-
-class Sc2 : public CObject {
- public:
- int16 _sceneId;
- int16 _field_2;
- Scene *_scene;
- CMotionController *_motionController;
- int32 *_data1; // FIXME, could be a struct
- int _count1;
- PicAniInfo **_defPicAniInfos;
- int _defPicAniInfosCount;
- PicAniInfo **_picAniInfos;
- int _picAniInfosCount;
- int _isLoaded;
- EntranceInfo **_entranceData;
- int _entranceDataCount;
-
- public:
- Sc2();
- virtual bool load(MfcArchive &file);
-};
-
-typedef Common::Array<Sc2> Sc2Array;
-
union VarValue {
float floatValue;
int32 intValue;
diff --git a/engines/fullpipe/stateloader.cpp b/engines/fullpipe/stateloader.cpp
index 366872c..dd00361 100644
--- a/engines/fullpipe/stateloader.cpp
+++ b/engines/fullpipe/stateloader.cpp
@@ -314,78 +314,6 @@ CGameVar *CGameVar::getSubVarByIndex(int idx) {
return sub;
}
-Sc2::Sc2() {
- _sceneId = 0;
- _field_2 = 0;
- _scene = 0;
- _motionController = 0;
- _data1 = 0;
- _count1 = 0;
- _defPicAniInfos = 0;
- _defPicAniInfosCount = 0;
- _picAniInfos = 0;
- _picAniInfosCount = 0;
- _isLoaded = 0;
- _entranceData = 0;
- _entranceDataCount = 0;
-}
-
-bool Sc2::load(MfcArchive &file) {
- debug(5, "Sc2::load()");
-
- _sceneId = file.readUint16LE();
-
- _motionController = (CMotionController *)file.readClass();
-
- _count1 = file.readUint32LE();
- debug(4, "count1: %d", _count1);
- if (_count1 > 0) {
- _data1 = (int32 *)malloc(_count1 * sizeof(int32));
-
- for (int i = 0; i < _count1; i++) {
- _data1[i] = file.readUint32LE();
- }
- } else {
- _data1 = 0;
- }
-
- _defPicAniInfosCount = file.readUint32LE();
- debug(4, "defPicAniInfos: %d", _defPicAniInfosCount);
- if (_defPicAniInfosCount > 0) {
- _defPicAniInfos = (PicAniInfo **)malloc(_defPicAniInfosCount * sizeof(PicAniInfo *));
-
- for (int i = 0; i < _defPicAniInfosCount; i++) {
- _defPicAniInfos[i] = new PicAniInfo();
-
- _defPicAniInfos[i]->load(file);
- }
- } else {
- _defPicAniInfos = 0;
- }
-
- _picAniInfos = 0;
- _picAniInfosCount = 0;
-
- _entranceDataCount = file.readUint32LE();
- debug(4, "_entranceData: %d", _entranceDataCount);
-
- if (_entranceDataCount > 0) {
- _entranceData = (EntranceInfo **)malloc(_entranceDataCount * sizeof(EntranceInfo *));
-
- for (int i = 0; i < _entranceDataCount; i++) {
- _entranceData[i] = new EntranceInfo();
- _entranceData[i]->load(file);
- }
- } else {
- _entranceData = 0;
- }
-
- if (file.size() - file.pos() > 0)
- error("Sc2::load(): (%d bytes left)", file.size() - file.pos());
-
- return true;
-}
-
bool PicAniInfo::load(MfcArchive &file) {
debug(5, "PicAniInfo::load()");
More information about the Scummvm-git-logs
mailing list