diff options
Diffstat (limited to 'engines/tsage')
-rw-r--r-- | engines/tsage/core.cpp | 59 | ||||
-rw-r--r-- | engines/tsage/core.h | 26 | ||||
-rw-r--r-- | engines/tsage/debugger.cpp | 2 | ||||
-rw-r--r-- | engines/tsage/dialogs.cpp | 4 | ||||
-rw-r--r-- | engines/tsage/globals.h | 6 | ||||
-rw-r--r-- | engines/tsage/graphics.cpp | 2 | ||||
-rw-r--r-- | engines/tsage/ringworld_logic.cpp | 2 | ||||
-rw-r--r-- | engines/tsage/ringworld_scenes3.cpp | 4 | ||||
-rw-r--r-- | engines/tsage/ringworld_scenes8.cpp | 2 | ||||
-rw-r--r-- | engines/tsage/saveload.cpp | 14 | ||||
-rw-r--r-- | engines/tsage/saveload.h | 56 | ||||
-rw-r--r-- | engines/tsage/scenes.cpp | 10 |
12 files changed, 88 insertions, 99 deletions
diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 8d332c46af..1fa037ee94 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -537,7 +537,7 @@ void PlayerMover::setDest(const Common::Point &destPos) { #define REGION_LIST_SIZE 20 void PlayerMover::pathfind(Common::Point *routeList, Common::Point srcPos, Common::Point destPos, RouteEnds routeEnds) { - List<int> regionIndexes; + Common::List<int> regionIndexes; RouteEnds tempRouteEnds; int routeRegions[REGION_LIST_SIZE]; Common::Point objPos; @@ -687,7 +687,7 @@ int PlayerMover::regionIndexOf(const Common::Point &pt) { return 0; } -int PlayerMover::findClosestRegion(Common::Point &pt, List<int> &indexList) { +int PlayerMover::findClosestRegion(Common::Point &pt, const Common::List<int> &indexList) { int newY = pt.y; int result = 0; @@ -695,35 +695,35 @@ int PlayerMover::findClosestRegion(Common::Point &pt, List<int> &indexList) { int newX = pt.x + idx; result = regionIndexOf(newX, pt.y); - if ((result == 0) || indexList.contains(result)) { + if ((result == 0) || contains(indexList, result)) { newY = pt.y + idx; result = regionIndexOf(newX, newY); - if ((result == 0) || indexList.contains(result)) { + if ((result == 0) || contains(indexList, result)) { newX -= idx; result = regionIndexOf(newX, newY); - if ((result == 0) || indexList.contains(result)) { + if ((result == 0) || contains(indexList, result)) { newX -= idx; result = regionIndexOf(newX, newY); - if ((result == 0) || indexList.contains(result)) { + if ((result == 0) || contains(indexList, result)) { newY -= idx; result = regionIndexOf(newX, newY); - if ((result == 0) || indexList.contains(result)) { + if ((result == 0) || contains(indexList, result)) { newY -= idx; result = regionIndexOf(newX, newY); - if ((result == 0) || indexList.contains(result)) { + if ((result == 0) || contains(indexList, result)) { newX += idx; result = regionIndexOf(newX, newY); - if ((result == 0) || indexList.contains(result)) { + if ((result == 0) || contains(indexList, result)) { newX += idx; result = regionIndexOf(newX, newY); - if ((result == 0) || indexList.contains(result)) { + if ((result == 0) || contains(indexList, result)) { continue; } } @@ -1132,8 +1132,7 @@ void PaletteRotation::remove() { Action *action = _action; g_system->getPaletteManager()->setPalette((const byte *)&_palette[_start], _start, _end - _start); - if (_scenePalette->_listeners.contains(this)) - _scenePalette->_listeners.remove(this); + _scenePalette->_listeners.remove(this); delete this; if (action) @@ -1213,8 +1212,7 @@ void PaletteUnknown::remove() { for (int i = 0; i < 256; i++) _scenePalette->_palette[i] = _palette[i]; _scenePalette->refresh(); - if (_scenePalette->_listeners.contains(this)) - _scenePalette->_listeners.remove(this); + _scenePalette->_listeners.remove(this); delete this; } @@ -1312,13 +1310,13 @@ void ScenePalette::getPalette(int start, int count) { } void ScenePalette::signalListeners() { - for (List<PaletteModifier *>::iterator i = _listeners.begin(); i != _listeners.end(); ++i) { + for (SynchronisedList<PaletteModifier *>::iterator i = _listeners.begin(); i != _listeners.end(); ++i) { (*i)->signal(); } } void ScenePalette::clearListeners() { - List<PaletteModifier *>::iterator i = _listeners.begin(); + SynchronisedList<PaletteModifier *>::iterator i = _listeners.begin(); while (i != _listeners.end()) { PaletteModifier *obj = *i; ++i; @@ -1377,6 +1375,7 @@ PaletteUnknown *ScenePalette::addUnkPal(RGB8 *arrBufferRGB, int unkNumb, bool di void ScenePalette::changeBackground(const Rect &bounds, FadeMode fadeMode) { ScenePalette tempPalette; + if (_globals->_sceneManager._hasPalette) { if ((fadeMode == FADEMODE_GRADUAL) || (fadeMode == FADEMODE_IMMEDIATE)) { // Fade out any active palette @@ -1397,7 +1396,10 @@ void ScenePalette::changeBackground(const Rect &bounds, FadeMode fadeMode) { _globals->_screenSurface.copyFrom(_globals->_sceneManager._scene->_backSurface, bounds, Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), NULL); - tempPalette._listeners.clear2(); + + for (SynchronisedList<PaletteModifier *>::iterator i = tempPalette._listeners.begin(); i != tempPalette._listeners.end(); ++i) + delete *i; + tempPalette._listeners.clear(); } void ScenePalette::synchronise(Serialiser &s) { @@ -1941,7 +1943,7 @@ int SceneObject::checkRegion(const Common::Point &pt) { } newY -= _yDiff; - List<SceneObject *>::iterator i; + SynchronisedList<SceneObject *>::iterator i; for (i = _globals->_sceneObjects->begin(); (regionIndex == 0) && (i != _globals->_sceneObjects->end()); ++i) { if ((*i) && ((*i)->_flags & OBJFLAG_CHECK_REGION)) { int objYDiff = (*i)->_position.y - _yDiff; @@ -2229,11 +2231,8 @@ void SceneObject::calcAngle(const Common::Point &pt) { } void SceneObject::removeObject() { - if (_globals->_sceneItems.contains(this)) - _globals->_sceneItems.remove(this); - - if (_globals->_sceneObjects->contains(this)) - _globals->_sceneObjects->remove(this); + _globals->_sceneItems.remove(this); + _globals->_sceneObjects->remove(this); if (_visage) { _vm->_memoryManager.deallocate(_visage); @@ -2369,7 +2368,7 @@ void SceneObjectList::draw() { uint32 flagMask = (paneNum == 0) ? OBJFLAG_PANE_0 : OBJFLAG_PANE_1; // Initial loop to set up object list and update object position, priority, and flags - for (List<SceneObject *>::iterator i = _globals->_sceneObjects->begin(); + for (SynchronisedList<SceneObject *>::iterator i = _globals->_sceneObjects->begin(); i != _globals->_sceneObjects->end(); ++i) { SceneObject *obj = *i; objList.push_back(obj); @@ -2523,7 +2522,7 @@ void SceneObjectList::activate() { _globals->_sceneObjects_queue.push_front(this); // Flag all the objects as modified - List<SceneObject *>::iterator i; + SynchronisedList<SceneObject *>::iterator i; for (i = begin(); i != end(); ++i) { (*i)->_flags |= OBJFLAG_PANES; } @@ -2544,7 +2543,7 @@ void SceneObjectList::deactivate() { _globals->_sceneObjects_queue.pop_front(); _globals->_sceneObjects = *_globals->_sceneObjects_queue.begin(); - List<SceneObject *>::iterator i; + SynchronisedList<SceneObject *>::iterator i; for (i = objectList->begin(); i != objectList->end(); ++i) { if (!((*i)->_flags & OBJFLAG_CLONED)) { SceneObject *sceneObj = (*i)->clone(); @@ -3283,9 +3282,9 @@ void WalkRegions::load(int sceneNum) { * @param pt Point to locate * @param indexList List of region indexes that should be ignored */ -int WalkRegions::indexOf(const Common::Point &pt, List<int> *indexList) { +int WalkRegions::indexOf(const Common::Point &pt, const Common::List<int> *indexList) { for (uint idx = 0; idx < _regionList.size(); ++idx) { - if ((!indexList || !indexList->contains(idx + 1)) && _regionList[idx].contains(pt)) + if ((!indexList || contains(*indexList, int(idx + 1))) && _regionList[idx].contains(pt)) return idx + 1; } @@ -3511,7 +3510,7 @@ void SceneHandler::process(Event &event) { if (_globals->_player._uiEnabled && (event.eventType == EVENT_BUTTON_DOWN) && !_globals->_sceneItems.empty()) { // Scan the item list to find one the mouse is within - List<SceneItem *>::iterator i = _globals->_sceneItems.begin(); + SynchronisedList<SceneItem *>::iterator i = _globals->_sceneItems.begin(); while ((i != _globals->_sceneItems.end()) && !(*i)->contains(event.mousePos)) ++i; @@ -3598,7 +3597,7 @@ void Game::execute() { do { // Process all currently atcive game handlers activeFlag = false; - for (List<GameHandler *>::iterator i = _handlers.begin(); i != _handlers.end(); ++i) { + for (SynchronisedList<GameHandler *>::iterator i = _handlers.begin(); i != _handlers.end(); ++i) { GameHandler *gh = *i; if (gh->_lockCtr.getCtr() == 0) { gh->execute(); diff --git a/engines/tsage/core.h b/engines/tsage/core.h index cfd2867d35..e30d6efb2d 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -107,7 +107,7 @@ public: InvObject _jar; InvObject _emptyJar; - List<InvObject *> _itemList; + SynchronisedList<InvObject *> _itemList; InvObject *_selectedItem; public: InvObjectList(); @@ -264,7 +264,7 @@ protected: void pathfind(Common::Point *routeList, Common::Point srcPos, Common::Point destPos, RouteEnds routeEnds); int regionIndexOf(const Common::Point &pt); int regionIndexOf(int xp, int yp) { return regionIndexOf(Common::Point(xp, yp)); } - int findClosestRegion(Common::Point &pt, List<int> &indexList); + int findClosestRegion(Common::Point &pt, const Common::List<int> &indexList); int checkMover(Common::Point &srcPos, const Common::Point &destPos); void checkMovement2(const Common::Point &pt1, const Common::Point &pt2, int numSteps, Common::Point &ptOut); int proc1(int *routeList, int srcRegion, int destRegion, int &v); @@ -363,7 +363,7 @@ class ScenePalette: public SavedObject { public: RGB8 _palette[256]; GfxColours _colours; - List<PaletteModifier *> _listeners; + SynchronisedList<PaletteModifier *> _listeners; int _field412; uint8 _redColour; @@ -684,7 +684,7 @@ public: static LineSliceSet mergeSlices(const LineSliceSet &set1, const LineSliceSet &set2); }; -class SceneRegions: public List<Region> { +class SceneRegions: public Common::List<Region> { public: void load(int sceneNum); @@ -695,7 +695,7 @@ class SceneObjectList: public SavedObject { private: void checkIntersection(Common::Array<SceneObject *> &ObjList, uint ObjIndex, int PaneNum); - List<SceneObject *> _objList; + SynchronisedList<SceneObject *> _objList; bool _listAltered; public: SceneObjectList() { _listAltered = false; } @@ -712,15 +712,15 @@ public: void recurse(EventHandlerFn Fn) { // Loop through each object _listAltered = false; - for (List<SceneObject *>::iterator i = _objList.begin(); i != _objList.end() && !_listAltered; ) { + for (SynchronisedList<SceneObject *>::iterator i = _objList.begin(); i != _objList.end() && !_listAltered; ) { SceneObject *o = *i; ++i; Fn(o); } } - List<SceneObject *>::iterator begin() { return _objList.begin(); } - List<SceneObject *>::iterator end() { return _objList.end(); } - bool contains(SceneObject *sceneObj) { return _objList.contains(sceneObj); } + SynchronisedList<SceneObject *>::iterator begin() { return _objList.begin(); } + SynchronisedList<SceneObject *>::iterator end() { return _objList.end(); } + bool contains(SceneObject *sceneObj) { return tSage::contains(_objList, sceneObj); } void push_back(SceneObject *sceneObj) { _objList.push_back(sceneObj); } void push_front(SceneObject *sceneObj) { _objList.push_front(sceneObj); } void remove(SceneObject *sceneObj) { @@ -729,7 +729,7 @@ public: } }; -class ScenePriorities: public List<Region> { +class ScenePriorities: public Common::List<Region> { public: int _resNum; int _field14; @@ -811,7 +811,7 @@ public: /*--------------------------------------------------------------------------*/ -class SceneItemList: public List<SceneItem *> { +class SceneItemList: public SynchronisedList<SceneItem *> { public: void addItems(SceneItem *first, ...); }; @@ -873,7 +873,7 @@ public: void clear(); void load(int sceneNum); - int indexOf(const Common::Point &pt, List<int> *indexList = NULL); + int indexOf(const Common::Point &pt, const Common::List<int> *indexList = NULL); WalkRegion &operator[](int idx) { assert((idx >= 1) && (idx <= (int)_regionList.size())); return _regionList[idx - 1]; @@ -934,7 +934,7 @@ public: class Game { private: - List<GameHandler *> _handlers; + SynchronisedList<GameHandler *> _handlers; static bool notLockedFn(GameHandler *g); void restart(); diff --git a/engines/tsage/debugger.cpp b/engines/tsage/debugger.cpp index 2c6c533125..cc5c9d899c 100644 --- a/engines/tsage/debugger.cpp +++ b/engines/tsage/debugger.cpp @@ -126,7 +126,7 @@ bool Debugger::Cmd_PriorityRegions(int argc, const char **argv) { // Lock the background surface for access Graphics::Surface destSurface = _globals->_sceneManager._scene->_backSurface.lockSurface(); - List<Region>::iterator i = _globals->_sceneManager._scene->_priorities.begin(); + Common::List<Region>::iterator i = _globals->_sceneManager._scene->_priorities.begin(); Common::String regionsDesc; for (; i != _globals->_sceneManager._scene->_priorities.end(); ++i, ++colour, ++count) { diff --git a/engines/tsage/dialogs.cpp b/engines/tsage/dialogs.cpp index 2ab06b44e7..2766ad0450 100644 --- a/engines/tsage/dialogs.cpp +++ b/engines/tsage/dialogs.cpp @@ -383,7 +383,7 @@ void InventoryDialog::show(bool allFlag) { if (!allFlag) { // Determine how many items are in the player's inventory int itemCount = 0; - List<InvObject *>::iterator i; + SynchronisedList<InvObject *>::iterator i; for (i = _globals->_inventory._itemList.begin(); i != _globals->_inventory._itemList.end(); ++i) { if ((*i)->inInventory()) ++itemCount; @@ -405,7 +405,7 @@ InventoryDialog::InventoryDialog(bool allFlag) { // Determine the maximum size of the image of any item in the player's inventory int imgWidth = 0, imgHeight = 0; - List<InvObject *>::iterator i; + SynchronisedList<InvObject *>::iterator i; for (i = _globals->_inventory._itemList.begin(); i != _globals->_inventory._itemList.end(); ++i) { InvObject *invObject = *i; if (allFlag || invObject->inInventory()) { diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 1696ae300d..b102fdf913 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -39,7 +39,7 @@ class Globals: public SavedObject { public: GfxSurface _screenSurface; GfxManager _gfxManagerInstance; - List<GfxManager *> _gfxManagers; + Common::List<GfxManager *> _gfxManagers; SceneHandler _sceneHandler; Game _game; EventsClass _events; @@ -49,7 +49,7 @@ public: SceneItemList _sceneItems; SceneObjectList _sceneObjectsInstance; SceneObjectList *_sceneObjects; - List<SceneObjectList *> _sceneObjects_queue; + SynchronisedList<SceneObjectList *> _sceneObjects_queue; SceneText _sceneText; int _gfxFontNumber; GfxColours _gfxColours; @@ -57,7 +57,7 @@ public: SoundManager _soundManager; Common::Point _dialogCentre; WalkRegions _walkRegions; - List<EventHandler *> _sceneListeners; + SynchronisedList<EventHandler *> _sceneListeners; bool _flags[256]; Player _player; SoundHandler _soundHandler; diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index f497fac732..12ccabd6a5 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -1018,7 +1018,7 @@ void GfxManager::setDefaults() { } void GfxManager::activate() { - assert(!_globals->_gfxManagers.contains(this)); + assert(!contains(_globals->_gfxManagers, this)); _globals->_gfxManagers.push_front(this); } diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index 82d1b02d6b..c9f866bb10 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -285,7 +285,7 @@ void SceneArea::wait() { g_system->delayMillis(10); } - List<SceneItem *>::iterator ii; + SynchronisedList<SceneItem *>::iterator ii; for (ii = _globals->_sceneItems.begin(); ii != _globals->_sceneItems.end(); ++ii) { SceneItem *sceneItem = *ii; if (sceneItem->contains(event.mousePos)) { diff --git a/engines/tsage/ringworld_scenes3.cpp b/engines/tsage/ringworld_scenes3.cpp index 00cd82bd2a..27ddbb4334 100644 --- a/engines/tsage/ringworld_scenes3.cpp +++ b/engines/tsage/ringworld_scenes3.cpp @@ -2714,7 +2714,7 @@ void Scene2200::Action3::signal() { _actionIndex = 8; setDelay(5); } else { - for (List<SceneObject *>::iterator i = _globals->_sceneObjects->begin(); + for (SynchronisedList<SceneObject *>::iterator i = _globals->_sceneObjects->begin(); i != _globals->_sceneObjects->end(); ++i) { (*i)->hide(); } @@ -2751,7 +2751,7 @@ void Scene2200::Action3::signal() { setDelay(5); break; case 7: - for (List<SceneObject *>::iterator i = _globals->_sceneObjects->begin(); + for (SynchronisedList<SceneObject *>::iterator i = _globals->_sceneObjects->begin(); i != _globals->_sceneObjects->end(); ++i) (*i)->show(); diff --git a/engines/tsage/ringworld_scenes8.cpp b/engines/tsage/ringworld_scenes8.cpp index e9277fbe00..70ef94e83b 100644 --- a/engines/tsage/ringworld_scenes8.cpp +++ b/engines/tsage/ringworld_scenes8.cpp @@ -2239,7 +2239,7 @@ void Scene7700::signal() { void Scene7700::process(Event &event) { Scene::process(event); - if (_globals->_sceneItems.contains(&_sceneItem10)) { + if (contains<SceneItem *>(_globals->_sceneItems, &_sceneItem10)) { if (_gfxButton.process(event)) { _sceneItem10.remove(); _sceneHotspot15.remove(); diff --git a/engines/tsage/saveload.cpp b/engines/tsage/saveload.cpp index a33f0a5381..8f9db26cdd 100644 --- a/engines/tsage/saveload.cpp +++ b/engines/tsage/saveload.cpp @@ -52,7 +52,7 @@ Saver::Saver() { Saver::~Saver() { // Internal validation that no saved object is still present int totalLost = 0; - for (List<SavedObject *>::iterator i = _saver->_objList.begin(); i != _saver->_objList.end(); ++i) { + for (SynchronisedList<SavedObject *>::iterator i = _saver->_objList.begin(); i != _saver->_objList.end(); ++i) { SavedObject *so = *i; if (so) ++totalLost; @@ -128,12 +128,12 @@ Common::Error Saver::save(int slot, const Common::String &saveName) { writeSavegameHeader(saveFile, header); // Save out objects that need to come at the start of the savegame - for (List<SaveListener *>::iterator i = _listeners.begin(); i != _listeners.end(); ++i) { + for (SynchronisedList<SaveListener *>::iterator i = _listeners.begin(); i != _listeners.end(); ++i) { (*i)->listenerSynchronise(serialiser); } // Save each registered SaveObject descendant object into the savegame file - for (List<SavedObject *>::iterator i = _objList.begin(); i != _objList.end(); ++i) { + for (SynchronisedList<SavedObject *>::iterator i = _objList.begin(); i != _objList.end(); ++i) { serialiser.validate((*i)->getClassName()); (*i)->synchronise(serialiser); } @@ -171,12 +171,12 @@ Common::Error Saver::restore(int slot) { delete header.thumbnail; // Load in data for objects that need to come at the start of the savegame - for (List<SaveListener *>::iterator i = _listeners.begin(); i != _listeners.end(); ++i) { + for (Common::List<SaveListener *>::iterator i = _listeners.begin(); i != _listeners.end(); ++i) { (*i)->listenerSynchronise(serialiser); } // Loop through each registered object to load in the data - for (List<SavedObject *>::iterator i = _objList.begin(); i != _objList.end(); ++i) { + for (SynchronisedList<SavedObject *>::iterator i = _objList.begin(); i != _objList.end(); ++i) { serialiser.validate((*i)->getClassName()); (*i)->synchronise(serialiser); } @@ -343,7 +343,7 @@ bool Saver::savegamesExist() const { */ int Saver::blockIndexOf(SavedObject *p) { int objIndex = 1; - List<SavedObject *>::iterator iObj; + SynchronisedList<SavedObject *>::iterator iObj; for (iObj = _objList.begin(); iObj != _objList.end(); ++iObj, ++objIndex) { SavedObject *iObjP = *iObj; @@ -364,7 +364,7 @@ void Saver::resolveLoadPointers() { // Outer loop through the main object list int objIndex = 1; - for (List<SavedObject *>::iterator iObj = _objList.begin(); iObj != _objList.end(); ++iObj, ++objIndex) { + for (SynchronisedList<SavedObject *>::iterator iObj = _objList.begin(); iObj != _objList.end(); ++iObj, ++objIndex) { Common::List<SavedObjectRef>::iterator iPtr; for (iPtr = _unresolvedPtrs.begin(); iPtr != _unresolvedPtrs.end(); ) { diff --git a/engines/tsage/saveload.h b/engines/tsage/saveload.h index 12552f8104..2984f88144 100644 --- a/engines/tsage/saveload.h +++ b/engines/tsage/saveload.h @@ -103,63 +103,53 @@ public: * Derived list class with extra functionality */ template<typename T> -class List: public Common::List<T> { +class SynchronisedList : public Common::List<T> { public: - bool contains(T v) { - for (typename List<T>::iterator i = this->begin(); i != this->end(); ++i) - if (*i == v) - return true; - return false; - } - - typedef void (*ForEachFn)(T fn); - void forEach(ForEachFn Fn) { - for (typename List<T>::iterator i = this->begin(); i != this->end(); ++i) - Fn(*i); - } - - void clear2() { - for (typename List<T>::iterator i = this->begin(); i != this->end(); ++i) - delete *i; - Common::List<T>::clear(); - } - void synchronise(Serialiser &s) { int entryCount; if (s.isLoading()) { - List<T>::clear(); + this->clear(); s.syncAsUint32LE(entryCount); for (int idx = 0; idx < entryCount; ++idx) { - List<T>::push_back(static_cast<T>((T)NULL)); - T &obj = List<T>::back(); + this->push_back(static_cast<T>((T)NULL)); + T &obj = Common::List<T>::back(); s.syncPointer((SavedObject **)&obj); } } else { // Get the list size - entryCount = 0; - typename List<T>::iterator i; - for (i = List<T>::begin(); i != List<T>::end(); ++i, ++entryCount) - ; + entryCount = this->size(); // Write out list s.syncAsUint32LE(entryCount); - for (i = List<T>::begin(); i != List<T>::end(); ++i) { + for (typename Common::List<T>::iterator i = this->begin(); i != this->end(); ++i) { s.syncPointer((SavedObject **)&*i); } - } + } } }; /** + * Search whether an element is contained in a list. + * + * @param l List to search. + * @param v Element to search for. + * @return True in case the element is contained, false otherwise. + */ +template<typename T> +inline bool contains(const Common::List<T> &l, const T &v) { + return (Common::find(l.begin(), l.end(), v) != l.end()); +} + +/** * Derived list class for holding function pointers */ template<typename T> -class FunctionList: public List<void (*)(T)> { +class FunctionList : public Common::List<void (*)(T)> { public: void notify(T v) { - for (typename List<void (*)(T)>::iterator i = this->begin(); i != this->end(); ++i) { + for (typename Common::List<void (*)(T)>::iterator i = this->begin(); i != this->end(); ++i) { (*i)(v); } } @@ -180,10 +170,10 @@ typedef SavedObject *(*SavedObjectFactory)(const Common::String &className); class Saver { private: - List<SavedObject *> _objList; + SynchronisedList<SavedObject *> _objList; FunctionList<bool> _saveNotifiers; FunctionList<bool> _loadNotifiers; - List<SaveListener *> _listeners; + Common::List<SaveListener *> _listeners; Common::List<SavedObjectRef> _unresolvedPtrs; SavedObjectFactory _factoryPtr; diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index 5a351f3772..20f96f8cae 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -55,7 +55,7 @@ void SceneManager::checkScene() { _nextSceneNumber = -1; } - _globals->_sceneListeners.forEach(SceneHandler::dispatchObject); + Common::for_each(_globals->_sceneListeners.begin(), _globals->_sceneListeners.end(), SceneHandler::dispatchObject); } void SceneManager::sceneChange() { @@ -64,7 +64,7 @@ void SceneManager::sceneChange() { _scene->remove(); // Clear the scene objects - List<SceneObject *>::iterator io = _globals->_sceneObjects->begin(); + SynchronisedList<SceneObject *>::iterator io = _globals->_sceneObjects->begin(); while (io != _globals->_sceneObjects->end()) { SceneObject *sceneObj = *io; ++io; @@ -80,7 +80,7 @@ void SceneManager::sceneChange() { } // Clear the hotspot list - List<SceneItem *>::iterator ii = _globals->_sceneItems.begin(); + SynchronisedList<SceneItem *>::iterator ii = _globals->_sceneItems.begin(); while (ii != _globals->_sceneItems.end()) { SceneItem *sceneItem = *ii; ++ii; @@ -145,7 +145,7 @@ void SceneManager::changeScene(int newSceneNumber) { } // Stop any objects that were animating - List<SceneObject *>::iterator i; + SynchronisedList<SceneObject *>::iterator i; for (i = _globals->_sceneObjects->begin(); i != _globals->_sceneObjects->end(); ++i) { SceneObject *sceneObj = *i; Common::Point pt(0, 0); @@ -411,7 +411,7 @@ void Scene::drawAltObjects() { Common::Array<SceneObject *> objList; // Initial loop to set the priority for entries in the list - for (List<SceneObject *>::iterator i = _globals->_sceneManager._altSceneObjects.begin(); + for (SynchronisedList<SceneObject *>::iterator i = _globals->_sceneManager._altSceneObjects.begin(); i != _globals->_sceneManager._altSceneObjects.end(); ++i) { SceneObject *obj = *i; objList.push_back(obj); |